1use std::time::Duration;
6
7#[derive(Debug, Clone, Copy)]
9pub struct WsHeartbeatConfig {
10 pub interval: Duration,
12 pub timeout: Duration,
14}
15
16impl Default for WsHeartbeatConfig {
17 fn default() -> Self {
18 Self {
19 interval: Duration::from_secs(30),
20 timeout: Duration::from_secs(10),
21 }
22 }
23}
24
25impl WsHeartbeatConfig {
26 pub fn new() -> Self {
28 Self::default()
29 }
30
31 pub fn interval(mut self, interval: Duration) -> Self {
33 self.interval = interval;
34 self
35 }
36
37 pub fn timeout(mut self, timeout: Duration) -> Self {
39 self.timeout = timeout;
40 self
41 }
42}
43
44#[cfg(test)]
45mod tests {
46 use super::*;
47 use proptest::prelude::*;
48
49 proptest! {
50 #[test]
56 fn test_heartbeat_config_roundtrip(
57 interval_secs in 1u64..3600,
58 timeout_secs in 1u64..3600,
59 ) {
60 let config = WsHeartbeatConfig::new()
61 .interval(Duration::from_secs(interval_secs))
62 .timeout(Duration::from_secs(timeout_secs));
63
64 prop_assert_eq!(config.interval, Duration::from_secs(interval_secs));
65 prop_assert_eq!(config.timeout, Duration::from_secs(timeout_secs));
66 }
67 }
68}