def claim.go
bend-kit-runner@0.13.0.1 · runner.bend:1216
import bend-kit-runner@0.13.0.1/runner.bend as Runner
import Base
import bend-kit-bytes@0.3.3.0/bytes.bend as Bytes
import bend-kit-scheduler@0.4.1.0/queue.bend as Q
import bend-kit-resources@0.1.0.0/resources.bend as Res
import bend-kit-retry@0.3.0.0/retry.bend as Retry
1216def claim.go(~A: Data, ~penc: A -> Bytes.Bytes, ~work: A -> IO(Retry.Outcome), +now: Nat, gate: Retry.Gate, +br: Retry.Breaker, b: Retry.Budget, +key: String,
1217 r: Runner<A>, +id: Nat, d: Nat, +x: A, g: Res.Grant, next: Runner<A> -> IO(Claimed(A))) -> IO(Claimed(A)):
1218 match gate:
1219 case Retry.GateGo{}:
1220 Runner{j, s, p, c, +ib, fs} = r
1221 do IO<Claimed(A)>:
1222 u : Chan(Msg<A>) <- IO.fork.go(Msg<A>, IO.bind(Retry.Outcome, Msg<A>, work(x), o => claim.tag(A, id, o)), ib)
1223 next(Runner{j, s, p, c, ib, Con{Flight{Q.Ticket{id, d, x}, g, b, key}, fs}})
1224 case Retry.GateNo{why}:
1225 do IO<Claimed(A)>:
1226 y : Ran(A) <- commit(~A, ~penc, r, held(A, why, br, id, now))
1227 claim.held(A, y, g, next)