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
}