func encodeTransactGetItemsInput()

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)
}