func encodeBatchGetItemInput()

in dax/internal/client/request.go [508:587]


func encodeBatchGetItemInput(ctx context.Context, input *dynamodb.BatchGetItemInput, keySchema *lru.Lru, writer *cbor.Writer) error {
	if input == nil {
		return smithy.NewErrParamRequired("input cannot be nil")
	}
	var err error
	if err = ValidateOpBatchGetItemInput(input); 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 &smithy.GenericAPIError{
				Code:    ErrCodeInvalidParameter,
				Message: fmt.Sprintf("Provided list of item keys contains duplicates"),
				Fault:   smithy.FaultClient,
			}
		}
		for _, keys := range kaas.Keys {
			if err = cbor.EncodeItemKey(keys, tableKeys, writer); err != nil {
				return err
			}
		}
	}

	return encodeItemOperationOptionalParams(
		types.ReturnValueNone,
		input.ReturnConsumedCapacity,
		types.ReturnItemCollectionMetricsNone,
		nil, nil, nil, nil, nil, nil, writer)
}