use std::{collections::HashSet, path::PathBuf};
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct TransportConfig {
pub peer_to_peer: PeerToPeer,
pub connect: Connect,
pub listen: Listen,
pub global: Global,
}
impl TransportConfig {
pub fn new() -> Self {
Self {
peer_to_peer: PeerToPeer {
bluetooth_le: BluetoothLEConfig::new(),
lan: LanConfig::new(),
},
connect: Connect {
tcp_servers: HashSet::new(),
websocket_urls: HashSet::new(),
},
listen: Listen {
tcp: TcpListenConfig::new(),
http: HttpListenConfig::new(),
},
global: Global { sync_group: 0 },
}
}
pub fn enable_all_peer_to_peer(&mut self) {
self.peer_to_peer.bluetooth_le.enabled = true;
self.peer_to_peer.lan.enabled = true;
}
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct PeerToPeer {
pub bluetooth_le: BluetoothLEConfig,
pub lan: LanConfig,
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct Connect {
pub tcp_servers: HashSet<String>,
pub websocket_urls: HashSet<String>,
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct Listen {
pub tcp: TcpListenConfig,
pub http: HttpListenConfig,
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct Global {
pub sync_group: u32,
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct HttpListenConfig {
pub enabled: bool,
pub interface_ip: String,
pub port: u16,
pub static_content_path: Option<PathBuf>,
pub websocket_sync: bool,
pub tls_key_path: Option<PathBuf>,
pub tls_certificate_path: Option<PathBuf>,
}
impl HttpListenConfig {
pub fn new() -> Self {
Self {
enabled: false,
interface_ip: "[::]".to_string(),
port: 80,
static_content_path: None,
websocket_sync: true,
tls_key_path: None,
tls_certificate_path: None,
}
}
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct TcpListenConfig {
pub enabled: bool,
pub interface_ip: String,
pub port: u16,
}
impl TcpListenConfig {
pub fn new() -> Self {
Self {
enabled: false,
interface_ip: "[::]".to_string(),
port: 4040,
}
}
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct BluetoothLEConfig {
pub enabled: bool,
}
impl BluetoothLEConfig {
pub fn new() -> Self {
Self { enabled: false }
}
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct LanConfig {
pub enabled: bool,
pub mdns_enabled: bool,
pub multicast_enabled: bool,
}
impl LanConfig {
pub fn new() -> Self {
Self {
enabled: false,
mdns_enabled: true,
multicast_enabled: true,
}
}
}