Sven Tennie
03/10/2020, 1:07 PMfun <A> runInTransaction(client: CoroutineClient, action: (ClientSession) -> IO<A>): IO<A> {
return IO.effect {
val session = client.startSession()
session.startTransaction()
session
}.bracketCase(
release = { clientSession, case ->
IO {
when (case) {
ExitCase.Completed -> clientSession.commitTransaction().awaitFirstOrNull()
else -> clientSession.abortTransaction().awaitFirstOrNull()
}
clientSession.close()
}
},
use = action
)
}
I’m trying to run an action in a transaction and act upon the result. So far, so fine. But I would like to indicate an error if the transaction failed.