in statefun-sdk-go/v3/pkg/statefun/types.go [185:258]
func (p PrimitiveType) Serialize(writer io.Writer, data interface{}) error {
switch p {
case BoolType:
switch data := data.(type) {
case bool:
wrapper := protocol.BooleanWrapper{Value: data}
return boolWrapperType.Serialize(writer, &wrapper)
case *bool:
wrapper := protocol.BooleanWrapper{Value: *data}
return boolWrapperType.Serialize(writer, &wrapper)
default:
return errors.New("data must be of type bool or *bool")
}
case Int32Type:
switch data := data.(type) {
case int32:
wrapper := protocol.IntWrapper{Value: data}
return int32WrapperType.Serialize(writer, &wrapper)
case *int32:
wrapper := protocol.IntWrapper{Value: *data}
return int32WrapperType.Serialize(writer, &wrapper)
default:
return errors.New("data must be of type int32 or *int32")
}
case Int64Type:
switch data := data.(type) {
case int64:
wrapper := protocol.LongWrapper{Value: data}
return int64WrapperType.Serialize(writer, &wrapper)
case *int64:
wrapper := protocol.LongWrapper{Value: *data}
return int64WrapperType.Serialize(writer, &wrapper)
default:
return errors.New("data must be of type int64 or *int64")
}
case Float32Type:
switch data := data.(type) {
case float32:
wrapper := protocol.FloatWrapper{Value: data}
return float32WrapperType.Serialize(writer, &wrapper)
case *float32:
wrapper := protocol.FloatWrapper{Value: *data}
return float32WrapperType.Serialize(writer, &wrapper)
default:
return errors.New("data must be of type float32 or *float32")
}
case Float64Type:
switch data := data.(type) {
case float64:
wrapper := protocol.DoubleWrapper{Value: data}
return float64WrapperType.Serialize(writer, &wrapper)
case *float64:
wrapper := protocol.DoubleWrapper{Value: *data}
return float64WrapperType.Serialize(writer, &wrapper)
default:
return errors.New("data must be of type float64 or *float64")
}
case StringType:
switch data := data.(type) {
case string:
wrapper := protocol.StringWrapper{Value: data}
return stringWrapperType.Serialize(writer, &wrapper)
case *string:
wrapper := protocol.StringWrapper{Value: *data}
return stringWrapperType.Serialize(writer, &wrapper)
default:
return errors.New("data must be of type string or *string")
}
default:
log.Fatalf("unknown primitive type %v", p)
// unreachable
return nil
}
}