spars_httpd/settings/
server.rs1use std::net::IpAddr;
5use std::net::Ipv4Addr;
6use std::net::SocketAddr;
7use std::path::PathBuf;
8use std::str::FromStr;
9
10pub struct ServerSettings {
11 pub addr: SocketAddr,
12 pub pid_file: Option<PathBuf>,
13 pub addr_file: Option<PathBuf>,
14}
15
16impl Default for ServerSettings {
17 fn default() -> Self {
18 Self {
19 addr: SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 3000),
20 pid_file: None,
21 addr_file: None,
22 }
23 }
24}
25
26type Result<T, E = super::SettingsFromEnvError> = std::result::Result<T, E>;
27
28impl ServerSettings {
29 pub fn from_env() -> Result<Self> {
30 let mut settings = Self::default();
31
32 if let Some(s) = super::env("ADDR")? {
33 settings
34 .addr
35 .set_ip(IpAddr::from_str(&s).map_err(super::SettingsFromEnvError::BadAddr)?);
36 }
37
38 if let Some(s) = super::env("PORT")? {
39 settings
40 .addr
41 .set_port(u16::from_str(&s).map_err(super::SettingsFromEnvError::BadPort)?);
42 }
43
44 if let Some(s) = super::env("PID_FILE")? {
45 settings.pid_file = Some(PathBuf::from(s));
46 }
47
48 if let Some(s) = super::env("ADDR_FILE")? {
49 settings.addr_file = Some(PathBuf::from(s));
50 }
51
52 Ok(settings)
53 }
54}