Layout :: enum { auto, c } ArrayInfo :: struct { child type len usize } FieldInfo :: struct { name []u8 type type index usize } RecordInfo :: struct { name ?[]u8 fields []FieldInfo is_tuple bool layout Layout } EnumInfo :: struct { fields []FieldInfo } TypeInfo :: union(enum) { invalid void void void noreturn void anyopaque void bool void integer void float void array ArrayInfo pointer void slice void range void optional void function void enum EnumInfo record RecordInfo union void fallible void distinct type } EnumFieldStruct func($E, $Field type, $default ?Field) type { match typeinfo!(E) { .enum |info|: { names [info.fields.len]mut []u8 = undefined field_types [info.fields.len]mut type = undefined defaults [info.fields.len]mut ?Field = undefined inline for info.fields |field, index| { names[index] = field.name field_types[index] = Field defaults[index] = default } return struct_type!(.auto, names, field_types, defaults) } else: compile_error!("EnumFieldStruct key must be an enum") } }