Skip to main content

backbone_core/config/
server_config.rs

1//! Server configuration
2//!
3//! Defines HTTP server settings including host, port, and timeouts.
4
5use serde::{Deserialize, Serialize};
6use std::time::Duration;
7
8/// Server configuration
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct ServerConfig {
11    /// Server host address
12    #[serde(default = "default_host")]
13    pub host: String,
14    /// Server port
15    #[serde(default = "default_port")]
16    pub port: u16,
17    /// Number of worker threads
18    #[serde(default)]
19    pub workers: Option<usize>,
20    /// Graceful shutdown timeout in seconds
21    #[serde(default = "default_shutdown_timeout")]
22    pub graceful_shutdown_timeout: u64,
23    /// Keep-alive timeout in seconds
24    #[serde(default = "default_keep_alive")]
25    pub keep_alive: u64,
26    /// Read timeout in seconds
27    #[serde(default = "default_read_timeout")]
28    pub read_timeout: u64,
29    /// Write timeout in seconds
30    #[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    /// Get the socket address string
57    pub fn socket_addr(&self) -> String {
58        format!("{}:{}", self.host, self.port)
59    }
60
61    /// Get the server URL
62    pub fn url(&self) -> String {
63        format!("http://{}:{}", self.host, self.port)
64    }
65
66    /// Get graceful shutdown timeout as Duration
67    pub fn shutdown_timeout(&self) -> Duration {
68        Duration::from_secs(self.graceful_shutdown_timeout)
69    }
70
71    /// Get keep-alive timeout as Duration
72    pub fn keep_alive_timeout(&self) -> Duration {
73        Duration::from_secs(self.keep_alive)
74    }
75}