func encodeBatchWriteItemInput()

in dax/internal/client/request.go [402:466]


func encodeBatchWriteItemInput(ctx aws.Context, input *dynamodb.BatchWriteItemInput, keySchema *lru.Lru, attrNamesListToId *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 err = encodeServiceAndMethod(batchWriteItem_116217951_1_Id, writer); err != nil {
		return err
	}
	if err = writer.WriteMapHeader(len(input.RequestItems)); err != nil {
		return err
	}
	totalRequests := 0
	for table, wrs := range input.RequestItems {
		keys, err := getKeySchema(ctx, keySchema, table)
		if err != nil {
			return err
		}

		l := len(wrs)
		if l == 0 {
			return awserr.New(request.InvalidParameterErrCode, fmt.Sprintf("1 validation error detected: Value '{%s=%d}' at 'requestItems' failed to satisfy constraint:"+
				" Map value must satisfy constraint: [Member must have length less than or equal to 25, Member must have length greater than or equal to 1", table, l), nil)
		}
		totalRequests = totalRequests + l
		if totalRequests > maxWriteBatchSize {
			return awserr.New(request.InvalidParameterErrCode, fmt.Sprintf("1 validation error detected: Value '{%s=%d}' at 'requestItems' failed to satisfy constraint:"+
				" Map value must satisfy constraint: [Member must have length less than or equal to 25, Member must have length greater than or equal to 1", table, totalRequests), nil)
		}

		if err = writer.WriteString(table); err != nil {
			return err
		}
		if err = writer.WriteArrayHeader(2 * l); err != nil {
			return err
		}

		if hasDuplicatesWriteRequests(wrs, keys) {
			return awserr.New(request.InvalidParameterErrCode, "Provided list of item keys contains duplicates", nil)
		}
		for _, wr := range wrs {
			if pr := wr.PutRequest; pr != nil {
				attrs := pr.Item
				if err = cbor.EncodeItemKey(attrs, keys, writer); err != nil {
					return err
				}
				if err = encodeNonKeyAttributes(ctx, attrs, keys, attrNamesListToId, writer); err != nil {
					return err
				}
			} else if dr := wr.DeleteRequest; dr != nil {
				if err = cbor.EncodeItemKey(dr.Key, keys, writer); err != nil {
					return err
				}
				if err = writer.WriteNull(); err != nil {
					return err
				}
			} else {
				return awserr.New(request.ParamRequiredErrCode, "Both PutRequest and DeleteRequest cannot be empty", nil)
			}
		}
	}
	return encodeItemOperationOptionalParams(nil, input.ReturnConsumedCapacity, input.ReturnItemCollectionMetrics, nil, nil, nil, nil, nil, nil, writer)
}