func EncodeAttributeValue()

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


func EncodeAttributeValue(value *dynamodb.AttributeValue, writer *Writer) error {
	if value == nil {
		return awserr.New(request.InvalidParameterErrCode, "invalid attribute value: nil", nil)
	}

	var err error
	switch {
	case value.S != nil:
		err = writer.WriteString(*value.S)
	case value.N != nil:
		err = writeStringNumber(*value.N, writer)
	case value.B != nil:
		err = writer.WriteBytes(value.B)
	case value.SS != nil:
		if err = writer.writeType(Tag, tagStringSet); err != nil {
			return err
		}
		if err = writer.WriteArrayHeader(len(value.SS)); err != nil {
			return err
		}
		for _, sp := range value.SS {
			if err := writer.WriteString(*sp); err != nil {
				return err
			}
		}
	case value.NS != nil:
		if err = writer.writeType(Tag, tagNumberSet); err != nil {
			return err
		}
		if err = writer.WriteArrayHeader(len(value.NS)); err != nil {
			return err
		}
		for _, sp := range value.NS {
			if err := writeStringNumber(*sp, writer); err != nil {
				return err
			}
		}
	case value.BS != nil:
		if err = writer.writeType(Tag, tagBinarySet); err != nil {
			return err
		}
		if err = writer.WriteArrayHeader(len(value.BS)); err != nil {
			return err
		}
		for _, bp := range value.BS {
			if err := writer.WriteBytes(bp); err != nil {
				return err
			}
		}
	case value.L != nil:
		if err = writer.WriteArrayHeader(len(value.L)); err != nil {
			return err
		}
		for _, v := range value.L {
			if err := EncodeAttributeValue(v, writer); err != nil {
				return err
			}
		}
	case value.M != nil:
		if err = writer.WriteMapHeader(len(value.M)); err != nil {
			return err
		}
		for k, v := range value.M {
			if err := writer.WriteString(k); err != nil {
				return err
			}
			if err = EncodeAttributeValue(v, writer); err != nil {
				return err
			}
		}
	case value.BOOL != nil:
		err = writer.WriteBoolean(*value.BOOL)
	case value.NULL != nil:
		if !(*value.NULL) {
			return awserr.New(request.InvalidParameterErrCode, "invalid null attribute value", nil) // DaxJavaClient suppress this error
		}
		err = writer.WriteNull()
	}
	return err
}