mod error;
mod config;
mod handle;
pub use error::ConfigError;
pub use config::Config;
pub use handle::ConfigHandle;
#[macro_export]
macro_rules! config {
($file:expr) => {
$crate::Config::load_required($file, "/", None)
};
($file:expr, sep: $sep:expr) => {
$crate::Config::load_required($file, $sep, None)
};
($file:expr, env: $env:expr) => {
$crate::Config::load_required($file, "/", Some($env))
};
($file:expr, merge: [$($req:expr),* $(,)?]) => {{
let _cfg = $crate::Config::load_required($file, "/", None);
$(
let _cfg = _cfg.and_then(|c| c.merge_required($req, None));
)*
_cfg
}};
( file: $file:expr $(, sep: $sep:expr)? $(, env: $env:expr)? $(, merge: [$($req:expr),* $(,)?])? $(, merge_optional: [$($opt:expr),* $(,)?])? $(,)? ) => {{
let _sep = config!(@sep $($sep)?);
let _env: Option<&str> = config!(@env $($env)?);
let _cfg = $crate::Config::load_required($file, _sep, _env);
$($(
let _cfg = _cfg.and_then(|c| c.merge_required($req, _env));
)*)?
$($(
let _cfg = _cfg.and_then(|c| c.merge_optional($opt, _env));
)*)?
_cfg
}};
(@sep) => { "/" };
(@sep $sep:expr) => { $sep };
(@env) => { None };
(@env $env:expr) => { Some($env) };
}