Crates.io | fast_config |
lib.rs | fast_config |
version | 1.2.1 |
source | src |
created_at | 2023-01-19 03:13:06.919407 |
updated_at | 2024-10-24 17:00:54.782138 |
description | A small and simple multi-format crate to handle config files |
homepage | |
repository | https://github.com/FlooferLand/fast_config |
max_upload_size | |
id | 762230 |
size | 62,218 |
fast_config
---
A small, safe, lightweight, and easy-to-use Rust crate to read and write to config files.
Currently only supports: JSON & JSON5, TOML, and YAML.
But more Serde-supported formats (such as RON) are planned to be added later.
fast_config
was made to be a faster to set up, more light-weight, statically typed alternative to config.
It also manages to have its own benefits compared to some other config-reading crates as there is full support for writing/saving config files, and it also provides you with some options regarding styling your config files
key0
to key9000
in an object)2 and 3 are going to be addressed with future updates, however.
This crate is now stable, I however haven't battle-tested this in any humongous projects, so while there will NOT be any panics or crashes, some weird things might happen at scale.
Documentation might be a little weird or incomplete at the current moment, too.
Feel free to contribute any fixes by opening up an issue if you find anything that isn't working as expected!
use fast_config::Config;
use serde::{Serialize, Deserialize};
// Creating a config struct to store our data
#[derive(Serialize, Deserialize)]
pub struct MyData {
pub student_debt: i32
}
fn main() {
// Initializing a logging system (needed to show some warnings/errors)
env_logger::init();
// Creating our data (default values)
let data = MyData {
student_debt: 20
};
// Creating a new config struct with our data struct
let mut config = Config::new("./config/myconfig.json5", data).unwrap();
// Read/writing to the data
println!("I am ${} in debt", config.data.student_debt);
config.data.student_debt = i32::MAX;
println!("Oh no, i am now ${} in debt!!", config.data.student_debt);
// Saving it back to the disk
config.save().unwrap();
}
cargo add fast_config
serde
as it is required!json5
, toml
, and yaml
are supported Serialize
and Deserialize
use
the crate's Config
type for convenience use fast_config::Config;
let my_config = Config::new("./path/to/my_config_file", your_data).unwrap();
to create and store your config file(s)!
Alternatively you could also use Config::from_settings
to style some things and manually set the format!View the examples directory for more advanced examples.
The code is currently very messy, but I'm too busy with other projects to deal with it. I've improved a lot as a Rust developer since the creation of this project and a lot of the ways you interface with it could be better.
Some things I want to do for the rewrite are listed in a comment at the top of lib.rs Some other ideas I'll have to experiment with:
#[derive(FastConfig)]
onto any struct to give it the save
/load
functions.
This makes the annoying my_config.data.my_setting
into simply my_config.my_setting
A conversion guide for the rewrite will be available, as I'll have to convert over my projects as well to use the rewritten fast_config
.
The rewrite should be smaller, safer, and the source code will most importantly be way more readable.