storm_config/lib.rs
1//! A crate with helper utilities for managing shared configuration in Storm workspaces.
2//!
3//! This crate provides a set of tools for working with configuration files and
4//! environment variables in a consistent way. It supports multiple file formats,
5//! including JSON, YAML, TOML, and XML, and allows for easy merging and overriding
6//! of configuration values from different sources.
7//!
8//! # Features
9//! - The `WorkspaceConfig` struct representing the universal workspace configuration definition.
10//! - Support for multiple configuration file formats (JSON, YAML, TOML, XML).
11//! - Environment variable overrides.
12//! - Hierarchical configuration with support for nested structures.
13//! - Type-safe access to configuration values.
14//! - Custom configuration sources via the `Source` trait.
15//!
16//! # Example
17//! ```rust
18//! use storm_config::{Config, File, FileFormat, FileSourceFile, Format};
19//!
20//! // Create a new configuration instance
21//! let mut config = Config::default();
22//!
23//! // Merge a JSON configuration file
24//! let file = File::new("config.json", FileFormat::Json);
25//! config.merge(file).unwrap();
26//!
27//! // Access a configuration value
28//! let db_host: String = config.get("database.host").unwrap();
29//! println!("Database host: {}", db_host);
30//! ```
31//! For more information, please refer to the [documentation](https://docs.rs/storm-config).
32#![allow(unknown_lints)]
33// #![warn(missing_docs)]
34
35pub mod builder;
36mod config;
37mod de;
38mod env;
39mod errors;
40mod file;
41mod format;
42mod map;
43mod path;
44mod ser;
45mod source;
46mod value;
47
48// Re-export
49#[cfg(feature = "convert-case")]
50pub use convert_case::Case;
51
52#[allow(deprecated)]
53pub use crate::builder::AsyncConfigBuilder;
54pub use crate::builder::ConfigBuilder;
55pub use crate::config::Config;
56pub use crate::env::Environment;
57pub use crate::errors::ConfigError;
58pub use crate::file::source::FileSource;
59pub use crate::file::{File, FileFormat, FileSourceFile, FileSourceString, FileStoredFormat};
60pub use crate::format::Format;
61pub use crate::map::Map;
62#[cfg(feature = "async")]
63pub use crate::source::AsyncSource;
64pub use crate::source::Source;
65pub use crate::value::{Value, ValueKind};
66
67pub mod types;
68pub mod workspace_config;
69
70#[cfg(test)]
71mod tests {
72 #[test]
73 fn it_works() {
74 let result = 2 + 2;
75 assert_eq!(result, 4);
76 }
77}