diff --git a/lib/createEnum.lua b/lib/createEnum.lua index 540f981..b84c44a 100644 --- a/lib/createEnum.lua +++ b/lib/createEnum.lua @@ -37,6 +37,12 @@ local function createEnum(enumName, variantValues) variants[variantName] = createEnumVariant(enum, variantName, value) end + local enumItems = {} + + for _, variant in pairs(variants) do + enumItems[#enumItems + 1] = variant + end + getmetatable(enum)[typeKey] = "Enum" getmetatable(enum).__tostring = function() @@ -44,6 +50,12 @@ local function createEnum(enumName, variantValues) end getmetatable(enum).__index = function(self, key) + if key == "GetEnumItems" then + return function() + return enumItems + end + end + local variant = variants[key] if variant == nil then diff --git a/lib/createEnumGroup_spec.lua b/lib/createEnumGroup_spec.lua index 4184c19..09f9ac6 100644 --- a/lib/createEnumGroup_spec.lua +++ b/lib/createEnumGroup_spec.lua @@ -40,4 +40,22 @@ describe("createEnumGroup", function() tostring(group.whatever) end) end) + + it("should return enum items with GetEnumItems", function() + local values = { + Doge = 1, + Funny = 2, + } + + local Foo = createEnum("Foo", values) + + local enumItems = Foo:GetEnumItems() + assert.equal(#enumItems, 2) + + for index=1,2 do + local enumItem = enumItems[index] + + assert.not_nil(values[enumItem.Name]) + end + end) end) \ No newline at end of file