syncweb_core/net/
relay.rs1use std::time::Duration;
20
21use serde::{Deserialize, Serialize};
22
23pub(crate) mod certs;
24pub mod manager;
25pub mod pool;
26pub mod protocol;
27mod transport;
28mod xdr;
29
30pub use manager::{RelayManager, RelayManagerOptions, TestRelayReport};
31pub use transport::{BEP_TRANSPORT_ID, SyncthingRelayTransport};
32
33#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
35#[non_exhaustive]
36pub struct RelayConfig {
37 #[serde(default)]
38 pub relay_urls: Vec<String>,
39 #[serde(with = "duration_seconds")]
40 pub timeout: Duration,
41 #[serde(default = "default_auto_fallback")]
42 pub auto_fallback: bool,
43}
44
45impl Default for RelayConfig {
46 fn default() -> Self {
47 Self {
48 relay_urls: Vec::new(),
49 timeout: Duration::from_secs(10),
50 auto_fallback: true,
51 }
52 }
53}
54
55const fn default_auto_fallback() -> bool {
56 true
57}
58
59mod duration_seconds {
60 use std::time::Duration;
61
62 use serde::{Deserialize, Deserializer, Serializer};
63
64 pub fn serialize<S>(duration: &Duration, serializer: S) -> Result<S::Ok, S::Error>
65 where
66 S: Serializer,
67 {
68 serializer.serialize_u64(duration.as_secs())
69 }
70
71 pub fn deserialize<'de, D>(deserializer: D) -> Result<Duration, D::Error>
72 where
73 D: Deserializer<'de>,
74 {
75 let seconds = u64::deserialize(deserializer)?;
76 Ok(Duration::from_secs(seconds))
77 }
78}