Crates.io | quantum_config |
lib.rs | quantum_config |
version | 0.2.1 |
created_at | 2025-08-16 14:09:54.451119+00 |
updated_at | 2025-08-19 11:20:55.562453+00 |
description | A powerful and flexible configuration management library for Rust applications. |
homepage | |
repository | https://github.com/Kirky-X/quantum_config |
max_upload_size | |
id | 1798491 |
size | 256,022 |
一个强大且灵活的 Rust 配置管理库,让配置加载变得简单而优雅。
Quantum Config 专注于:
Quantum Config 不包含:
examples/ 目录说明:示例项目展示如何在不同场景(Web 服务、数据库应用、异步程序)中使用 Quantum Config 进行配置管理,但这些应用本身超出了 Quantum Config 库的核心功能。
allow_external_subcommands
选项无破坏性变更 - 完全向后兼容 v0.2.0
#[derive(Config)]
和 #[config(...)]
/#[quantum_config_opt(...)]
属性简化配置定义[dependencies]
quantum_config = "0.2.1"
serde = { version = "1.0", features = ["derive"] }
use quantum_config::Config; // derive 宏从 quantum_config 暴露
use serde::{Deserialize, Serialize};
#[derive(Config, Serialize, Deserialize, Debug, Default)]
#[config(env_prefix = "MYAPP_")]
struct AppConfig {
#[quantum_config_opt(description = "服务器主机地址", default = "\"localhost\".to_string()")]
host: String,
#[quantum_config_opt(description = "服务器端口", default = "8080")]
port: u16,
#[quantum_config_opt(description = "启用调试模式", name_clap_long = "debug")]
debug_mode: Option<bool>,
#[quantum_config_opt(flatten)]
database: DatabaseConfig,
}
#[derive(Serialize, Deserialize, Debug, Default)]
struct DatabaseConfig {
#[quantum_config_opt(description = "数据库 URL")]
url: Option<String>,
#[quantum_config_opt(description = "最大连接数", default = "10")]
max_connections: u32,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 加载配置
let config = AppConfig::load()?;
println!("服务器将在 {}:{} 启动", config.host, config.port);
println!("调试模式: {:?}", config.debug_mode);
Ok(())
}
config.toml
# 服务器主机地址
host = "0.0.0.0"
# 服务器端口
port = 3000
[database]
# 数据库URL
url = "postgresql://localhost/myapp"
# 最大连接数
max_connections = 20
export MYAPP_HOST="0.0.0.0"
export MYAPP_PORT="3000"
export MYAPP_DATABASE_URL="postgresql://localhost/myapp"
./myapp --host 0.0.0.0 --port 3000 --debug --database-url postgresql://localhost/myapp
Quantum Config 按以下优先级加载和合并配置(后者覆盖前者):
/etc/{app_name}/config.{toml,json,ini}
~/.config/{app_name}/config.{toml,json,ini}
--config
参数指定{ENV_PREFIX}_
前缀#[quantum_config_opt(...)]
属性description = "描述"
- 字段描述,用于生成帮助信息和配置模板default = "表达式"
- 默认值表达式name_config = "名称"
- 配置文件中的键名name_env = "名称"
- 环境变量名name_clap_long = "名称"
- 长命令行选项名name_clap_short = 'c'
- 短命令行选项flatten
- 展平嵌套结构体skip
- 跳过此字段clap(...)
- 传递给 clap 的额外属性#[config(...)]
结构体属性env_prefix = "前缀"
- 环境变量前缀,如 "MYAPP_"
启用 async
特性后,可以使用异步加载:
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = AppConfig::load_async().await?;
// ...
Ok(())
}
// 生成 TOML 配置模板文件到磁盘
AppConfig::generate_template()?;
QuantumConfig 提供详细的错误信息:
use quantum_config::QuantumConfigError;
match AppConfig::load() {
Ok(config) => println!("配置加载成功: {:?}", config),
Err(QuantumConfigError::FileParse { format_name, path, source_error }) => {
eprintln!("配置文件解析错误: {} 文件 {:?} - {}", format_name, path, source_error);
}
Err(QuantumConfigError::Io { source, path }) => {
eprintln!("IO 错误: {:?} - {}", path, source);
}
Err(QuantumConfigError::Figment(figment_error)) => {
eprintln!("配置提取错误: {}", figment_error);
}
Err(e) => eprintln!("其他错误: {}", e),
}
use quantum_config::{ConfigFilePath, ConfigFileType};
let custom_paths = vec![
ConfigFilePath {
path: "/custom/path/config.toml".into(),
file_type: ConfigFileType::Toml,
is_required: false,
}
];
let config = AppConfig::load_with_custom_paths(&custom_paths)?;
查看 examples/
目录获取更多完整示例:
basic/
- 基本配置加载web_server/
- Web 服务器配置database/
- 数据库连接配置nested/
- 复杂嵌套配置async/
- 异步配置加载path_conversion/
- 跨平台路径转换custom_paths/
- 自定义配置路径欢迎贡献!请查看 CONTRIBUTING.md 了解详细信息。
git clone https://github.com/Kirky-X/quantum_config.git
cd quantum_config
cargo test
cargo doc --open
本项目采用 Apache-2.0 许可证。详情请参阅 LICENSE 文件。