realme 0.1.9

A flexible and extensible configuration management library for Rust, designed to simplify the process of loading and managing configuration settings from various sources.
Documentation

Realme

Build License: GPLv3 Latest Version codecov

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.

Features

  • Support for multiple configuration formats (TOML, JSON, YAML, JSON5, RON, INI), and you can easily add support for more formats
  • Loosely typed — Serialization and deserialization of configuration data, configuration values may be read in any supported type, as long as there exists a reasonable conversion
  • Custom parser support and flexible adaptor system for different data sources, for example, you can read configuration from a file, environment variables, command line flags, etc.
  • Live watching and re-reading of config files

Installation

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 andhot_reload feature:

realme = {version = "0.1.4", features = ["toml", "json", "hot_reload"]}

Usage

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.

License

This project is licensed under the GNU General Public License v3.0 (GPL-3.0). See the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Copyright

Copyright 2024 Jasper Zhang