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}