in dax/internal/client/request.go [468:539]
func encodeBatchGetItemInput(ctx aws.Context, input *dynamodb.BatchGetItemInput, keySchema *lru.Lru, writer *cbor.Writer) error {
if input == nil {
return awserr.New(request.ParamRequiredErrCode, fmt.Sprintf("input cannot be nil"), nil)
}
var err error
if err = input.Validate(); err != nil {
return err
}
if input, err = translateLegacyBatchGetItemInput(input); err != nil {
return err
}
if err = encodeServiceAndMethod(batchGetItem_N697851100_1_Id, writer); err != nil {
return err
}
if err = writer.WriteMapHeader(len(input.RequestItems)); err != nil {
return err
}
for table, kaas := range input.RequestItems {
if err = writer.WriteString(table); err != nil {
return err
}
if err = writer.WriteArrayHeader(3); err != nil {
return err
}
cr := false
if kaas.ConsistentRead != nil {
cr = *kaas.ConsistentRead
}
if err = writer.WriteBoolean(cr); err != nil {
return err
}
if kaas.ProjectionExpression != nil {
expressions := make(map[int]string)
expressions[parser.ProjectionExpr] = *kaas.ProjectionExpression
encoder := parser.NewExpressionEncoder(expressions, kaas.ExpressionAttributeNames, nil)
if _, err = encoder.Parse(); err != nil {
return err
}
var buf bytes.Buffer
if err = encoder.Write(parser.ProjectionExpr, &buf); err != nil {
return err
}
if err = writer.WriteBytes(buf.Bytes()); err != nil {
return err
}
} else {
if err = writer.WriteNull(); err != nil {
return err
}
}
tableKeys, err := getKeySchema(ctx, keySchema, table)
if err != nil {
return err
}
if err = writer.WriteArrayHeader(len(kaas.Keys)); err != nil {
return err
}
if hasDuplicateKeysAndAttributes(kaas, tableKeys) {
return awserr.New(request.InvalidParameterErrCode, "Provided list of item keys contains duplicates", nil)
}
for _, keys := range kaas.Keys {
if err = cbor.EncodeItemKey(keys, tableKeys, writer); err != nil {
return err
}
}
}
return encodeItemOperationOptionalParams(nil, input.ReturnConsumedCapacity, nil, nil, nil, nil, nil, nil, nil, writer)
}