24 lines
468 B
Lua
24 lines
468 B
Lua
local Meta = require "cave.meta"
|
|
local validate = Meta.validate
|
|
local Map = Meta.Map
|
|
local Str = Meta.String
|
|
|
|
---@class cave.Enum
|
|
local Enum = {}
|
|
Enum.__index = Enum
|
|
|
|
---@param tbl table<string, string>
|
|
---@param name string
|
|
function Enum.new(tbl, name)
|
|
validate {
|
|
tbl = { tbl, Map(Str, Str) },
|
|
name = { name, Str },
|
|
}
|
|
for key, value in pairs(tbl) do
|
|
assert(key == value)
|
|
end
|
|
setmetatable(tbl, { __meta = Meta.Enum(tbl, name) })
|
|
end
|
|
|
|
return Enum
|