func encodeTransactGetItemsInput()

in dax/internal/client/request.go [805:906]


func encodeTransactGetItemsInput(ctx aws.Context, input *dynamodb.TransactGetItemsInput, keySchema *lru.Lru, writer *cbor.Writer, extractedKeys []map[string]*dynamodb.AttributeValue) error {
	if input == nil {
		return awserr.New(request.ParamRequiredErrCode, "input cannot be nil", nil)
	}
	var err error
	if err = input.Validate(); 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 {
		if tgi == nil {
			return awserr.New(request.ParamRequiredErrCode, "TransactGetItem cannot be nil", nil)
		}
		var tableName *string
		var key map[string]*dynamodb.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(nil, input.ReturnConsumedCapacity, nil, nil, nil, nil, nil, nil, nil, writer)
}