func encodeItemOperationOptionalParamsWithToken()

in dax/internal/client/request.go [1130:1214]


func encodeItemOperationOptionalParamsWithToken(
	returnValues types.ReturnValue,
	returnConsumedCapacity types.ReturnConsumedCapacity,
	returnItemCollectionMetrics types.ReturnItemCollectionMetrics,
	consistentRead *bool,
	projectionExp, conditionalExpr, updateExpr *string,
	exprAttrNames map[string]string,
	exprAttrValues map[string]types.AttributeValue, clientRequestToken *string, writer *cbor.Writer) error {
	if err := writer.WriteMapStreamHeader(); err != nil {
		return err
	}

	if consistentRead != nil {
		if err := writer.WriteInt(requestParamConsistentRead); err != nil {
			return err
		}
		if err := writer.WriteBoolean(*consistentRead); err != nil {
			return err
		}
	}

	if dv := translateReturnValues(returnValues); dv != returnValueNone {
		if err := writer.WriteInt(requestParamReturnValues); err != nil {
			return err
		}
		if err := writer.WriteInt(dv); err != nil {
			return err
		}
	}

	if dv := translateReturnConsumedCapacity(returnConsumedCapacity); dv != returnConsumedCapacityNone {
		if err := writer.WriteInt(requestParamReturnConsumedCapacity); err != nil {
			return err
		}
		if err := writer.WriteInt(dv); err != nil {
			return err
		}
	}

	if dv := translateReturnItemCollectionMetrics(returnItemCollectionMetrics); dv != returnItemCollectionMetricsNone {
		if err := writer.WriteInt(requestParamReturnItemCollectionMetrics); err != nil {
			return err
		}
		if err := writer.WriteInt(dv); err != nil {
			return err
		}
	}

	if conditionalExpr != nil || updateExpr != nil || projectionExp != nil {
		encoded, err := parseExpressions(conditionalExpr, updateExpr, projectionExp, exprAttrNames, exprAttrValues)
		if err != nil {
			return err
		}
		for k := range encoded {
			var e int
			switch k {
			case parser.ConditionExpr:
				e = requestParamConditionExpression
			case parser.UpdateExpr:
				e = requestParamUpdateExpression
			case parser.ProjectionExpr:
				e = requestParamProjectionExpression
			default:
				continue
			}
			if err := writer.WriteInt(e); err != nil {
				return err
			}
			if err := writer.WriteBytes(encoded[k]); err != nil {
				return err
			}
		}
	}

	if clientRequestToken != nil {
		if err := writer.WriteInt(requestParamRequestItemsClientRequestToken); err != nil {
			return err
		}
		if err := writer.WriteString(*clientRequestToken); err != nil {
			return err
		}
	}

	return writer.WriteStreamBreak()
}