
Registry.pudu
Pudu32 lines1.3 KB
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 Timeout121314fn main() -> Int {15 let registry: Registry.Registry[Int, Str] = Registry.create()16 let _payments = Registry.tryAddBuilder(®istry, "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(®istry, "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