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 #[cfg(test)]
37 pub test_fail_webrtc: bool,
38}
39
40#[derive(Debug, Clone, Default, Serialize, Deserialize)]
42#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
43pub enum CredentialType {
44 #[default]
46 Password,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize, Default)]
51#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
52#[serde(rename_all = "camelCase")]
53pub struct IceServers {
54 pub urls: Vec<String>,
56
57 #[serde(default)]
59 pub username: Option<String>,
60
61 #[serde(default)]
63 pub credential: Option<String>,
64
65 #[serde(default)]
67 pub credential_type: Option<CredentialType>,
68}
69
70#[derive(Debug, Clone, Default, Serialize, Deserialize)]
72#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
73pub enum TransportPolicy {
74 #[default]
76 All,
77 Relay,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize, Default)]
86#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
87#[serde(rename_all = "camelCase")]
88pub struct WebRtcConfig {
89 pub ice_servers: Vec<IceServers>,
91
92 #[serde(default)]
94 pub ice_transport_policy: TransportPolicy,
95}
96
97#[cfg(feature = "backend-go-pion")]
98impl WebRtcConfig {
99 pub fn to_go_buf(&self) -> std::io::Result<tx5_go_pion::GoBuf> {
101 serde_json::to_vec(self)
102 .map_err(|e| {
103 std::io::Error::new(
104 std::io::ErrorKind::Other,
105 format!("failed to serialize WebRtcConfig: {}", e),
106 )
107 })?
108 .try_into()
109 }
110}