replace method

Future<MutationResult> replace(
  1. String key,
  2. Object? value, [
  3. ReplaceOptions? options
])

Replaces the value of an existing document.

Failing if the document does not exist.

Implementation

Future<MutationResult> replace(
  String key,
  Object? value, [
  ReplaceOptions? options,
]) async {
  options ??= const ReplaceOptions();
  final id = _documentId(key);
  final expiry = options.expiry ?? Duration.zero;
  final cas = options.cas ?? InternalCas.zero;
  final timeout = _mutationTimeout(options);
  final encodedData = _encodeDocument(options, value);

  final response = options.usesLegacyDurability
      ? await _connection.replaceWithLegacyDurability(
          ReplaceWithLegacyDurability(
            id: id,
            value: encodedData.bytes,
            flags: encodedData.flags,
            expiry: expiry.inSeconds,
            preserveExpiry: options.preserveExpiry,
            cas: cas,
            timeout: timeout,
            persistTo: options.durabilityPersistTo,
            replicateTo: options.durabilityReplicateTo,
            partition: 0,
            opaque: 0,
          ),
        )
      : await _connection.replace(
          ReplaceRequest(
            id: id,
            value: encodedData.bytes,
            flags: encodedData.flags,
            expiry: expiry.inSeconds,
            preserveExpiry: options.preserveExpiry,
            cas: cas,
            timeout: timeout,
            durabilityLevel: options.durabilityLevel,
            partition: 0,
            opaque: 0,
          ),
        );

  return MutationResult(
    cas: response.cas,
    token: response.token,
  );
}