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 pub danger_deny_signal_relay: bool,
40}
41
42#[derive(Debug, Clone, Default, Serialize, Deserialize)]
44#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
45pub enum CredentialType {
46 #[default]
48 Password,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize, Default)]
53#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
54#[serde(rename_all = "camelCase")]
55pub struct IceServers {
56 pub urls: Vec<String>,
58
59 #[serde(default)]
61 pub username: Option<String>,
62
63 #[serde(default)]
65 pub credential: Option<String>,
66
67 #[serde(default)]
69 pub credential_type: Option<CredentialType>,
70}
71
72#[derive(Debug, Clone, Default, Serialize, Deserialize)]
74#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
75pub enum TransportPolicy {
76 #[default]
78 All,
79 Relay,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize, Default)]
88#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
89#[serde(rename_all = "camelCase")]
90pub struct WebRtcConfig {
91 pub ice_servers: Vec<IceServers>,
93
94 #[serde(default)]
96 pub ice_transport_policy: TransportPolicy,
97}
98
99#[cfg(feature = "backend-go-pion")]
100impl WebRtcConfig {
101 pub fn to_go_buf(&self) -> std::io::Result<tx5_go_pion::GoBuf> {
103 serde_json::to_vec(self)
104 .map_err(|e| {
105 std::io::Error::other(format!(
106 "failed to serialize WebRtcConfig: {}",
107 e
108 ))
109 })?
110 .try_into()
111 }
112}