11.13. Enumeration traits
The ENUM_TRAIT module provides reflection utilities for enumerations: iterating
over all values, converting between enum values and strings, and building
lookup tables. The [string_to_enum] annotation generates a string constructor
for the annotated enum type.
All functions and symbols are in “enum_trait” module, use require to get access to it.
require daslib/enum_trait
Example:
require daslib/enum_trait
enum Color {
red
green
blue
}
[export]
def main() {
print("{Color.green}\n")
let c = to_enum(type<Color>, "blue")
print("{c}\n")
let bad = to_enum(type<Color>, "purple", Color.red)
print("fallback = {bad}\n")
}
// output:
// green
// blue
// fallback = red
11.13.1. Typeinfo macros
- enum_trait::enum_names
Implements typeinfo(enum_names EnumOrEnumType) which returns array of strings with enumValue names.
- enum_trait::enum_length
Implements typeinfo(enum_length EnumOrEnumType) which returns total number of elements in enumeration.
11.13.2. Handled enumerations
- enum_trait::string_to_enum
Enumeration annotation which implements string constructor for enumeration.
11.13.3. Enumeration iteration
- enum_trait::each(tt: auto(TT)) : iterator<TT>()
Returns an iterator over all values of the given enumeration type.
- Arguments
tt : auto(TT)
11.13.4. Enumeration conversion
- enum_trait::enum_to_table(ent: auto(EnumT)) : table<string, EnumT>()
- converts enum type to a table of name => value pairs
usage: let t = enum_to_table(type<EnumType>)
- Arguments
ent : auto(EnumT)
- enum_trait::string(arg: auto) : auto()
- converts enum value to string
usage: let s = string(EnumValue)
- Arguments
arg : auto
11.13.4.1. to_enum
- enum_trait::to_enum(ent: auto(EnumT); name: string) : EnumT()
- converts string to enum value, panics if not found
usage: let e = to_enum(type<EnumType>,”EnumValueName”)
- Arguments
ent : auto(EnumT)
name : string
- enum_trait::to_enum(ent: auto(EnumT); name: string; defaultValue: EnumT) : EnumT()