Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-log

Structured event logging for Pudu: message templates, enrichment, filtering, formatting, and sinks

0.1.0Apache-2.01

InstallClose

Reader.pudu

Pudu36 lines1.2 KB

GitHub ↗
1/** @Log.Formatting.Reader.Module — events read back from compact JSON */2module PuduLangLog.Formatting.Reader34import Std.Io as Io5import PuduLangLog.Domain.Clef as Clef6import PuduLangLog as Log78/// The event one line of compact JSON describes, as `Compact.compact` or `Compact.rendered` wrote9/// it, or why the line cannot be read.10export fn readLine(text: Str) -> Result[Log.Event, Str] { Clef.line(text) }1112/// Every event of newline-delimited compact JSON, skipping blank lines; the first unreadable line13/// fails the whole text and is named by its number, counting from one.14export fn readAll(text: Str) -> Result[Array[Log.Event], Str] {15  var events: Array[Log.Event] = []16  var number = 017  for written in text.split("\n") {18    number = number + 119    if !written.trim().isEmpty() {20      match Clef.line(written) {21        case Ok(event) => { events = events.push(event) }22        case Err(problem) => { return Err("Line " + show(number) + ": " + problem) }23      }24    }25  }26  Ok(events)27}2829/// Every event of a file of newline-delimited compact JSON.30export fn readFile(path: Str) -> Result[Array[Log.Event], Str] {31  match Io.read(path) {32    case Ok(text) => readAll(text)33    case Err(problem) => Err("Cannot read `" + path + "`: " + show(problem))34  }35}36