in dax/internal/cbor/item.go [39:155]
func GetEncodedItemKey(item map[string]*dynamodb.AttributeValue, keydef []dynamodb.AttributeDefinition) ([]byte, error) {
if item == nil {
return nil, awserr.New(request.InvalidParameterErrCode, "item cannot be nil", nil)
}
hk := keydef[0]
hkval, ok := item[*hk.AttributeName]
if !ok {
return nil, ErrMissingKey
}
var buf bytes.Buffer
w := NewWriter(&buf)
defer w.Close()
if len(keydef) == 1 {
switch *hk.AttributeType {
case dynamodb.ScalarAttributeTypeS:
sp := hkval.S
if sp == nil {
return nil, ErrMissingKey
}
if err := w.Write([]byte(*sp)); err != nil {
return nil, err
}
case dynamodb.ScalarAttributeTypeN:
if hkval.N == nil {
return nil, ErrMissingKey
}
if err := EncodeAttributeValue(hkval, w); err != nil {
return nil, err
}
case dynamodb.ScalarAttributeTypeB:
b := hkval.B
if b == nil {
return nil, ErrMissingKey
}
if err := w.Write(b); err != nil {
return nil, err
}
default:
return nil, awserr.New(request.InvalidParameterErrCode, fmt.Sprintf("Unsupported KeyType encountered in Hash Attribute: "+*hk.AttributeType), nil)
}
} else {
switch *hk.AttributeType {
case dynamodb.ScalarAttributeTypeS:
sp := hkval.S
if sp == nil {
return nil, ErrMissingKey
}
if err := w.WriteString(*sp); err != nil {
return nil, err
}
case dynamodb.ScalarAttributeTypeN:
if hkval.N == nil {
return nil, ErrMissingKey
}
if err := EncodeAttributeValue(hkval, w); err != nil {
return nil, err
}
case dynamodb.ScalarAttributeTypeB:
b := hkval.B
if b == nil {
return nil, ErrMissingKey
}
if err := w.WriteBytes(b); err != nil {
return nil, err
}
default:
return nil, awserr.New(request.InvalidParameterErrCode, fmt.Sprintf("Unsupported KeyType encountered in Hash Attribute: "+*hk.AttributeType), nil)
}
rk := keydef[1]
rkval, ok := item[*rk.AttributeName]
if !ok {
return nil, ErrMissingKey
}
switch *rk.AttributeType {
case dynamodb.ScalarAttributeTypeS:
sp := rkval.S
if sp == nil {
return nil, ErrMissingKey
}
if err := w.Write([]byte(*sp)); err != nil {
return nil, err
}
case dynamodb.ScalarAttributeTypeN:
n := rkval.N
if n == nil {
return nil, ErrMissingKey
}
d := new(Decimal)
d, ok := d.SetString(*n)
if !ok {
return nil, awserr.New(request.InvalidParameterErrCode, fmt.Sprintf("invalid number "+*n), nil)
}
if _, err := EncodeLexDecimal(d, w.bw); err != nil {
return nil, err
}
case dynamodb.ScalarAttributeTypeB:
b := rkval.B
if b == nil {
return nil, ErrMissingKey
}
if err := w.Write(b); err != nil {
return nil, err
}
default:
return nil, awserr.New(request.InvalidParameterErrCode, fmt.Sprintf("Unsupported KeyType encountered in Range Attribute: "+*rk.AttributeType), nil)
}
}
if err := w.Flush(); err != nil {
return nil, err
}
return buf.Bytes(), nil
}