Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-environment

Environment files for Pudu: load .env variables safely with layered files, discovery, expansion, typed reads, and secrets kept out of every message

0.1.0Apache-2.01

InstallClose

QuickStart.pudu

Pudu40 lines1.4 KB

GitHub ↗
1/** @Examples.QuickStart.Program — load .env and read typed values */2module QuickStart34import Std.Fs as Fs5import Std.Io as Io6import Std.Path as Path7import PuduLangEnvironment as Environment8import PuduLangEnvironment.Loader as Loader9import PuduLangEnvironment.Options as Options10import PuduLangEnvironment.Variables as Variables1112/// Writes a project's `.env`, loads it, and reads its values by type.13fn run(project: Str) -> Result[Int, Fs.FsError] {14  let _written = Io.write(Path.join(project, ".env"), "# service\nPORT=8080\nDEBUG=true\nDATABASE_URL=\"postgres://app:s3cret@db/app\"\n")15  match Options.defaults().inDirectory(project).withStrict().load() {16    case Ok(variables) => {17      let port = Variables.int(&variables, "PORT")18      let debug = Variables.bool(&variables, "DEBUG")19      let _described = Io.writeLine(Variables.describe(&variables))20      let _missing = match Variables.require(&variables, &["DATABASE_URL", "API_KEY"]) {21        case Ok(_) => Io.writeLine("every key is set")22        case Err(problem) => Io.writeLine(Environment.describe(&problem))23      }24      Ok(if port == Ok(8080) && debug == Ok(true) { 0 } else { 1 })25    }26    case Err(problem) => {27      let _said = Io.writeErrorLine(Environment.describe(&problem))28      Ok(1)29    }30  }31}3233/// Runs the example in a temporary project and answers 0 when every value reads as written.34fn main() -> Int {35  match Fs.withTemporaryDirectory("quick-start-", run) {36    case Ok(status) => status37    case Err(_) => 138  }39}40