gaato/http/retry does not have a README file
test {
let backoff : @retry.Backoff = {
base_ms: 500,
max_ms: 30000,
jitter: Proportional(lo=800, hi=1200),
}
assert_eq(backoff.delay_ms(2, 0.5), 2000)
assert_eq(backoff.delay_ms(0, 0.0), 400)
}pub(all) struct RetryAfter {
source : RetryAfterSource
cap : RetryAfterCap
zero_means_backoff : Bool
} derive(Eq, Debug)pub(all) struct RetryRule {
max_retries : Int
statuses : Array[StatusRule]
sent_failures : Methods
unsent_failures : Bool
override_header : String?
retry_after : RetryAfter
backoff : Backoff
} derive(Eq, Debug)test {
let rule : @retry.RetryRule = {
..@retry.RetryRule::never(),
max_retries: 2,
statuses: [{ statuses: [Code(429), Range(500, 599)], methods: Idempotent, }],
backoff: { base_ms: 500, max_ms: 8000, jitter: NoJitter, },
}
let get = @http.Request::get("/items")
let busy = @retry.Response(status=503, headers=@http.Headers::new())
assert_eq(rule.decide(busy, get, attempt=1, random=0.0), Wait(1000))
assert_eq(rule.decide(busy, get, attempt=2, random=0.0), Stop(Exhausted))
}test {
let rule : @retry.RetryRule = {
..@retry.RetryRule::never(),
max_retries: 2,
statuses: [{ statuses: [Code(429)], methods: Any, }],
retry_after: {
source: Header,
cap: StopAbove(60000),
zero_means_backoff: false,
},
}
let post = @http.Request::post("/messages")
let headers = @http.Headers::from_array([("Retry-After", "3")])
let limited = @retry.Response(status=429, headers~)
assert_eq(rule.decide(limited, post, attempt=0, random=0.5), Wait(3000))
assert_eq(
rule.decide(limited, post, attempt=0, random=0.5, remaining_ms=2000),
Stop(Budget(3000)),
)
}test {
let rule : @retry.StatusRule = {
statuses: [Code(429), Range(500, 599)],
methods: Any,
}
assert_eq(rule.statuses.length(), 2)
}Install
Download zipSans-IO HTTP vocabulary for MoonBit SDKs: request/response types, a Transport trait, Retry-After and Link parsing, a multipart writer, an incremental SSE parser, an RFC 6265 cookie jar and a scripted fake transport. No dependencies; runs on every backend.