Title here
Summary here
Our enum type ServerState has an underlying int type.
The possible values for ServerState are defined as constants in an enum. In Nim, the enums automatically get successive integer values starting from 0.
By implementing the toString method, values of ServerState can be printed out or converted to strings.
type
ServerState = enum
StateIdle, StateConnected, StateError, StateRetrying
var stateName = initTable[ServerState, string](
{
StateIdle: "idle",
StateConnected: "connected",
StateError: "error",
StateRetrying: "retrying"
}
)
proc toString(ss: ServerState): string =
return stateName[ss]
proc transition(s: ServerState): ServerState =
case s
of StateIdle:
return StateConnected
of StateConnected, StateRetrying:
return StateIdle
of StateError:
return StateError
else:
raise newException(ValueError, "unknown state: " & $s)
proc main() =
let ns = transition(StateIdle)
echo toString(ns)
let ns2 = transition(ns)
echo toString(ns2)
main()To run the program, put the code in enums.nim and use nim to compile and execute it.
$ nim compile --run enums.nim
connected
idleThe transition procedure emulates a state transition for a server; it takes the existing state and returns a new state.