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}