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 ---@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