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

Template.pudu

Pudu40 lines1.2 KB

GitHub ↗
1/** @Utils.Template.Module — fills numbered slots in message text */2module PuduLangResilience.Utils.Template34import Std.List as List5import Std.Text as Text67/// The template with each `<n>` replaced by the `n`th value, counting from 1, in one pass: text8/// taken from a value is never filled again. A slot without a value is kept as written.9export fn fill(template: Str, values: &Array[Str]) -> Str {10  var text = ""11  var rest = template12  loop {13    match Text.find(rest, "<") {14      case None => { return text + rest }15      case Some(open) => {16        let after = rest.drop(open + 1)17        let closing = Text.find(after, ">")18        let number = match closing {19          case Some(close) => Text.countOf(after.slice(0, close))20          case None => None21        }22        match (closing, number) {23          case (Some(close), Some(slot)) => {24            let value = match List.get(values, slot - 1) {25              case Some(found) => found26              case None => rest.slice(open, open + close + 2)27            }28            text = text + rest.slice(0, open) + value29            rest = after.drop(close + 1)30          }31          case _ => {32            text = text + rest.slice(0, open + 1)33            rest = after34          }35        }36      }37    }38  }39}40