def retry.go

bend-kit-http@0.38.2.0 · http.bend:4580

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

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

Uses (19)

Used by (1)