func()

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
	}
}