#config-file #default-config #configuration #exists #attempt #generate

configgen-rs

尝试制作一个基于配置的crate,如果文件系统上尚不存在,则生成默认配置文件

2 个版本

0.1.3 2023年8月12日
0.1.2 2023年7月23日
0.1.1 2023年7月22日
0.1.0 2023年7月22日

#1470编码

每月25次下载

自定义许可

17KB
237

configgen-rs

尝试制作一个小的crate,如果文件系统上尚不存在,则生成默认配置文件。有点像 config 这样的极简但互补的crate

设计

该crate公开了一些方法,允许安全地创建目录和配置文件。创建配置文件的方法接受一个实现 serde::Serializable 的对象,该对象将被序列化到创建的文件中。

数据格式

目前只处理几种格式

  • Json
  • Json5
  • Toml
  • Ron

如何使用

use config::Config;
use configgen_rs;

use serde::{Deserialize, Serialize};
use std::{path::PathBuf, str::FromStr};

#[derive(Serialize, Deserialize)]
struct DummyConfig {
    pub field1: i32,
}

fn main() {
    let written_config = DummyConfig { field1: 2 };
    let path = PathBuf::from_str("/tmp/test_config").unwrap();

    configgen_rs::initialization::initialize_config_file(
        &written_config,
        &path,
        configgen_rs::SerializationFormat::Toml,
    )
    .expect("Writing failed");

    // From here, testing that the config crate can read the written file.
    let f = config::File::new(path.to_str().unwrap(), config::FileFormat::Toml);
    let config = Config::builder()
        .add_source(config::File::from(f))
        .build()
        .unwrap();
    let read_config = config.try_deserialize::<DummyConfig>().unwrap();

    assert_eq!(read_config.field1, written_config.field1);
}

改进

请随时在GitHub上提出改进建议或报告错误!

依赖关系

~2.5–4MB
~79K SLoC