backbone_core/config/
server_config.rs1use serde::{Deserialize, Serialize};
6use std::time::Duration;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct ServerConfig {
11 #[serde(default = "default_host")]
13 pub host: String,
14 #[serde(default = "default_port")]
16 pub port: u16,
17 #[serde(default)]
19 pub workers: Option<usize>,
20 #[serde(default = "default_shutdown_timeout")]
22 pub graceful_shutdown_timeout: u64,
23 #[serde(default = "default_keep_alive")]
25 pub keep_alive: u64,
26 #[serde(default = "default_read_timeout")]
28 pub read_timeout: u64,
29 #[serde(default = "default_write_timeout")]
31 pub write_timeout: u64,
32}
33
34fn default_host() -> String { "0.0.0.0".to_string() }
35fn default_port() -> u16 { 3000 }
36fn default_shutdown_timeout() -> u64 { 30 }
37fn default_keep_alive() -> u64 { 75 }
38fn default_read_timeout() -> u64 { 30 }
39fn default_write_timeout() -> u64 { 30 }
40
41impl Default for ServerConfig {
42 fn default() -> Self {
43 Self {
44 host: default_host(),
45 port: default_port(),
46 workers: Some(4),
47 graceful_shutdown_timeout: default_shutdown_timeout(),
48 keep_alive: default_keep_alive(),
49 read_timeout: default_read_timeout(),
50 write_timeout: default_write_timeout(),
51 }
52 }
53}
54
55impl ServerConfig {
56 pub fn socket_addr(&self) -> String {
58 format!("{}:{}", self.host, self.port)
59 }
60
61 pub fn url(&self) -> String {
63 format!("http://{}:{}", self.host, self.port)
64 }
65
66 pub fn shutdown_timeout(&self) -> Duration {
68 Duration::from_secs(self.graceful_shutdown_timeout)
69 }
70
71 pub fn keep_alive_timeout(&self) -> Duration {
73 Duration::from_secs(self.keep_alive)
74 }
75}