in dax/internal/client/request.go [858:964]
func encodeTransactGetItemsInput(
ctx context.Context,
input *dynamodb.TransactGetItemsInput,
keySchema *lru.Lru, writer *cbor.Writer,
extractedKeys []map[string]types.AttributeValue,
) error {
if input == nil {
return smithy.NewErrParamRequired("input cannot be nil")
}
var err error
if err = ValidateOpTransactGetItemsInput(input); err != nil {
return err
}
if err = encodeServiceAndMethod(transactGetItems_1866287579_1_Id, writer); err != nil {
return err
}
var tableNamesBuf, keysBuf, projectionExpressionsBuf bytes.Buffer
tableNamesWriter := cbor.NewWriter(&tableNamesBuf)
keysWriter := cbor.NewWriter(&keysBuf)
projectionExpressionsWriter := cbor.NewWriter(&projectionExpressionsBuf)
len := len(input.TransactItems)
if err = tableNamesWriter.WriteArrayHeader(len); err != nil {
return err
}
if err = keysWriter.WriteArrayHeader(len); err != nil {
return err
}
if err = projectionExpressionsWriter.WriteArrayHeader(len); err != nil {
return err
}
defer func() {
tableNamesWriter.Close()
keysWriter.Close()
projectionExpressionsWriter.Close()
}()
for i, tgi := range input.TransactItems {
var tableName *string
var key map[string]types.AttributeValue
var projectionExpression *string
var expressionAttributeNames map[string]string
get := tgi.Get
tableName = get.TableName
key = get.Key
expressionAttributeNames = get.ExpressionAttributeNames
projectionExpression = get.ProjectionExpression
extractedKeys[i] = key
if err := tableNamesWriter.WriteBytes([]byte(*tableName)); err != nil {
return err
}
keydef, err := getKeySchema(ctx, keySchema, *tableName)
if err != nil {
return err
}
if err := cbor.EncodeItemKey(key, keydef, keysWriter); err != nil {
return err
}
encoded, err := parseExpressions(nil, nil, projectionExpression, expressionAttributeNames, nil)
if err != nil {
return err
}
if parsedProjectionExpr := encoded[parser.ProjectionExpr]; parsedProjectionExpr != nil {
if err := projectionExpressionsWriter.WriteBytes(parsedProjectionExpr); err != nil {
return err
}
} else {
if err := projectionExpressionsWriter.WriteNull(); err != nil {
return err
}
}
}
if err := tableNamesWriter.Flush(); err != nil {
return err
}
if err := writer.Write(tableNamesBuf.Bytes()); err != nil {
return err
}
if err := keysWriter.Flush(); err != nil {
return err
}
if err := writer.Write(keysBuf.Bytes()); err != nil {
return err
}
if err := projectionExpressionsWriter.Flush(); err != nil {
return err
}
if err := writer.Write(projectionExpressionsBuf.Bytes()); err != nil {
return err
}
return encodeItemOperationOptionalParams(
types.ReturnValueNone,
input.ReturnConsumedCapacity,
types.ReturnItemCollectionMetricsNone,
nil, nil, nil, nil, nil, nil, writer)
}