def ready.loop

bend-kit-postgres@0.3.0.0 · postgres.bend:210

import bend-kit-postgres@0.3.0.0/postgres.bend as Postgres
import Base
import bend-kit-postgres@0.3.0.0/codec.bend as Codec

210# BackendKeyData, then ReadyForQuery.
211def ready.loop(fuel: Nat, r: Result<&1, &1, Failure, Conn & Codec.Back>) -> IO(Result<&1, &1, Failure, Conn>):
212  match fuel:
213    case 0n:
214      match r:
215        case Fail{e}:
216          IO.pure(Result<&1, &1, Failure, Conn>, Fail{e})
217        case Done{(c, m)}:
218          abort(Conn, c, Malformed{})
219    case 1n+f:
220      match r:
221        case Fail{e}:
222          IO.pure(Result<&1, &1, Failure, Conn>, Fail{e})
223        case Done{(c, m)}:
224          match m:
225            case Codec.ReadyForQuery{+status}:
226              IO.pure(Result<&1, &1, Failure, Conn>, Done{set.status(c, status)})
227            case Codec.BackendKeyData{pid, key}:
228              do IO<Result<&1, &1, Failure, Conn>>:
229                m2 : Result<&1, &1, Failure, Conn & Codec.Back> <- read(c)
230                ready.loop(f, m2)
231            case Codec.ErrorResponse{fs}:
232              reject(Conn, c, fs)
233            case _:
234              abort(Conn, c, Malformed{})

Uses (14)

Used by (1)