local gears_obj = require("gears.object")

local key, meta = awesome._shim_fake_class()

local function new_key(_, args)
    local ret = gears_obj()
    ret._private = args or {}

    -- The miss handler wont work for this.
    for k, v in pairs(ret._private) do
        rawset(ret, k, v)
    end

    --TODO v5: remove this.
    ret.data = ret._private

    rawset(ret, "_is_capi_key", true)

    local md = setmetatable(ret, {
                        __index     = function(...) return meta.__index(...) end,
                        __newindex = function(...) return meta.__newindex(...) end
                    })

    assert((not args) or args.key == md.key)

    return md
end

return setmetatable(key, { __call = new_key, })

-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80