scsys_config/
lib.rs

1/*
2    Appellation: scsys-config <library>
3    Contrib: @FL03
4*/
5//! A collection of common configuration primitives and utilities used throughout the
6//! [scsys-io](https://scsys.io) ecosystem.
7//!
8#![cfg_attr(not(feature = "std"), no_std)]
9#![crate_type = "lib"]
10#![doc(
11    html_logo_url = "https://raw.githubusercontent.com/scattered-systems/.github/main/assets/logo.png",
12    html_favicon_url = "https://raw.githubusercontent.com/scattered-systems/.github/main/assets/favicon.ico"
13)]
14
15#![cfg(feature = "std")]
16#[doc(no_inline)]
17#[cfg(feature = "config")]
18pub use config;
19
20#[macro_use]
21pub(crate) mod macros {
22    #[macro_use]
23    pub mod config;
24    #[macro_use]
25    pub mod seal;
26}
27
28#[doc(inline)]
29pub use self::{
30    consts::*, error::*, services::prelude::*, traits::prelude::*, types::prelude::*,
31    utils::prelude::*,
32};
33/// the `error` module defines the error-handling routines for the crate
34pub mod error;
35pub mod services;
36
37/// constants declared for the configuration module
38pub mod consts {
39    /// The default environment variable prefix used for configuration schemas.
40    pub const DEFAULT_ENV_PREFIX: &str = "APP";
41    /// The default environment variable separator used for configuration schemas.
42    pub const DEFAULT_ENV_SEPARATOR: &str = "_";
43    /// The standard artifacts directory name
44    pub const ARTIFACTS: &str = ".artifacts";
45    /// The standard cache directory name
46    pub const CACHE_DIR: &str = ".cache";
47    /// The standard configuration directory name
48    pub const CONFIG_DIR: &str = ".config";
49}
50
51/// this module is used to implement various traits supporting the configuration module
52pub mod traits {
53    #[doc(inline)]
54    pub use self::prelude::*;
55
56    pub mod configure;
57
58    pub(crate) mod prelude {
59        #[doc(inline)]
60        pub use super::configure::*;
61    }
62}
63/// various types used throughout the configuration module
64pub mod types {
65    #[doc(inline)]
66    pub use self::prelude::*;
67
68    pub mod environment;
69    pub mod log_level;
70    pub mod mode;
71    pub mod network_address;
72    pub mod scope;
73
74    pub(crate) mod prelude {
75        #[doc(inline)]
76        pub use super::environment::*;
77        #[doc(inline)]
78        pub use super::log_level::*;
79        #[doc(inline)]
80        pub use super::mode::*;
81        #[doc(inline)]
82        pub use super::network_address::*;
83        #[doc(inline)]
84        pub use super::scope::*;
85    }
86}
87
88pub mod utils {
89    #[doc(inline)]
90    pub use self::prelude::*;
91
92    pub mod fs;
93    pub mod vars;
94
95    pub(crate) mod prelude {
96        #[allow(unused_imports)]
97        #[doc(inline)]
98        pub use super::fs::*;
99        #[doc(inline)]
100        pub use super::vars::*;
101    }
102}
103
104pub mod prelude {
105    #[doc(no_inline)]
106    pub use crate::consts::*;
107    #[doc(no_inline)]
108    pub use crate::error::*;
109    #[doc(no_inline)]
110    pub use crate::services::prelude::*;
111    #[doc(no_inline)]
112    pub use crate::types::prelude::*;
113    #[doc(no_inline)]
114    pub use crate::utils::prelude::*;
115}