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