you can implement 3. yourself with a macro. like this:
macro unordered(def) =
def.expectKind nnkTypeDef
def[2].expectKind nnkEnumTy
var fields: OrderedTable[int, NimNode]
for field in def[2][1..^1]:
field.expectKind nnkEnumFieldDef
let i =
if field[1].kind == nnkIntLit:
field[1].intVal
elif field[1].kind == nnkTupleConstr and field[1][0].kind ==
nnkIntLit:
field[1][0].intVal
else:
error "no int value found"; return
fields[i] = field
var sortedTy = nnkEnumTy.newTree(def[2][0])
fields.sort do(a, b: (int, NimNode)) -> int: a[0]-b[0]
for field in fields.values:
sortedTy.add(field)
result = def
result[2] = sortedTy
Run
type
SomeEnum {.unordered.} = enum
seA = 3
seB = 1
seC = (6, "foo")
Run