-- Compiled with roblox-ts v1.2.7 local TS = _G[script] local ZrEnum = TS.import(script, TS.getModule(script, "@rbxts", "zirconium").out.Data.Enum).ZrEnum local zirconTypeId = TS.import(script, script.Parent.Parent, "Shared", "typeId").zirconTypeId local ZirconEnumItem = TS.import(script, script.Parent, "ZirconEnumItem").ZirconEnumItem --[[ * * An extension of the `ZrEnum` class for Zircon ]] local ZirconEnum do local super = ZrEnum ZirconEnum = setmetatable({}, { __tostring = function() return "ZirconEnum" end, __index = super, }) ZirconEnum.__index = ZirconEnum function ZirconEnum.new(...) local self = setmetatable({}, ZirconEnum) return self:constructor(...) or self end function ZirconEnum:constructor(name, members) super.constructor(self, members, name, function(value, index) return ZirconEnumItem.new(self, index, value) end) end function ZirconEnum:is(value) return table.find(self:getItems(), value) ~= nil end function ZirconEnum:getItem(key) local _exp = self:getItems() local _arg0 = function(k) return k:getName() == key end -- ▼ ReadonlyArray.find ▼ local _result = nil for _i, _v in ipairs(_exp) do if _arg0(_v, _i - 1, _exp) == true then _result = _v break end end -- ▲ ReadonlyArray.find ▲ return _result end function ZirconEnum:match(value, matches) for _, member in ipairs(self:getItems()) do if member == value then return matches[member:getName()](value) end end if matches._ ~= nil then return matches._() end error("Invalid match") end function ZirconEnum:getValidator() return { Enum = self, Validate = function(self, value) local enumType = self.Enum if type(value) == "string" then local _exp = enumType:getItems() local _arg0 = function(item) return string.lower(item:getName()) == string.lower(value) end -- ▼ ReadonlyArray.find ▼ local _result = nil for _i, _v in ipairs(_exp) do if _arg0(_v, _i - 1, _exp) == true then _result = _v break end end -- ▲ ReadonlyArray.find ▲ local strItem = _result return strItem ~= nil elseif type(value) == "number" then local _exp = enumType:getItems() local _arg0 = function(item) return item:getValue() == value end -- ▼ ReadonlyArray.find ▼ local _result = nil for _i, _v in ipairs(_exp) do if _arg0(_v, _i - 1, _exp) == true then _result = _v break end end -- ▲ ReadonlyArray.find ▲ local intItem = _result return intItem ~= nil elseif TS.instanceof(value, ZirconEnumItem) then return value:getEnum() == enumType end return false end, Transform = function(self, value) local enumType = self.Enum if type(value) == "string" then local _exp = enumType:getItems() local _arg0 = function(item) return string.lower(item:getName()) == string.lower(value) end -- ▼ ReadonlyArray.find ▼ local _result = nil for _i, _v in ipairs(_exp) do if _arg0(_v, _i - 1, _exp) == true then _result = _v break end end -- ▲ ReadonlyArray.find ▲ local strItem = _result return strItem elseif type(value) == "number" then local _exp = enumType:getItems() local _arg0 = function(item) return item:getValue() == value end -- ▼ ReadonlyArray.find ▼ local _result = nil for _i, _v in ipairs(_exp) do if _arg0(_v, _i - 1, _exp) == true then _result = _v break end end -- ▲ ReadonlyArray.find ▲ local strItem = _result return strItem else return value end end, Type = self:getEnumName(), ErrorMessage = function(value) return zirconTypeId(value) .. (" is not castable to Enum '" .. (self:getEnumName() .. "'")) end, } end function ZirconEnum:toString() return self:getEnumName() end function ZirconEnum:__tostring() return self:toString() end end return { ZirconEnum = ZirconEnum, }