func()

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
}