Our enumerated type ServerState has an underlying Int32 type.
By implementing the to_s method, values of ServerState can be printed out or converted to strings.
This can get cumbersome if there are many possible values. One might consider a different approach if there are many states.
If we have a value of type Int32, we cannot pass it to transition - the compiler will complain about type mismatch. This provides some degree of compile-time type safety for enums.
To run the program, compile the code and execute the compiled binary.