#config-file #file-format #file-extension #format-file #configuration #deserialize #serialization

cfgfifo

基于文件扩展名序列化和反序列化常见的配置文件格式

2个不稳定版本

0.2.0 2023年12月22日
0.1.0 2023年10月30日

#1680 in 编码


用于 labelmaker

MIT 许可证

63KB
891

Project Status: Active – The project has reached a stable, usable state and is being actively developed. CI Status codecov.io Minimum Supported Rust Version MIT License

GitHub | crates.io | 文档 | 问题 | 变更日志

cfgfifo 是一个Rust库,用于序列化和反序列化各种常见的配置文件格式(JSONJSON5RONTOML,和 YAML),包括根据文件扩展名自动检测文件格式。对于想要支持多种配置文件格式但又不想编写大量样板代码的应用程序作者来说,它很有用。cfgfifo 已经为您编写了这些样板代码,所以让它为您(反)序列化文件吧!

示例

use serde::Deserialize;

#[derive(Clone, Debug, Deserialize, Eq, PartialEq)]
struct AppConfig {
    #[serde(default)]
    enable_foo: bool,
    #[serde(default)]
    bar_type: BarType,
    #[serde(default)]
    flavor: Option<String>,
}

#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq)]
enum BarType {
    #[default]
    Open,
    Closed,
    Clopen,
}

fn main() -> anyhow::Result<()> {
    let Some(cfgpath) = std::env::args().nth(1) else {
        anyhow::bail!("No configuration file specified");
    };
    // cfgfifo identifies the format used by the file `cfgpath` based on its
    // file extension and deserializes it appropriately:
    let cfg: AppConfig = cfgfifo::load(cfgpath)?;
    println!("You specified the following configuration:");
    println!("{cfg:#?}");
    Ok(())
}

依赖项

~3–4.5MB
~92K SLoC