in dax/internal/client/request.go [430:506]
func encodeBatchWriteItemInput(ctx context.Context, input *dynamodb.BatchWriteItemInput, keySchema *lru.Lru, attrNamesListToId *lru.Lru, writer *cbor.Writer) error {
if input == nil {
return smithy.NewErrParamRequired("input cannot be nil")
}
var err error
if err = ValidateOpBatchWriteItemInput(input); err != nil {
return err
}
if err = encodeServiceAndMethod(batchWriteItem_116217951_1_Id, writer); err != nil {
return err
}
if err = writer.WriteMapHeader(len(input.RequestItems)); err != nil {
return err
}
totalRequests := 0
for table, wrs := range input.RequestItems {
keys, err := getKeySchema(ctx, keySchema, table)
if err != nil {
return err
}
l := len(wrs)
if l == 0 {
return &smithy.GenericAPIError{
Code: ErrCodeInvalidParameter,
Message: fmt.Sprintf("1 validation error detected: Value '{%s=%d}' at 'requestItems' failed to satisfy constraint:"+
" Map value must satisfy constraint: [Member must have length less than or equal to 25, Member must have length greater than or equal to 1", table, l),
Fault: smithy.FaultClient,
}
}
totalRequests = totalRequests + l
if totalRequests > maxWriteBatchSize {
return &smithy.GenericAPIError{
Code: ErrCodeInvalidParameter,
Message: fmt.Sprintf("1 validation error detected: Value '{%s=%d}' at 'requestItems' failed to satisfy constraint:"+
" Map value must satisfy constraint: [Member must have length less than or equal to 25, Member must have length greater than or equal to 1", table, totalRequests),
Fault: smithy.FaultClient,
}
}
if err = writer.WriteString(table); err != nil {
return err
}
if err = writer.WriteArrayHeader(2 * l); err != nil {
return err
}
if hasDuplicatesWriteRequests(wrs, keys) {
return errors.New("Provided list of item keys contains duplicates")
}
for _, wr := range wrs {
if pr := wr.PutRequest; pr != nil {
attrs := pr.Item
if err = cbor.EncodeItemKey(attrs, keys, writer); err != nil {
return err
}
if err = encodeNonKeyAttributes(ctx, attrs, keys, attrNamesListToId, writer); err != nil {
return err
}
} else if dr := wr.DeleteRequest; dr != nil {
if err = cbor.EncodeItemKey(dr.Key, keys, writer); err != nil {
return err
}
if err = writer.WriteNull(); err != nil {
return err
}
} else {
return errors.New("Both PutRequest and DeleteRequest cannot be empty")
}
}
}
return encodeItemOperationOptionalParams(
types.ReturnValueNone,
input.ReturnConsumedCapacity,
input.ReturnItemCollectionMetrics,
nil, nil, nil, nil, nil, nil, writer)
}