soph_core/config/
mod.rs

1use serde::Deserialize;
2
3#[derive(Debug, Deserialize)]
4pub struct App {
5    #[serde(default = "default_name")]
6    pub name: String,
7    #[serde(default = "default_version")]
8    pub version: String,
9    #[serde(default)]
10    pub environment: Environment,
11    #[serde(default = "default_debug")]
12    pub debug: bool,
13}
14
15fn default_name() -> String {
16    std::env::var("CARGO_PKG_NAME").unwrap_or("soph".to_owned())
17}
18
19fn default_version() -> String {
20    std::env::var("CARGO_PKG_VERSION").unwrap_or(env!("CARGO_PKG_VERSION").to_owned())
21}
22
23fn default_debug() -> bool {
24    true
25}
26
27#[derive(Clone, Debug, Default, Deserialize)]
28pub enum Environment {
29    #[serde(rename = "development")]
30    #[default]
31    Development,
32    #[serde(rename = "production")]
33    Production,
34    #[serde(rename = "testing")]
35    Testing,
36}
37
38impl std::fmt::Display for Environment {
39    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
40        match self {
41            Environment::Development => "development".fmt(f),
42            Environment::Production => "production".fmt(f),
43            Environment::Testing => "testing".fmt(f),
44        }
45    }
46}