modbus_relay/config/
connection.rs

1use std::time::Duration;
2
3use serde::{Deserialize, Serialize};
4
5use super::BackoffConfig;
6
7/// Configuration for managing connections
8#[derive(Debug, Clone, Serialize, Deserialize)]
9#[serde(deny_unknown_fields)]
10pub struct Config {
11    /// Maximum number of concurrent connections
12    pub max_connections: u64,
13    /// Time after which an idle connection will be closed
14    #[serde(with = "humantime_serde")]
15    pub idle_timeout: Duration,
16    /// Time after which a connection with errors will be closed
17    #[serde(with = "humantime_serde")]
18    pub error_timeout: Duration,
19    /// Timeout for establishing a connection
20    #[serde(with = "humantime_serde")]
21    pub connect_timeout: Duration,
22    /// Limits for specific IP addresses
23    pub per_ip_limits: Option<u64>,
24    /// Parameters for backoff strategy
25    pub backoff: BackoffConfig,
26}
27
28impl Default for Config {
29    fn default() -> Self {
30        Self {
31            max_connections: 100,
32            idle_timeout: Duration::from_secs(60),
33            error_timeout: Duration::from_secs(300),
34            connect_timeout: Duration::from_secs(5),
35            per_ip_limits: Some(10),
36            backoff: BackoffConfig {
37                initial_interval: Duration::from_millis(100),
38                max_interval: Duration::from_secs(30),
39                multiplier: 2.0,
40                max_retries: 5,
41            },
42        }
43    }
44}