func encodeScanQueryOptionalParams()

in dax/internal/client/request.go [1006:1128]


func encodeScanQueryOptionalParams(
	ctx context.Context,
	index *string,
	selection types.Select,
	returnConsumedCapacity types.ReturnConsumedCapacity,
	consistentRead *bool,
	encodedExpressions map[int][]byte, segment, totalSegment, limit *int32, forward *bool,
	startKey map[string]types.AttributeValue, keySchema *lru.Lru, table string, writer *cbor.Writer) error {

	var err error
	if err = writer.WriteMapStreamHeader(); err != nil {
		return err
	}
	if index != nil {
		if err = writer.WriteInt(requestParamIndexName); err != nil {
			return err
		}
		if err = writer.WriteBytes([]byte(*index)); err != nil {
			return err
		}
	}
	if selection != types.SelectAllAttributes {
		if err = writer.WriteInt(requestParamSelect); err != nil {
			return err
		}
		if err = writer.WriteInt(translateSelect(selection)); err != nil {
			return err
		}
	}
	if returnConsumedCapacity != types.ReturnConsumedCapacityNone {
		if err = writer.WriteInt(requestParamReturnConsumedCapacity); err != nil {
			return err
		}
		if err = writer.WriteInt(translateReturnConsumedCapacity(returnConsumedCapacity)); err != nil {
			return err
		}
	}
	if consistentRead != nil {
		if err = writer.WriteInt(requestParamConsistentRead); err != nil {
			return err
		}
		cr := 0
		if *consistentRead {
			cr = 1
		}
		if err = writer.WriteInt(cr); err != nil {
			return err
		}
	}

	if len(startKey) != 0 {
		if err = writer.WriteInt(requestParamExclusiveStartKey); err != nil {
			return err
		}
		if index == nil {
			tableKeys, err := getKeySchema(ctx, keySchema, table)
			if err != nil {
				return nil
			}
			if err = cbor.EncodeItemKey(startKey, tableKeys, writer); err != nil {
				return err
			}
		} else {
			if err = encodeCompoundKey(startKey, writer); err != nil {
				return err
			}
		}
	}
	if segment != nil {
		if err = writer.WriteInt(requestParamSegment); err != nil {
			return err
		}
		if err = writer.WriteInt64(int64(*segment)); err != nil {
			return err
		}
	}
	if totalSegment != nil {
		if err = writer.WriteInt(requestParamTotalSegments); err != nil {
			return err
		}
		if err = writer.WriteInt64(int64(*totalSegment)); err != nil {
			return err
		}
	}
	if limit != nil {
		if err = writer.WriteInt(requestParamLimit); err != nil {
			return err
		}
		if err = writer.WriteInt64(int64(*limit)); err != nil {
			return err
		}
	}
	if forward != nil {
		if err = writer.WriteInt(requestParamScanIndexForward); err != nil {
			return err
		}
		if err = writer.WriteInt(translateScanIndexForward(forward)); err != nil {
			return err
		}
	}

	if len(encodedExpressions) > 0 {
		for k, v := range encodedExpressions {
			var e int
			switch k {
			case parser.ProjectionExpr:
				e = requestParamProjectionExpression
			case parser.FilterExpr:
				e = requestParamFilterExpression
			default:
				continue
			}
			if err = writer.WriteInt(e); err != nil {
				return err
			}
			if err = writer.WriteBytes(v); err != nil {
				return err
			}
		}
	}

	return writer.WriteStreamBreak()
}