
QuickStart.pudu
Pudu40 lines1.4 KB
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 Variables111213fn 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}323334fn main() -> Int {35 match Fs.withTemporaryDirectory("quick-start-", run) {36 case Ok(status) => status37 case Err(_) => 138 }39}40