--[[
    这是 skynet.getenv 和 skynet.setenv 的中间层，方便使用

    skynet env 中的 value 是字符串，包括 bool 和 number

    env 自动将 "true" 和 "false" 转换成 bool，将 "number" 字符串转成 number
]]

local skynet = require "skynet"

local cache = {}

local function convert(value)
    if nil == value then
        return nil
    elseif "false" == value then
        return false
    elseif "true" == value then
        return true
    else
        local num = tonumber(value)
        if num then
            return num
        else
            return value
        end
    end
end

local env = {}

function env.get(key)
    assert("string" == type(key))
    local value = cache[key]
    if nil == value then
        value = convert(skynet.getenv(key))
        cache[key] = value
        return value
    else
        return value
    end
end

function env.set(key, value)
    assert("string" == type(key))
    assert(nil ~= value)
    assert("false" ~= value)
    assert("true" ~= value)

    skynet.setenv(key, value)
    cache[key] = convert(value)
end


return env
