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

Configuration.pudu

Pudu28 lines1.1 KB

GitHub ↗
1/** @Environment.Configuration.Module — variables layered over application configuration */2module PuduLangEnvironment.Configuration34import Std.App.Config as Config5import Std.Map as Map6import PuduLangEnvironment.Domain.Keys as Keys7import PuduLangEnvironment.Variables as Variables89/** @Environment.Configuration.Overlaying — configuration with loaded variables over it */10export trait Overlaying {11  fn withVariables(self: &Self, variables: &Variables.Variables) -> Self12}1314impl Overlaying for Config.Config {15  /// The same configuration with each setting it declares replaced by the variable its key names,16  /// `server.port` by `SERVER_PORT`, when that is set and not empty, recorded as coming from the17  /// environment. Variables no setting declares are left out.18  fn withVariables(self: &Self, variables: &Variables.Variables) -> Self {19    var settings = self.settings20    for key in Map.keys(&self.settings) {21      if let Some(held) = Variables.find(variables, Keys.fromSetting(key)) {22        settings = settings.insert(key, Config.Setting{value: held, source: Config.Environment})23      }24    }25    Config.Config{..*self, settings: settings}26  }27}28