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

Registry.pudu

Pudu32 lines1.3 KB

GitHub ↗
1/** @Examples.Registry.Program — named pipelines shared across callers */2module Registry34import Std.Io as Io5import PuduLangResilience.Context as Context6import PuduLangResilience.Pipeline as Pipeline7import PuduLangResilience.Registry as Registry8import PuduLangResilience as Resilience9import PuduLangResilience.Retry as Retry10import PuduLangResilience.Strategy as Strategy11import PuduLangResilience.Timeout as Timeout1213/// Registers one builder per dependency and runs a call through the one it names.14fn main() -> Int {15  let registry: Registry.Registry[Int, Str] = Registry.create()16  let _payments = Registry.tryAddBuilder(&registry, "payments", fn(_context: Registry.BuilderContext) -> Array[Strategy.Strategy[Int, Str]] {17      [Retry.strategy(Retry.Options{..Retry.defaults(), delay: 10}), Timeout.strategy(Timeout.after(2000))]18    })19  match Registry.get(&registry, "payments") {20    case Ok(pipeline) => {21      let outcome = Pipeline.execute(&pipeline, fn(_context: Context.Context) -> Resilience.Outcome[Int, Str] { Ok(201) })22      let described = Pipeline.describe(&pipeline)23      let _shown = Io.writeLine("payments answered " + Resilience.summarize(&outcome) + " through " + described.strategies.map(|layer: Pipeline.Described| layer.kind).join(", "))24      025    }26    case Err(problem) => {27      let _said = Io.writeErrorLine(Registry.explain(&problem))28      129    }30  }31}32