IdempotentStore.kt
package io.github.lishangbu.avalon.idempotent.store
import java.time.Duration
/**
* Persists idempotent execution state.
*/
interface IdempotentStore {
fun acquire(
key: String,
token: String,
processingTtl: Duration,
): AcquireResult
fun complete(
key: String,
token: String,
cachedValue: String?,
ttl: Duration,
): Boolean
fun release(
key: String,
token: String,
): Boolean
fun renew(
key: String,
token: String,
processingTtl: Duration,
): Boolean
sealed interface AcquireResult {
data object Acquired : AcquireResult
data object Processing : AcquireResult
data class Completed(
val cachedValue: String?,
) : AcquireResult
}
}