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 配置

MIT/Apache

56KB
759

conrig

Build with Rust GitHub top language Crates.io Downloads (recent)

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