func EncodeAttributeValue()

in dax/internal/cbor/attrval.go [36:124]


func EncodeAttributeValue(value types.AttributeValue, writer *Writer) error {
	if value == nil {
		return &smithy.SerializationError{Err: errors.New("invalid attribute value: nil")}
	}

	var err error
	switch v := value.(type) {
	case *types.AttributeValueMemberS:
		err = writer.WriteString(v.Value)
	case *types.AttributeValueMemberN:
		err = writeStringNumber(v.Value, writer)
	case *types.AttributeValueMemberB:
		err = writer.WriteBytes(v.Value)
	case *types.AttributeValueMemberSS:
		if len(v.Value) == 0 {
			return &smithy.SerializationError{Err: errors.New("invalid string set: nil or empty")}
		}
		if err = writer.writeType(Tag, tagStringSet); err != nil {
			return err
		}
		if err = writer.WriteArrayHeader(len(v.Value)); err != nil {
			return err
		}
		for _, sp := range v.Value {
			if err := writer.WriteString(sp); err != nil {
				return err
			}
		}
	case *types.AttributeValueMemberNS:
		if len(v.Value) == 0 {
			return &smithy.SerializationError{Err: errors.New("invalid number set: nil or empty")}
		}
		if err = writer.writeType(Tag, tagNumberSet); err != nil {
			return err
		}
		if err = writer.WriteArrayHeader(len(v.Value)); err != nil {
			return err
		}
		for _, sp := range v.Value {
			if err := writeStringNumber(sp, writer); err != nil {
				return err
			}
		}
	case *types.AttributeValueMemberBS:
		if len(v.Value) == 0 {
			return &smithy.SerializationError{Err: errors.New("invalid binary set: nil or empty")}
		}
		if err = writer.writeType(Tag, tagBinarySet); err != nil {
			return err
		}
		if err = writer.WriteArrayHeader(len(v.Value)); err != nil {
			return err
		}
		for _, bp := range v.Value {
			if err := writer.WriteBytes(bp); err != nil {
				return err
			}
		}
	case *types.AttributeValueMemberL:
		if err = writer.WriteArrayHeader(len(v.Value)); err != nil {
			return err
		}
		for _, v := range v.Value {
			if err := EncodeAttributeValue(v, writer); err != nil {
				return err
			}
		}
	case *types.AttributeValueMemberM:
		if err = writer.WriteMapHeader(len(v.Value)); err != nil {
			return err
		}
		for k, v := range v.Value {
			if err := writer.WriteString(k); err != nil {
				return err
			}
			if err = EncodeAttributeValue(v, writer); err != nil {
				return err
			}
		}
	case *types.AttributeValueMemberBOOL:
		err = writer.WriteBoolean(v.Value)
	case *types.AttributeValueMemberNULL:
		if !v.Value {
			return &smithy.SerializationError{Err: errors.New("invalid null attribute value")}
		}
		err = writer.WriteNull()
	}
	return err
}