Crates.io | realme_macros |
lib.rs | realme_macros |
version | 0.1.0 |
source | src |
created_at | 2024-11-11 10:03:32.578581 |
updated_at | 2024-11-11 10:03:32.578581 |
description | A flexible and extensible configuration management library for Rust, designed to simplify the process of loading and managing configuration settings from various sources. |
homepage | https://github.com/vainjoker/realme |
repository | https://github.com/vainjoker/realme |
max_upload_size | |
id | 1443630 |
size | 44,744 |
Realme is a flexible and extensible configuration management library for Rust. It simplifies the process of loading and managing configuration settings from various sources. The name "Realme" is a play on "Realm" and "me," emphasizing its role in managing your application's configuration realm.
Add this to your Cargo.toml
:
[dependencies]
realme = {version = "0.1.4", features = ["toml"]}
You can also enable other features, for example, to use hot reloading feature, you need to enable json
andwatch
feature:
realme = {version = "0.1.4", features = ["toml", "json", "watch"]}
Here's a simple example of how to use Realme:
use realme::{Adaptor, Realme, StringSource, TomlParser};
use serde::{Serialize, Deserialize};
#[derive(Debug, Serialize, Deserialize)]
struct Person {
name: String,
age: u32,
birthday: chrono::DateTime<chrono::Utc>,
}
const CONFIGURATION1: &str = r#"
name = "John"
age = 30
birthday = 1993-01-01T00:00:00Z
"#;
fn main() {
let realme = Realme::builder()
.load(Adaptor::new(StringSource::<TomlParser>::new(
CONFIGURATION1,
)))
.build()
.expect("Building configuration object");
let person: Person = realme.try_deserialize().unwrap();
println!("{:?}", person);
println!("{:?}", realme);
assert_eq!(person.name, TryInto::<String>::try_into(realme.get("name").unwrap()).unwrap());
assert_eq!(person.age, realme.get_as::<u32, _>("age").unwrap());
assert_eq!(person.birthday, realme.get_as::<chrono::DateTime<chrono::Utc>, _>("birthday").unwrap());
}
For more detailed examples, check the examples
directory.
For a real-world example, you can check the Rinkle project.
I am impressed by the following libraries:
And compared to them, Realme has the following features:
serde
, so you can convert to any type that implements serde::Serialize
and serde::Deserialize
traitParser
and Source
traitBut Realme has the following drawbacks:
This project is licensed under the GNU General Public License v3.0 (GPL-3.0). See the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.
Copyright 2024 Jasper Zhang