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
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{})