hierconf_core/
lib.rs

1pub mod attrs;
2pub mod error;
3pub mod loader;
4
5pub use attrs::{Attr as HierConfAttr, extract_app_name};
6#[cfg(feature = "mangen")]
7pub use attrs::{extract_date, extract_synopsis, extract_type_doc, extract_type_name, is_hidden};
8pub use error::HierConfError;
9pub use loader::config_paths;
10
11use facet::Facet;
12
13/// Load configuration from standard Unix hierarchy paths.
14///
15/// Loads the first existing file from (in precedence order):
16/// 1. User-specific: `$XDG_CONFIG_HOME/{app_name}/config.toml` or `$HOME/.config/{app_name}/config.toml` (Linux/BSD), `$HOME/Library/Application Support/{app_name}/config.toml` (macOS) - requires `user-config` feature
17/// 2. System-wide: `/etc/{app_name}/config.toml`
18/// 3. Distribution: `$HIERCONF_DISTRIBUTION_PREFIX/{app_name}/config.toml` (if env var set at compile time)
19/// 4. Distribution: `/usr/share/etc/{app_name}/config.toml`
20///
21/// The `app_name` is extracted from the `#[facet(hierconf::app_name("..."))]` attribute.
22pub fn load_config<T>() -> Result<T, HierConfError>
23where
24    T: Facet<'static>,
25{
26    loader::load_config::<T>()
27}