distributed_config/lib.rs
1//! # Distributed Config
2//!
3//! `distributed-config` is a robust configuration management library for Rust applications
4//! running in distributed environments. It provides a unified interface for loading,
5//! accessing, and synchronizing configuration across multiple nodes with support for
6//! dynamic updates, validation, and various backend stores.
7//!
8//! ## Features
9//!
10//! - **Hierarchical Configuration**: Organize configuration in a tree structure
11//! - **Multiple Sources**: Load from files, environment variables, and remote sources
12//! - **Dynamic Updates**: Real-time configuration changes with notifications
13//! - **Schema Validation**: Strong typing and validation support
14//! - **Distributed Sync**: Synchronize configuration across multiple nodes
15//! - **Feature Flags**: Built-in feature flag management
16//! - **Versioning**: Configuration history and rollback support
17//!
18//! ## Quick Start
19//!
20//! ```rust,no_run
21//! use distributed_config::{ConfigManager, sources::FileSource};
22//! use serde::{Deserialize, Serialize};
23//!
24//! #[derive(Debug, Deserialize, Serialize)]
25//! struct AppConfig {
26//! host: String,
27//! port: u16,
28//! debug: bool,
29//! }
30//!
31//! #[tokio::main]
32//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
33//! let mut config = ConfigManager::new();
34//!
35//! // Add a file source
36//! let file_source = FileSource::new().add_file("config.yaml", None);
37//! config.add_source(file_source, 10);
38//!
39//! // Initialize and load configuration
40//! config.initialize().await?;
41//!
42//! // Access typed configuration
43//! let app_config = config.get::<AppConfig>("app").await?;
44//! println!("Server running on {}:{}", app_config.host, app_config.port);
45//!
46//! Ok(())
47//! }
48//! ```
49
50pub mod error;
51pub mod manager;
52pub mod sources;
53pub mod validation;
54pub mod value;
55pub mod watcher;
56
57// Future: Optional backends module for Redis, etcd support
58// #[cfg(feature = "redis-backend")]
59// pub mod backends;
60
61// Re-export main types for convenient access
62pub use error::{ConfigError, Result};
63pub use manager::ConfigManager;
64pub use sources::{ConfigSource, EnvSource, FileSource};
65pub use validation::SchemaValidator;
66pub use value::ConfigValue;
67pub use watcher::{ConfigChange, ConfigWatcher};
68
69#[cfg(feature = "redis-backend")]
70pub use sources::RemoteSource;
71
72/// Type alias for configuration change notifications
73pub type ChangeNotification = watcher::ConfigChange;
74
75/// Initialize tracing for the library
76pub fn init_tracing() {
77 tracing_subscriber::fmt()
78 .with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
79 .init();
80}