4个版本 (破坏性更新)
0.3.0 | 2024年6月18日 |
---|---|
0.2.0 | 2024年6月12日 |
0.1.0 | 2024年6月6日 |
0.0.0 | 2024年6月2日 |
#894 in 配置
56KB
759 行
conrig
conrig
是一个专注于提供“一次配置,到处使用”的通用配置系统的配置文件库。
conrig
的核心思想是通过创建一个全局配置项(并且是const
,无需担心懒初始化)。虽然这可能会使每次使用相关功能时成本略高,但在常规应用场景下,这些操作的成本完全由节省的开发工作量补偿!
指南
提供工具的最重要入口是ConfigPathMetadata
结构。
此结构允许您配置配置文件的搜索、保存方式、配置文件的命名格式以及配置文件使用的默认语言。
以下是一个示例
use conrig::{ConfigOption, ConfigPathMetadata, FileFormat, ProjectPath, ConfigType};
const TEST_APP_CONFIG: ConfigPathMetadata = ConfigPathMetadata {
project_path: ProjectPath {
qualifier: "org",
organization: "my-organization",
application: "conrig-test",
},
config_name: &["conrig"],
default_format: FileFormat::Toml, // use TOML as the default format.
extra_folders: &[], // external folders to include.
// external files to include.
// Note that this behaves differently from `config_name`.
extra_files: &[],
config_option: ConfigOption {
allow_dot_prefix: true, // allow parsing files like `.conrig.toml`.
config_sys_type: ConfigType::Config,
sys_override_local: false, // make local configuration the top priority.
}
};
然后,定义您的配置数据结构
use serde_derive::{Serialize, Deserialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
struct Config {
name: String,
id: u32,
}
impl Default for Config {
fn default() -> Self {
Self {
name: "conrig".to_owned(),
id: 0,
}
}
}
现在您可以开始享受conrig
的自动配置设置
// read a config
let config: Config = TEST_APP_CONFIG
.search_config_file()? // search existing config files.
.fallback_default()? // set fallback path to your current directory.
.read_or_default()?; // read the config, or insert the default one.
// or use the shortcut
let mut config: Config = TEST_APP_CONFIG.read_or_default()?;
assert_eq!(
config,
Config {
name: "conrig".to_owned(),
id: 0,
}
);
// then modify and save it
config.id = 42;
TEST_APP_CONFIG.write(&config)?;
assert_eq!(
TEST_APP_CONFIG.read::<Config>()?,
Config {
name: "conrig".to_owned(),
id: 42,
}
);
有关更多信息,请参阅docs.rs上的文档。
许可协议
此crate受MIT许可或Apache-v2.0许可的许可。
依赖关系
~0.5–11MB
~78K SLoC