Bob Glamm
09/06/2019, 6:52 PMB
type of use
in bracketCase
through the ExitCase.Completed
part of release
, is there?simon.vergauwen
09/06/2019, 7:16 PMBob Glamm
09/06/2019, 8:29 PMfun doWork(
workitem: Workitem,
worker: (Id) -> Kind<F, String>
) = fx.monadThrow {
!claim(workitem.id)
}.bracketCase({ _, exitCase -> when(exitCase) {
is ExitCase.Error -> releaseError(workitem.id, exitCase.e)
is ExitCase.Canceled -> releaseError(workitem.id, IllegalStateException("Workitem ${workitem.id} cancelled"))
is ExitCase.Completed -> releaseComplete(workitem.id, /* need String from worker */)
}}) { withLockedItem(workitem.itemId, worker) }
withLockedItem
is another bracket
that claims/releases another resource with use: worker
releaseError
and releaseComplete
work to modify identical fields in the same database record obtained by !claim(workitem.id)