webserver_base/base_settings/
base_settings.rs1use std::env;
2
3use super::Environment;
4
5#[derive(Clone)]
6pub struct BaseSettings {
7 pub host: String,
8 pub port: u16,
9 pub environment: Environment,
10
11 pub project_name: String,
12 pub project_description: String,
13 pub project_keywords: String,
14 pub home_url: String,
15
16 pub analytics_domain: String,
17 pub sentry_dsn: String,
18}
19
20impl Default for BaseSettings {
21 fn default() -> Self {
25 let environment = env::var("ENVIRONMENT").map_or(Environment::Development, |s| {
27 Environment::try_from(s.clone()).unwrap_or_else(|_| {
28 panic!("failed to parse `ENVIRONMENT` environment variable: {s}")
29 })
30 });
31
32 let host = env::var("HOST").unwrap_or_else(|_| {
34 if environment == Environment::Development {
35 "127.0.0.1".to_string()
36 } else {
37 "0.0.0.0".to_string()
38 }
39 });
40 let port = env::var("PORT").map_or(8080, |s| {
41 s.parse::<u16>()
42 .expect("failed to parse `PORT` environment variable")
43 });
44
45 let Ok(project_name) = env::var("PROJECT_NAME") else {
47 panic!("environment variable `PROJECT_NAME` is not set");
48 };
49 let Ok(project_description) = env::var("PROJECT_DESCRIPTION") else {
50 panic!("environment variable `PROJECT_DESCRIPTION` is not set");
51 };
52 let Ok(project_keywords) = env::var("PROJECT_KEYWORDS") else {
53 panic!("environment variable `PROJECT_KEYWORDS` is not set");
54 };
55 let Ok(home_url) = env::var("HOME_URL") else {
56 panic!("environment variable `HOME_URL` is not set");
57 };
58
59 let Ok(analytics_domain) = env::var("ANALYTICS_DOMAIN") else {
61 panic!("environment variable `ANALYTICS_DOMAIN` is not set");
62 };
63
64 let Ok(sentry_dsn) = env::var("SENTRY_DSN") else {
66 panic!("environment variable `SENTRY_DSN` is not set");
67 };
68
69 Self {
71 host,
72 port,
73 environment,
74
75 project_name,
76 project_description,
77 project_keywords,
78 home_url,
79
80 analytics_domain,
81 sentry_dsn,
82 }
83 }
84}