def retry.go

bend-kit-http@0.38.5.0 · http.bend:4584

import bend-kit-http@0.38.5.0/http.bend as Http
import Base
import bend-kit-bytes@0.3.3.0/bytes.bend as Bytes

4584# left: retries still allowed. n: the retry to wait for next, 0 first.
4585def retry.go(left: Nat, +n: Nat, +idem: Bool, +method: String, +url: String,
4586    +headers: Map<&2, List<&2, String>>,
4587    t: Bytes.Bytes & Result<&1, &1, Err, Res> & Maybe<&2, String>) -> IO(Result<&1, &1, Err, Res>):
4588  match left:
4589    case 0n:
4590      (body, r, m) = t
4591      IO.pure(Result<&1, &1, Err, Res>, r)
4592    case 1n+p:
4593      (body, r, m) = t
4594      match m:
4595        case None{}:
4596          IO.pure(Result<&1, &1, Err, Res>, r)
4597        case Some{v}:
4598          do IO<Result<&1, &1, Err, Res>>:
4599            retry.sleep(v, n)
4600            tried : Bytes.Bytes & Result<&1, &1, Err, Res> & Maybe<&2, String> <-
4601              retry.one(idem, method, url, headers, Bytes.slice(body, 0, 4294967295))
4602            retry.go(p, 1n+n, idem, method, url, headers, tried)

Uses (19)

Used by (1)