import std/[strformat,strutils]
import std/[enumutils]
template printEnumMembers(E: typedesc[enum]) =
for i in E.items:
echo "[$1]: $2 -> ord: $3, $$: $4" % [$(i.symbolRank), $(i.symbolName), $(i.ord), $i] # it works
# it failed with undeclared identifie 'i'
# echo fmt"{i.symbolRank}: {i.symbolName} -> ord: {i.ord}, $: {i}"
type Color = enum
red, green, blue
printEnumMembers Color
this is discussed in https://nim-lang.org/docs/strformat.html#limitations
the workaround is
import std/[strformat,strutils]
import std/[enumutils,sugar]
template printEnumMembers(E: typedesc[enum]) =
for i in E.items:
# it works
#echo "[$1]: $2 -> ord: $3, $$: $4" % [$(i.symbolRank), $(i.symbolName), $(i.ord), $i]
# it failed with undeclared identifie 'i'
let i{.inject.}=i
echo fmt"{i.symbolRank}: {i.symbolName} -> ord: {i.ord}, $: {i}"
type Color = enum
red, green, blue
printEnumMembers Color