def pool.take.go
bend-kit-http@0.38.2.0 · http.bend:3656
import bend-kit-http@0.38.2.0/http.bend as Http
import Base
3656
3657def pool.take.go(n: Nat, +key: String, pt: Pool & Took) -> IO(Pool & Maybe<&1, Conn>):
3658 match n pt:
3659 case _ Tuple{p, TookNone{}}:
3660 IO.pure(Pool & Maybe<&1, Conn>, (p, None{}))
3661 case _ Tuple{p, TookSeen{True{}, c}}:
3662 IO.pure(Pool & Maybe<&1, Conn>, (p, Some{c}))
3663 case 0n Tuple{p, TookRaw{c}}:
3664 do IO<Pool & Maybe<&1, Conn>>:
3665 conn.close(c)
3666 return (p, None{})
3667 case 0n Tuple{p, TookSeen{False{}, c}}:
3668 do IO<Pool & Maybe<&1, Conn>>:
3669 conn.close(c)
3670 return (p, None{})
3671 case 1n+k Tuple{p, TookRaw{c}}:
3672 do IO<Pool & Maybe<&1, Conn>>:
3673 t : Took <- conn.idle(c)
3674 pool.take.go(k, key, (p, t))
3675 case 1n+k Tuple{p, TookSeen{False{}, c}}:
3676 do IO<Pool & Maybe<&1, Conn>>:
3677 conn.close(c)
3678 pool.take.go(k, key, took.of(pool.take(p, key)))