Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-resilience

Resilience pipelines for Pudu: retry, circuit breaker, timeout, fallback, hedging, rate limiting, and chaos injection

0.1.0Apache-2.01

InstallClose

QuickStart.pudu

Pudu35 lines1.3 KB

GitHub ↗
1/** @Examples.QuickStart.Program — retry, timeout, and fallback in one pipeline */2module QuickStart34import Std.Io as Io5import Std.Sync as Sync6import PuduLangResilience.Context as Context7import PuduLangResilience.Fallback as Fallback8import PuduLangResilience.Pipeline as Pipeline9import PuduLangResilience as Resilience10import PuduLangResilience.Retry as Retry11import PuduLangResilience.Timeout as Timeout1213/// Runs a flaky lookup through a pipeline and prints what it answered.14fn main() -> Int {15  let built = Pipeline.build([16      Fallback.strategy(Fallback.withValue("cached price")),17      Retry.strategy(Retry.Options{..Retry.defaults(), maxRetryAttempts: 3, delay: 50, backoff: Retry.Exponential, useJitter: true}),18      Timeout.strategy(Timeout.after(500))19    ])20  let pipeline = match built {21    case Ok(found) => found22    case Err(invalid) => {23      let _said = Io.writeErrorLine(Pipeline.explain(&invalid))24      return 125    }26  }27  let calls = Sync.counter(0)28  let price = Pipeline.run(&pipeline, fn(_context: Context.Context) -> Result[Str, Str] {29      let made = match Sync.increment(&calls, 1) { case Ok(n) => n case Err(_) => 0 }30      if made < 3 { Err("connection reset") } else { Ok("42.00") }31    })32  let _shown = Io.writeLine("price: " + Resilience.summarize(&price))33  if price == Ok("42.00") { 0 } else { 1 }34}35