
QuickStart.pudu
Pudu35 lines1.3 KB
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 Timeout121314fn 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