use std::time::Duration;
use serde::{Deserialize, Serialize};
pub(crate) mod certs;
pub mod manager;
pub mod pool;
pub mod protocol;
mod transport;
mod xdr;
pub use manager::{RelayManager, RelayManagerOptions, TestRelayReport};
pub use transport::{BEP_TRANSPORT_ID, SyncthingRelayTransport};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[non_exhaustive]
pub struct RelayConfig {
#[serde(default)]
pub relay_urls: Vec<String>,
#[serde(with = "duration_seconds")]
pub timeout: Duration,
#[serde(default = "default_auto_fallback")]
pub auto_fallback: bool,
}
impl Default for RelayConfig {
fn default() -> Self {
Self {
relay_urls: Vec::new(),
timeout: Duration::from_secs(10),
auto_fallback: true,
}
}
}
const fn default_auto_fallback() -> bool {
true
}
mod duration_seconds {
use std::time::Duration;
use serde::{Deserialize, Deserializer, Serializer};
pub fn serialize<S>(duration: &Duration, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_u64(duration.as_secs())
}
pub fn deserialize<'de, D>(deserializer: D) -> Result<Duration, D::Error>
where
D: Deserializer<'de>,
{
let seconds = u64::deserialize(deserializer)?;
Ok(Duration::from_secs(seconds))
}
}