gonfig 0.1.12

A unified configuration management library for Rust that seamlessly integrates environment variables, config files, and CLI arguments
Documentation
use crate::error::Result;
use std::any::Any;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Source {
    Environment,
    ConfigFile,
    Cli,
    Default,
}

impl Source {
    pub fn priority(&self) -> u8 {
        match self {
            Source::Default => 0,
            Source::ConfigFile => 1,
            Source::Environment => 2,
            Source::Cli => 3,
        }
    }
}

pub trait ConfigSource: Any + Send + Sync {
    fn source_type(&self) -> Source;

    fn collect(&self) -> Result<serde_json::Value>;

    fn has_value(&self, key: &str) -> bool;

    fn get_value(&self, key: &str) -> Option<serde_json::Value>;

    fn as_any(&self) -> &dyn Any;
}

pub trait FromSource: Sized {
    fn from_source<S: ConfigSource>(source: &S) -> Result<Self>;
}