Initial commit
This commit is contained in:
23
lua/cave/enum.lua
Normal file
23
lua/cave/enum.lua
Normal file
@@ -0,0 +1,23 @@
|
||||
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
|
||||
Reference in New Issue
Block a user