| Crates.io | cfgfifo |
| lib.rs | cfgfifo |
| version | 0.5.0 |
| created_at | 2023-10-30 14:43:57.542136+00 |
| updated_at | 2025-08-29 15:19:28.81716+00 |
| description | (De)serialize common configuration file formats based on file extension |
| homepage | |
| repository | https://github.com/jwodder/cfgfifo |
| max_upload_size | |
| id | 1018549 |
| size | 105,160 |
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!
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(())
}