[go: up one dir, main page]

figment 0.10.1

A configuration library so con-free, it's unreal.
Documentation
use serde::{Deserialize, Serialize};
use figment::{Figment, providers::{Format, Toml, Serialized, Env}};

#[derive(Debug, Deserialize, Serialize)]
pub struct Test {
    service: Option<Foo>
}

impl Default for Test {
    fn default() -> Self {
        Test {
            service: None
        }
    }
}

#[derive(PartialEq, Debug, Deserialize, Serialize)]
pub enum Foo {
    Mega,
    Supa
}

#[test]
fn test_enum_de() {
    let figment = || Figment::new()
        .merge(Serialized::defaults(Test::default()))
        .merge(Toml::file("Test.toml"))
        .merge(Env::prefixed("TEST_"));

    figment::Jail::expect_with(|jail| {
        jail.create_file("Test.toml", "service = \"Mega\"")?;

        let test: Test = figment().extract()?;
        assert_eq!(test.service, Some(Foo::Mega));

        jail.set_env("TEST_SERVICE", "Supa");

        let test: Test = figment().extract()?;
        assert_eq!(test.service, Some(Foo::Supa));

        Ok(())
    })
}