1use serde::{Deserialize, Serialize};
2use std::sync::Arc;
3
4#[derive(Debug, Clone, Copy)]
6pub enum BackendModule {
7 #[cfg(feature = "backend-libdatachannel")]
9 LibDataChannel,
10
11 #[cfg(feature = "backend-go-pion")]
13 GoPion,
14}
15
16impl Default for BackendModule {
17 #[allow(unreachable_code)]
18 fn default() -> Self {
19 #[cfg(feature = "backend-libdatachannel")]
20 return Self::LibDataChannel;
21 #[cfg(feature = "backend-go-pion")]
22 Self::GoPion
23 }
24}
25
26#[derive(Default)]
28pub struct HubConfig {
29 pub backend_module: BackendModule,
31
32 pub signal_config: Arc<tx5_signal::SignalConfig>,
34
35 pub danger_force_signal_relay: bool,
37}
38
39#[derive(Debug, Clone, Default, Serialize, Deserialize)]
41#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
42pub enum CredentialType {
43 #[default]
45 Password,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize, Default)]
50#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
51#[serde(rename_all = "camelCase")]
52pub struct IceServers {
53 pub urls: Vec<String>,
55
56 #[serde(default)]
58 pub username: Option<String>,
59
60 #[serde(default)]
62 pub credential: Option<String>,
63
64 #[serde(default)]
66 pub credential_type: Option<CredentialType>,
67}
68
69#[derive(Debug, Clone, Default, Serialize, Deserialize)]
71#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
72pub enum TransportPolicy {
73 #[default]
75 All,
76 Relay,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize, Default)]
85#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
86#[serde(rename_all = "camelCase")]
87pub struct WebRtcConfig {
88 pub ice_servers: Vec<IceServers>,
90
91 #[serde(default)]
93 pub ice_transport_policy: TransportPolicy,
94}
95
96#[cfg(feature = "backend-go-pion")]
97impl WebRtcConfig {
98 pub fn to_go_buf(&self) -> std::io::Result<tx5_go_pion::GoBuf> {
100 serde_json::to_vec(self)
101 .map_err(|e| {
102 std::io::Error::other(format!(
103 "failed to serialize WebRtcConfig: {}",
104 e
105 ))
106 })?
107 .try_into()
108 }
109}