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

cfgfifo

(De)serialize common configuration file formats based on file extension

2 unstable releases

0.2.0 Dec 22, 2023
0.1.0 Oct 30, 2023

#1363 in Encoding

Download history 1/week @ 2023-12-29 15/week @ 2024-02-02 10/week @ 2024-02-09 31/week @ 2024-02-16 26/week @ 2024-02-23 15/week @ 2024-03-01 16/week @ 2024-03-08 11/week @ 2024-03-15 9/week @ 2024-03-22 43/week @ 2024-03-29 23/week @ 2024-04-05 3/week @ 2024-04-12

78 downloads per month
Used in labelmaker

MIT license

63KB
891 lines

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 | Documentation | Issues | Changelog

cfgfifo is a Rust library for serializing & deserializing various common configuration file formats (JSON, JSON5, RON, TOML, and YAML), including autodetecting the format of a file based on its file extension. It's good for application authors who want to support multiple configuration file formats but don't want to write out a bunch of boilerplate. cfgfifo has already written that boilerplate for you, so let it (de)serialize your files!

Example

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(())
}

Dependencies

~3–4.5MB
~95K SLoC