mutateDataWithTtl

inline suspend fun <T : Any> SyncDocument.mutateDataWithTtl(ttl: <Error class: unknown class>, crossinline mutator: suspend (currentData: T) -> T?)

Serializes the value returned by Mutator function into an equivalent JsonObject using a serializer retrieved from reified type parameter and uses the JsonObject to mutate value of the SyncDocument

The Mutator function could be invoked more than once in case of data collision, i.e. if data on backend is modified while the mutate operation is executing. It guarantees that Mutator generates new value based on latest document data.

Type T must be annotated with @Serializable.

Possible use case is to implement distributed counter:

@Serializable
data class Counter(val value: Long = 0) {
operator fun plus(x: Long) = Counter(value + x)
}

document.mutateData<Counter> { counter -> counter + 1 }

Parameters

ttl

Time to live from now or Duration.INFINITE to indicate no expiry.

mutator

Mutator which will be applied to document data.

This function will be provided with the
previous data contents and should return new desired contents or null to abort
mutate operation. This function is invoked on a background thread.

Once this method finished the [data] property contains updated document data.

Throws

SerializationException

If the SyncDocument.data is not a valid JSON input for the type T.

If the value returned by the Mutator cannot be represented as a valid instance of type T.

TwilioException

When error occurred while mutating the document.