package gamemanager import ( "errors" "fmt" ) // EngineConfig contains settings information for driving the engine. type EngineConfig struct { RenderDescriptions bool StateTokenFormat SerializationFormat } // SerializationFormat determines which format StateTokens are serialized as. type SerializationFormat int const ( // JSON describes the json serilization format. JSON SerializationFormat = iota + 1 // Protobuf describes the protobuf serilization format. Protobuf ) // GetSerDeFormat translates format type strings to SerializationFormat. func GetSerDeFormat(format string) SerializationFormat { serializationFormats := map[string]SerializationFormat{ "json": JSON, "proto": Protobuf, } return serializationFormats[format] } // ErrInvalidSerializationFormat occurs when engine config specifies a unsupported format. var ErrInvalidSerializationFormat = errors.New("invalid serialization format") // NewEngineConfig news up an EngineConfig based on passed in values. func NewEngineConfig(renderDesc bool, tokenFormat string) (EngineConfig, error) { serdeFormat := GetSerDeFormat(tokenFormat) if serdeFormat == 0 { return EngineConfig{}, fmt.Errorf("%w: %s", ErrInvalidSerializationFormat, tokenFormat) } return EngineConfig{ RenderDescriptions: renderDesc, StateTokenFormat: serdeFormat, }, nil }