Enums without named instances.
The Base.@enum
macro creates named instances for the subtypes of Enum
. However, providing unique names for those instances can sometimes be problematic, especially when it comes to code generation.
To address these issues, some packages (such as EnumX.jl) offer alternatives to the Base.@enum
macro. These alternatives involve implementing instances in a module.
This package takes it a step further by not naming the instances at all! The idea is that knowing the subtype of Enum
should be sufficient to understand the values of an enum. Therefore, it should be possible to manipulate the instances using their symbols. Additionally, since the Julia compiler propagates constant symbols, no performance impact is expected.
The package provides the exported @anonymousenum
macro for creating an Enum
subtype. This macro can be used similarly to Base.@enum
.
julia> @anonymousenum Fruit::UInt8 begin
apple
banana
end
julia> apple = Fruit(:apple)
julia> @assert apple == Fruit(0)
julia> @assert apple == :apple
julia> @assert instances(Fruit) == (:apple, :banana)
This package was developed to generate enums from type schemas while keeping the generated types and scopes as implementation details of the code generator.
Using this package allows generating an API like the following:
julia> writer.fruit.type = :apple
julia> if reader.fruit.type == :apple
# do something
elseif reader.fruit.type == :banana
# do something else
end
Note that in the example above, the symbols :apple
and :banana
are constant, enabling the same performance as traditional enums.
- EnumX.jl: This package implements scoped enums, as mentioned above.