Skip to main content

livekit_protocol/
livekit.rs

1// @generated
2// This file is @generated by prost-build.
3#[allow(clippy::derive_partial_eq_without_eq)]
4#[derive(Clone, PartialEq, ::prost::Message)]
5pub struct MetricsBatch {
6    /// time at which this batch is sent based on a monotonic clock (millisecond resolution)
7    #[prost(int64, tag="1")]
8    pub timestamp_ms: i64,
9    #[prost(message, optional, tag="2")]
10    pub normalized_timestamp: ::core::option::Option<::pbjson_types::Timestamp>,
11    /// To avoid repeating string values, we store them in a separate list and reference them by index
12    /// This is useful for storing participant identities, track names, etc.
13    /// There is also a predefined list of labels that can be used to reference common metrics.
14    /// They have reserved indices from 0 to (METRIC_LABEL_PREDEFINED_MAX_VALUE - 1).
15    /// Indexes pointing at str_data should start from METRIC_LABEL_PREDEFINED_MAX_VALUE,
16    /// such that str_data\[0\] == index of METRIC_LABEL_PREDEFINED_MAX_VALUE.
17    #[prost(string, repeated, tag="3")]
18    pub str_data: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
19    #[prost(message, repeated, tag="4")]
20    pub time_series: ::prost::alloc::vec::Vec<TimeSeriesMetric>,
21    #[prost(message, repeated, tag="5")]
22    pub events: ::prost::alloc::vec::Vec<EventMetric>,
23}
24#[allow(clippy::derive_partial_eq_without_eq)]
25#[derive(Clone, PartialEq, ::prost::Message)]
26pub struct TimeSeriesMetric {
27    /// Metric name e.g "speech_probablity". The string value is not directly stored in the message, but referenced by index
28    /// in the `str_data` field of `MetricsBatch`
29    #[prost(uint32, tag="1")]
30    pub label: u32,
31    /// index into `str_data`
32    #[prost(uint32, tag="2")]
33    pub participant_identity: u32,
34    /// index into `str_data`
35    #[prost(uint32, tag="3")]
36    pub track_sid: u32,
37    #[prost(message, repeated, tag="4")]
38    pub samples: ::prost::alloc::vec::Vec<MetricSample>,
39    /// index into 'str_data'
40    #[prost(uint32, tag="5")]
41    pub rid: u32,
42}
43#[allow(clippy::derive_partial_eq_without_eq)]
44#[derive(Clone, PartialEq, ::prost::Message)]
45pub struct MetricSample {
46    /// time of metric based on a monotonic clock (in milliseconds)
47    #[prost(int64, tag="1")]
48    pub timestamp_ms: i64,
49    #[prost(message, optional, tag="2")]
50    pub normalized_timestamp: ::core::option::Option<::pbjson_types::Timestamp>,
51    #[prost(float, tag="3")]
52    pub value: f32,
53}
54#[allow(clippy::derive_partial_eq_without_eq)]
55#[derive(Clone, PartialEq, ::prost::Message)]
56pub struct EventMetric {
57    #[prost(uint32, tag="1")]
58    pub label: u32,
59    /// index into `str_data`
60    #[prost(uint32, tag="2")]
61    pub participant_identity: u32,
62    /// index into `str_data`
63    #[prost(uint32, tag="3")]
64    pub track_sid: u32,
65    /// start time of event based on a monotonic clock (in milliseconds)
66    #[prost(int64, tag="4")]
67    pub start_timestamp_ms: i64,
68    /// end time of event based on a monotonic clock (in milliseconds), if needed
69    #[prost(int64, optional, tag="5")]
70    pub end_timestamp_ms: ::core::option::Option<i64>,
71    #[prost(message, optional, tag="6")]
72    pub normalized_start_timestamp: ::core::option::Option<::pbjson_types::Timestamp>,
73    #[prost(message, optional, tag="7")]
74    pub normalized_end_timestamp: ::core::option::Option<::pbjson_types::Timestamp>,
75    #[prost(string, tag="8")]
76    pub metadata: ::prost::alloc::string::String,
77    /// index into 'str_data'
78    #[prost(uint32, tag="9")]
79    pub rid: u32,
80}
81#[allow(clippy::derive_partial_eq_without_eq)]
82#[derive(Clone, PartialEq, ::prost::Message)]
83pub struct MetricsRecordingHeader {
84    #[prost(string, tag="1")]
85    pub room_id: ::prost::alloc::string::String,
86    /// milliseconds
87    #[prost(uint64, tag="3")]
88    pub duration: u64,
89    #[prost(message, optional, tag="4")]
90    pub start_time: ::core::option::Option<::pbjson_types::Timestamp>,
91    #[prost(map="string, string", tag="5")]
92    pub room_tags: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
93}
94//
95// Protocol used to record metrics for a specific session.
96//
97// Clients send their timestamp in their own monotonically increasing time (e.g `performance.now` on JS).
98// These timestamps are then augmented by the SFU to its time base.
99//
100// A metric can be linked to a specific track by setting `track_sid`.
101
102/// index from [0: MAX_LABEL_PREDEFINED_MAX_VALUE) are for predefined labels (`MetricLabel`)
103#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
104#[repr(i32)]
105pub enum MetricLabel {
106    /// time to first token from LLM
107    AgentsLlmTtft = 0,
108    /// time to final transcription
109    AgentsSttTtft = 1,
110    /// time to first byte
111    AgentsTtsTtfb = 2,
112    /// Number of video freezes
113    ClientVideoSubscriberFreezeCount = 3,
114    /// total duration of freezes
115    ClientVideoSubscriberTotalFreezeDuration = 4,
116    /// number of video pauses
117    ClientVideoSubscriberPauseCount = 5,
118    /// total duration of pauses
119    ClientVideoSubscriberTotalPausesDuration = 6,
120    /// number of concealed (synthesized) audio samples
121    ClientAudioSubscriberConcealedSamples = 7,
122    /// number of silent concealed samples
123    ClientAudioSubscriberSilentConcealedSamples = 8,
124    /// number of concealment events
125    ClientAudioSubscriberConcealmentEvents = 9,
126    /// number of interruptions
127    ClientAudioSubscriberInterruptionCount = 10,
128    /// total duration of interruptions
129    ClientAudioSubscriberTotalInterruptionDuration = 11,
130    /// total time spent in jitter buffer
131    ClientSubscriberJitterBufferDelay = 12,
132    /// total time spent in jitter buffer
133    ClientSubscriberJitterBufferEmittedCount = 13,
134    /// total duration spent in bandwidth quality limitation
135    ClientVideoPublisherQualityLimitationDurationBandwidth = 14,
136    /// total duration spent in cpu quality limitation
137    ClientVideoPublisherQualityLimitationDurationCpu = 15,
138    /// total duration spent in other quality limitation
139    ClientVideoPublisherQualityLimitationDurationOther = 16,
140    /// Publisher RTT (participant -> server)
141    PublisherRtt = 17,
142    /// RTT between publisher node and subscriber node (could involve intermedia node(s))
143    ServerMeshRtt = 18,
144    /// Subscribe RTT (server -> participant)
145    SubscriberRtt = 19,
146    PredefinedMaxValue = 4096,
147}
148impl MetricLabel {
149    /// String value of the enum field names used in the ProtoBuf definition.
150    ///
151    /// The values are not transformed in any way and thus are considered stable
152    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
153    pub fn as_str_name(&self) -> &'static str {
154        match self {
155            MetricLabel::AgentsLlmTtft => "AGENTS_LLM_TTFT",
156            MetricLabel::AgentsSttTtft => "AGENTS_STT_TTFT",
157            MetricLabel::AgentsTtsTtfb => "AGENTS_TTS_TTFB",
158            MetricLabel::ClientVideoSubscriberFreezeCount => "CLIENT_VIDEO_SUBSCRIBER_FREEZE_COUNT",
159            MetricLabel::ClientVideoSubscriberTotalFreezeDuration => "CLIENT_VIDEO_SUBSCRIBER_TOTAL_FREEZE_DURATION",
160            MetricLabel::ClientVideoSubscriberPauseCount => "CLIENT_VIDEO_SUBSCRIBER_PAUSE_COUNT",
161            MetricLabel::ClientVideoSubscriberTotalPausesDuration => "CLIENT_VIDEO_SUBSCRIBER_TOTAL_PAUSES_DURATION",
162            MetricLabel::ClientAudioSubscriberConcealedSamples => "CLIENT_AUDIO_SUBSCRIBER_CONCEALED_SAMPLES",
163            MetricLabel::ClientAudioSubscriberSilentConcealedSamples => "CLIENT_AUDIO_SUBSCRIBER_SILENT_CONCEALED_SAMPLES",
164            MetricLabel::ClientAudioSubscriberConcealmentEvents => "CLIENT_AUDIO_SUBSCRIBER_CONCEALMENT_EVENTS",
165            MetricLabel::ClientAudioSubscriberInterruptionCount => "CLIENT_AUDIO_SUBSCRIBER_INTERRUPTION_COUNT",
166            MetricLabel::ClientAudioSubscriberTotalInterruptionDuration => "CLIENT_AUDIO_SUBSCRIBER_TOTAL_INTERRUPTION_DURATION",
167            MetricLabel::ClientSubscriberJitterBufferDelay => "CLIENT_SUBSCRIBER_JITTER_BUFFER_DELAY",
168            MetricLabel::ClientSubscriberJitterBufferEmittedCount => "CLIENT_SUBSCRIBER_JITTER_BUFFER_EMITTED_COUNT",
169            MetricLabel::ClientVideoPublisherQualityLimitationDurationBandwidth => "CLIENT_VIDEO_PUBLISHER_QUALITY_LIMITATION_DURATION_BANDWIDTH",
170            MetricLabel::ClientVideoPublisherQualityLimitationDurationCpu => "CLIENT_VIDEO_PUBLISHER_QUALITY_LIMITATION_DURATION_CPU",
171            MetricLabel::ClientVideoPublisherQualityLimitationDurationOther => "CLIENT_VIDEO_PUBLISHER_QUALITY_LIMITATION_DURATION_OTHER",
172            MetricLabel::PublisherRtt => "PUBLISHER_RTT",
173            MetricLabel::ServerMeshRtt => "SERVER_MESH_RTT",
174            MetricLabel::SubscriberRtt => "SUBSCRIBER_RTT",
175            MetricLabel::PredefinedMaxValue => "METRIC_LABEL_PREDEFINED_MAX_VALUE",
176        }
177    }
178    /// Creates an enum from field names used in the ProtoBuf definition.
179    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
180        match value {
181            "AGENTS_LLM_TTFT" => Some(Self::AgentsLlmTtft),
182            "AGENTS_STT_TTFT" => Some(Self::AgentsSttTtft),
183            "AGENTS_TTS_TTFB" => Some(Self::AgentsTtsTtfb),
184            "CLIENT_VIDEO_SUBSCRIBER_FREEZE_COUNT" => Some(Self::ClientVideoSubscriberFreezeCount),
185            "CLIENT_VIDEO_SUBSCRIBER_TOTAL_FREEZE_DURATION" => Some(Self::ClientVideoSubscriberTotalFreezeDuration),
186            "CLIENT_VIDEO_SUBSCRIBER_PAUSE_COUNT" => Some(Self::ClientVideoSubscriberPauseCount),
187            "CLIENT_VIDEO_SUBSCRIBER_TOTAL_PAUSES_DURATION" => Some(Self::ClientVideoSubscriberTotalPausesDuration),
188            "CLIENT_AUDIO_SUBSCRIBER_CONCEALED_SAMPLES" => Some(Self::ClientAudioSubscriberConcealedSamples),
189            "CLIENT_AUDIO_SUBSCRIBER_SILENT_CONCEALED_SAMPLES" => Some(Self::ClientAudioSubscriberSilentConcealedSamples),
190            "CLIENT_AUDIO_SUBSCRIBER_CONCEALMENT_EVENTS" => Some(Self::ClientAudioSubscriberConcealmentEvents),
191            "CLIENT_AUDIO_SUBSCRIBER_INTERRUPTION_COUNT" => Some(Self::ClientAudioSubscriberInterruptionCount),
192            "CLIENT_AUDIO_SUBSCRIBER_TOTAL_INTERRUPTION_DURATION" => Some(Self::ClientAudioSubscriberTotalInterruptionDuration),
193            "CLIENT_SUBSCRIBER_JITTER_BUFFER_DELAY" => Some(Self::ClientSubscriberJitterBufferDelay),
194            "CLIENT_SUBSCRIBER_JITTER_BUFFER_EMITTED_COUNT" => Some(Self::ClientSubscriberJitterBufferEmittedCount),
195            "CLIENT_VIDEO_PUBLISHER_QUALITY_LIMITATION_DURATION_BANDWIDTH" => Some(Self::ClientVideoPublisherQualityLimitationDurationBandwidth),
196            "CLIENT_VIDEO_PUBLISHER_QUALITY_LIMITATION_DURATION_CPU" => Some(Self::ClientVideoPublisherQualityLimitationDurationCpu),
197            "CLIENT_VIDEO_PUBLISHER_QUALITY_LIMITATION_DURATION_OTHER" => Some(Self::ClientVideoPublisherQualityLimitationDurationOther),
198            "PUBLISHER_RTT" => Some(Self::PublisherRtt),
199            "SERVER_MESH_RTT" => Some(Self::ServerMeshRtt),
200            "SUBSCRIBER_RTT" => Some(Self::SubscriberRtt),
201            "METRIC_LABEL_PREDEFINED_MAX_VALUE" => Some(Self::PredefinedMaxValue),
202            _ => None,
203        }
204    }
205}
206#[allow(clippy::derive_partial_eq_without_eq)]
207#[derive(Clone, PartialEq, ::prost::Message)]
208pub struct Pagination {
209    /// list entities which IDs are greater
210    #[prost(string, tag="1")]
211    pub after_id: ::prost::alloc::string::String,
212    #[prost(int32, tag="2")]
213    pub limit: i32,
214}
215#[allow(clippy::derive_partial_eq_without_eq)]
216#[derive(Clone, PartialEq, ::prost::Message)]
217pub struct TokenPagination {
218    #[prost(string, tag="1")]
219    pub token: ::prost::alloc::string::String,
220}
221/// ListUpdate is used for updated APIs where 'repeated string' field is modified.
222#[allow(clippy::derive_partial_eq_without_eq)]
223#[derive(Clone, PartialEq, ::prost::Message)]
224pub struct ListUpdate {
225    /// set the field to a new list
226    #[prost(string, repeated, tag="1")]
227    pub set: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
228    /// append items to a list, avoiding duplicates
229    #[prost(string, repeated, tag="2")]
230    pub add: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
231    /// delete items from a list
232    #[prost(string, repeated, tag="3")]
233    pub remove: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
234    /// sets the list to an empty list
235    #[prost(bool, tag="4")]
236    pub clear: bool,
237}
238#[allow(clippy::derive_partial_eq_without_eq)]
239#[derive(Clone, PartialEq, ::prost::Message)]
240pub struct Room {
241    #[prost(string, tag="1")]
242    pub sid: ::prost::alloc::string::String,
243    #[prost(string, tag="2")]
244    pub name: ::prost::alloc::string::String,
245    #[prost(uint32, tag="3")]
246    pub empty_timeout: u32,
247    #[prost(uint32, tag="14")]
248    pub departure_timeout: u32,
249    #[prost(uint32, tag="4")]
250    pub max_participants: u32,
251    #[prost(int64, tag="5")]
252    pub creation_time: i64,
253    #[prost(int64, tag="15")]
254    pub creation_time_ms: i64,
255    #[prost(string, tag="6")]
256    pub turn_password: ::prost::alloc::string::String,
257    #[prost(message, repeated, tag="7")]
258    pub enabled_codecs: ::prost::alloc::vec::Vec<Codec>,
259    #[prost(string, tag="8")]
260    pub metadata: ::prost::alloc::string::String,
261    #[prost(uint32, tag="9")]
262    pub num_participants: u32,
263    #[prost(uint32, tag="11")]
264    pub num_publishers: u32,
265    #[prost(bool, tag="10")]
266    pub active_recording: bool,
267    #[prost(message, optional, tag="13")]
268    pub version: ::core::option::Option<TimedVersion>,
269}
270#[allow(clippy::derive_partial_eq_without_eq)]
271#[derive(Clone, PartialEq, ::prost::Message)]
272pub struct Codec {
273    #[prost(string, tag="1")]
274    pub mime: ::prost::alloc::string::String,
275    #[prost(string, tag="2")]
276    pub fmtp_line: ::prost::alloc::string::String,
277}
278#[allow(clippy::derive_partial_eq_without_eq)]
279#[derive(Clone, PartialEq, ::prost::Message)]
280pub struct PlayoutDelay {
281    #[prost(bool, tag="1")]
282    pub enabled: bool,
283    #[prost(uint32, tag="2")]
284    pub min: u32,
285    #[prost(uint32, tag="3")]
286    pub max: u32,
287}
288#[allow(clippy::derive_partial_eq_without_eq)]
289#[derive(Clone, PartialEq, ::prost::Message)]
290pub struct ParticipantPermission {
291    /// allow participant to subscribe to other tracks in the room
292    #[prost(bool, tag="1")]
293    pub can_subscribe: bool,
294    /// allow participant to publish new tracks to room
295    #[prost(bool, tag="2")]
296    pub can_publish: bool,
297    /// allow participant to publish data
298    #[prost(bool, tag="3")]
299    pub can_publish_data: bool,
300    /// sources that are allowed to be published
301    #[prost(enumeration="TrackSource", repeated, tag="9")]
302    pub can_publish_sources: ::prost::alloc::vec::Vec<i32>,
303    /// indicates that it's hidden to others
304    #[prost(bool, tag="7")]
305    pub hidden: bool,
306    /// indicates it's a recorder instance
307    /// deprecated: use ParticipantInfo.kind instead
308    #[deprecated]
309    #[prost(bool, tag="8")]
310    pub recorder: bool,
311    /// indicates that participant can update own metadata and attributes
312    #[prost(bool, tag="10")]
313    pub can_update_metadata: bool,
314    /// indicates that participant is an agent
315    /// deprecated: use ParticipantInfo.kind instead
316    #[deprecated]
317    #[prost(bool, tag="11")]
318    pub agent: bool,
319    /// if a participant can subscribe to metrics
320    #[prost(bool, tag="12")]
321    pub can_subscribe_metrics: bool,
322    /// if a participant can manage an agent session via RemoteSession (control and access state)
323    #[prost(bool, tag="13")]
324    pub can_manage_agent_session: bool,
325}
326#[allow(clippy::derive_partial_eq_without_eq)]
327#[derive(Clone, PartialEq, ::prost::Message)]
328pub struct ParticipantInfo {
329    #[prost(string, tag="1")]
330    pub sid: ::prost::alloc::string::String,
331    #[prost(string, tag="2")]
332    pub identity: ::prost::alloc::string::String,
333    #[prost(enumeration="participant_info::State", tag="3")]
334    pub state: i32,
335    #[prost(message, repeated, tag="4")]
336    pub tracks: ::prost::alloc::vec::Vec<TrackInfo>,
337    #[prost(string, tag="5")]
338    pub metadata: ::prost::alloc::string::String,
339    /// timestamp when participant joined room, in seconds
340    #[prost(int64, tag="6")]
341    pub joined_at: i64,
342    /// timestamp when participant joined room, in milliseconds
343    #[prost(int64, tag="17")]
344    pub joined_at_ms: i64,
345    #[prost(string, tag="9")]
346    pub name: ::prost::alloc::string::String,
347    #[prost(uint32, tag="10")]
348    pub version: u32,
349    #[prost(message, optional, tag="11")]
350    pub permission: ::core::option::Option<ParticipantPermission>,
351    #[prost(string, tag="12")]
352    pub region: ::prost::alloc::string::String,
353    /// indicates the participant has an active publisher connection
354    /// and can publish to the server
355    #[prost(bool, tag="13")]
356    pub is_publisher: bool,
357    #[prost(enumeration="participant_info::Kind", tag="14")]
358    pub kind: i32,
359    #[prost(map="string, string", tag="15")]
360    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
361    #[prost(enumeration="DisconnectReason", tag="16")]
362    pub disconnect_reason: i32,
363    #[prost(enumeration="participant_info::KindDetail", repeated, tag="18")]
364    pub kind_details: ::prost::alloc::vec::Vec<i32>,
365    #[prost(message, repeated, tag="19")]
366    pub data_tracks: ::prost::alloc::vec::Vec<DataTrackInfo>,
367    /// protocol version used for client feature compatibility
368    #[prost(int32, tag="20")]
369    pub client_protocol: i32,
370}
371/// Nested message and enum types in `ParticipantInfo`.
372pub mod participant_info {
373    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
374    #[repr(i32)]
375    pub enum State {
376        /// websocket' connected, but not offered yet
377        Joining = 0,
378        /// server received client offer
379        Joined = 1,
380        /// ICE connectivity established
381        Active = 2,
382        /// WS disconnected
383        Disconnected = 3,
384    }
385    impl State {
386        /// String value of the enum field names used in the ProtoBuf definition.
387        ///
388        /// The values are not transformed in any way and thus are considered stable
389        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
390        pub fn as_str_name(&self) -> &'static str {
391            match self {
392                State::Joining => "JOINING",
393                State::Joined => "JOINED",
394                State::Active => "ACTIVE",
395                State::Disconnected => "DISCONNECTED",
396            }
397        }
398        /// Creates an enum from field names used in the ProtoBuf definition.
399        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
400            match value {
401                "JOINING" => Some(Self::Joining),
402                "JOINED" => Some(Self::Joined),
403                "ACTIVE" => Some(Self::Active),
404                "DISCONNECTED" => Some(Self::Disconnected),
405                _ => None,
406            }
407        }
408    }
409    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
410    #[repr(i32)]
411    pub enum Kind {
412        /// standard participants, e.g. web clients
413        Standard = 0,
414        /// only ingests streams
415        Ingress = 1,
416        /// only consumes streams
417        Egress = 2,
418        /// SIP participants
419        Sip = 3,
420        /// LiveKit agents
421        Agent = 4,
422        /// Connectors participants
423        Connector = 7,
424        /// Bridge participants
425        ///
426        /// NEXT_ID: 9
427        Bridge = 8,
428    }
429    impl Kind {
430        /// String value of the enum field names used in the ProtoBuf definition.
431        ///
432        /// The values are not transformed in any way and thus are considered stable
433        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
434        pub fn as_str_name(&self) -> &'static str {
435            match self {
436                Kind::Standard => "STANDARD",
437                Kind::Ingress => "INGRESS",
438                Kind::Egress => "EGRESS",
439                Kind::Sip => "SIP",
440                Kind::Agent => "AGENT",
441                Kind::Connector => "CONNECTOR",
442                Kind::Bridge => "BRIDGE",
443            }
444        }
445        /// Creates an enum from field names used in the ProtoBuf definition.
446        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
447            match value {
448                "STANDARD" => Some(Self::Standard),
449                "INGRESS" => Some(Self::Ingress),
450                "EGRESS" => Some(Self::Egress),
451                "SIP" => Some(Self::Sip),
452                "AGENT" => Some(Self::Agent),
453                "CONNECTOR" => Some(Self::Connector),
454                "BRIDGE" => Some(Self::Bridge),
455                _ => None,
456            }
457        }
458    }
459    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
460    #[repr(i32)]
461    pub enum KindDetail {
462        CloudAgent = 0,
463        Forwarded = 1,
464        ConnectorWhatsapp = 2,
465        ConnectorTwilio = 3,
466        /// NEXT_ID: 5
467        BridgeRtsp = 4,
468    }
469    impl KindDetail {
470        /// String value of the enum field names used in the ProtoBuf definition.
471        ///
472        /// The values are not transformed in any way and thus are considered stable
473        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
474        pub fn as_str_name(&self) -> &'static str {
475            match self {
476                KindDetail::CloudAgent => "CLOUD_AGENT",
477                KindDetail::Forwarded => "FORWARDED",
478                KindDetail::ConnectorWhatsapp => "CONNECTOR_WHATSAPP",
479                KindDetail::ConnectorTwilio => "CONNECTOR_TWILIO",
480                KindDetail::BridgeRtsp => "BRIDGE_RTSP",
481            }
482        }
483        /// Creates an enum from field names used in the ProtoBuf definition.
484        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
485            match value {
486                "CLOUD_AGENT" => Some(Self::CloudAgent),
487                "FORWARDED" => Some(Self::Forwarded),
488                "CONNECTOR_WHATSAPP" => Some(Self::ConnectorWhatsapp),
489                "CONNECTOR_TWILIO" => Some(Self::ConnectorTwilio),
490                "BRIDGE_RTSP" => Some(Self::BridgeRtsp),
491                _ => None,
492            }
493        }
494    }
495}
496#[allow(clippy::derive_partial_eq_without_eq)]
497#[derive(Clone, PartialEq, ::prost::Message)]
498pub struct Encryption {
499}
500/// Nested message and enum types in `Encryption`.
501pub mod encryption {
502    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
503    #[repr(i32)]
504    pub enum Type {
505        None = 0,
506        Gcm = 1,
507        Custom = 2,
508    }
509    impl Type {
510        /// String value of the enum field names used in the ProtoBuf definition.
511        ///
512        /// The values are not transformed in any way and thus are considered stable
513        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
514        pub fn as_str_name(&self) -> &'static str {
515            match self {
516                Type::None => "NONE",
517                Type::Gcm => "GCM",
518                Type::Custom => "CUSTOM",
519            }
520        }
521        /// Creates an enum from field names used in the ProtoBuf definition.
522        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
523            match value {
524                "NONE" => Some(Self::None),
525                "GCM" => Some(Self::Gcm),
526                "CUSTOM" => Some(Self::Custom),
527                _ => None,
528            }
529        }
530    }
531}
532#[allow(clippy::derive_partial_eq_without_eq)]
533#[derive(Clone, PartialEq, ::prost::Message)]
534pub struct SimulcastCodecInfo {
535    #[prost(string, tag="1")]
536    pub mime_type: ::prost::alloc::string::String,
537    #[prost(string, tag="2")]
538    pub mid: ::prost::alloc::string::String,
539    #[prost(string, tag="3")]
540    pub cid: ::prost::alloc::string::String,
541    #[prost(message, repeated, tag="4")]
542    pub layers: ::prost::alloc::vec::Vec<VideoLayer>,
543    #[prost(enumeration="video_layer::Mode", tag="5")]
544    pub video_layer_mode: i32,
545    /// cid (client side id for track) could be different between
546    /// signalling (AddTrackRequest) and SDP offer. This field
547    /// will be populated only if it is different to avoid
548    /// duplication and keep the representation concise.
549    #[prost(string, tag="6")]
550    pub sdp_cid: ::prost::alloc::string::String,
551}
552#[allow(clippy::derive_partial_eq_without_eq)]
553#[derive(Clone, PartialEq, ::prost::Message)]
554pub struct TrackInfo {
555    #[prost(string, tag="1")]
556    pub sid: ::prost::alloc::string::String,
557    #[prost(enumeration="TrackType", tag="2")]
558    pub r#type: i32,
559    #[prost(string, tag="3")]
560    pub name: ::prost::alloc::string::String,
561    #[prost(bool, tag="4")]
562    pub muted: bool,
563    /// original width of video (unset for audio)
564    /// clients may receive a lower resolution version with simulcast
565    #[prost(uint32, tag="5")]
566    pub width: u32,
567    /// original height of video (unset for audio)
568    #[prost(uint32, tag="6")]
569    pub height: u32,
570    /// true if track is simulcasted
571    ///
572    /// see `video_layer_mode` in `codecs`
573    #[deprecated]
574    #[prost(bool, tag="7")]
575    pub simulcast: bool,
576    /// true if DTX (Discontinuous Transmission) is disabled for audio
577    ///
578    /// deprecated in favor of `audio_features`
579    #[deprecated]
580    #[prost(bool, tag="8")]
581    pub disable_dtx: bool,
582    /// source of media
583    #[prost(enumeration="TrackSource", tag="9")]
584    pub source: i32,
585    /// see `codecs` for layers of individual codec
586    #[deprecated]
587    #[prost(message, repeated, tag="10")]
588    pub layers: ::prost::alloc::vec::Vec<VideoLayer>,
589    /// mime type of codec
590    #[prost(string, tag="11")]
591    pub mime_type: ::prost::alloc::string::String,
592    #[prost(string, tag="12")]
593    pub mid: ::prost::alloc::string::String,
594    #[prost(message, repeated, tag="13")]
595    pub codecs: ::prost::alloc::vec::Vec<SimulcastCodecInfo>,
596    /// deprecated in favor of `audio_features`
597    #[deprecated]
598    #[prost(bool, tag="14")]
599    pub stereo: bool,
600    /// true if RED (Redundant Encoding) is disabled for audio
601    #[prost(bool, tag="15")]
602    pub disable_red: bool,
603    #[prost(enumeration="encryption::Type", tag="16")]
604    pub encryption: i32,
605    #[prost(string, tag="17")]
606    pub stream: ::prost::alloc::string::String,
607    #[prost(message, optional, tag="18")]
608    pub version: ::core::option::Option<TimedVersion>,
609    #[prost(enumeration="AudioTrackFeature", repeated, tag="19")]
610    pub audio_features: ::prost::alloc::vec::Vec<i32>,
611    #[prost(enumeration="BackupCodecPolicy", tag="20")]
612    pub backup_codec_policy: i32,
613    #[prost(enumeration="PacketTrailerFeature", repeated, tag="21")]
614    pub packet_trailer_features: ::prost::alloc::vec::Vec<i32>,
615}
616#[allow(clippy::derive_partial_eq_without_eq)]
617#[derive(Clone, PartialEq, ::prost::Message)]
618pub struct DataTrackInfo {
619    /// Client-assigned, 16-bit identifier that will be attached to packets sent by the publisher.
620    #[prost(uint32, tag="1")]
621    pub pub_handle: u32,
622    /// Server-assigned track identifier.
623    #[prost(string, tag="2")]
624    pub sid: ::prost::alloc::string::String,
625    /// Human-readable identifier (e.g., `geoLocation`, `servoPosition.x`, etc.), unique per publisher.
626    #[prost(string, tag="3")]
627    pub name: ::prost::alloc::string::String,
628    /// Method used for end-to-end encryption (E2EE) on packet payloads.
629    #[prost(enumeration="encryption::Type", tag="4")]
630    pub encryption: i32,
631}
632#[allow(clippy::derive_partial_eq_without_eq)]
633#[derive(Clone, PartialEq, ::prost::Message)]
634pub struct DataTrackExtensionParticipantSid {
635    #[prost(enumeration="DataTrackExtensionId", tag="1")]
636    pub id: i32,
637    #[prost(string, tag="2")]
638    pub participant_sid: ::prost::alloc::string::String,
639}
640#[allow(clippy::derive_partial_eq_without_eq)]
641#[derive(Clone, PartialEq, ::prost::Message)]
642pub struct DataTrackSubscriptionOptions {
643    /// Rate in frames per second (FPS) the subscriber wants to receive frames at.
644    /// If omitted, the subscriber defaults to the publisher's fps
645    #[prost(uint32, optional, tag="1")]
646    pub target_fps: ::core::option::Option<u32>,
647}
648/// provide information about available spatial layers
649#[allow(clippy::derive_partial_eq_without_eq)]
650#[derive(Clone, PartialEq, ::prost::Message)]
651pub struct VideoLayer {
652    /// for tracks with a single layer, this should be HIGH
653    #[prost(enumeration="VideoQuality", tag="1")]
654    pub quality: i32,
655    #[prost(uint32, tag="2")]
656    pub width: u32,
657    #[prost(uint32, tag="3")]
658    pub height: u32,
659    /// target bitrate in bit per second (bps), server will measure actual
660    #[prost(uint32, tag="4")]
661    pub bitrate: u32,
662    #[prost(uint32, tag="5")]
663    pub ssrc: u32,
664    #[prost(int32, tag="6")]
665    pub spatial_layer: i32,
666    #[prost(string, tag="7")]
667    pub rid: ::prost::alloc::string::String,
668    #[prost(uint32, tag="8")]
669    pub repair_ssrc: u32,
670}
671/// Nested message and enum types in `VideoLayer`.
672pub mod video_layer {
673    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
674    #[repr(i32)]
675    pub enum Mode {
676        Unused = 0,
677        OneSpatialLayerPerStream = 1,
678        MultipleSpatialLayersPerStream = 2,
679        OneSpatialLayerPerStreamIncompleteRtcpSr = 3,
680    }
681    impl Mode {
682        /// String value of the enum field names used in the ProtoBuf definition.
683        ///
684        /// The values are not transformed in any way and thus are considered stable
685        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
686        pub fn as_str_name(&self) -> &'static str {
687            match self {
688                Mode::Unused => "MODE_UNUSED",
689                Mode::OneSpatialLayerPerStream => "ONE_SPATIAL_LAYER_PER_STREAM",
690                Mode::MultipleSpatialLayersPerStream => "MULTIPLE_SPATIAL_LAYERS_PER_STREAM",
691                Mode::OneSpatialLayerPerStreamIncompleteRtcpSr => "ONE_SPATIAL_LAYER_PER_STREAM_INCOMPLETE_RTCP_SR",
692            }
693        }
694        /// Creates an enum from field names used in the ProtoBuf definition.
695        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
696            match value {
697                "MODE_UNUSED" => Some(Self::Unused),
698                "ONE_SPATIAL_LAYER_PER_STREAM" => Some(Self::OneSpatialLayerPerStream),
699                "MULTIPLE_SPATIAL_LAYERS_PER_STREAM" => Some(Self::MultipleSpatialLayersPerStream),
700                "ONE_SPATIAL_LAYER_PER_STREAM_INCOMPLETE_RTCP_SR" => Some(Self::OneSpatialLayerPerStreamIncompleteRtcpSr),
701                _ => None,
702            }
703        }
704    }
705}
706/// new DataPacket API
707#[allow(clippy::derive_partial_eq_without_eq)]
708#[derive(Clone, PartialEq, ::prost::Message)]
709pub struct DataPacket {
710    #[deprecated]
711    #[prost(enumeration="data_packet::Kind", tag="1")]
712    pub kind: i32,
713    /// participant identity of user that sent the message
714    #[prost(string, tag="4")]
715    pub participant_identity: ::prost::alloc::string::String,
716    /// identities of participants who will receive the message (sent to all by default)
717    #[prost(string, repeated, tag="5")]
718    pub destination_identities: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
719    /// sequence number of reliable packet
720    #[prost(uint32, tag="16")]
721    pub sequence: u32,
722    /// sid of the user that sent the message
723    #[prost(string, tag="17")]
724    pub participant_sid: ::prost::alloc::string::String,
725    #[prost(oneof="data_packet::Value", tags="2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18")]
726    pub value: ::core::option::Option<data_packet::Value>,
727}
728/// Nested message and enum types in `DataPacket`.
729pub mod data_packet {
730    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
731    #[repr(i32)]
732    pub enum Kind {
733        Reliable = 0,
734        Lossy = 1,
735    }
736    impl Kind {
737        /// String value of the enum field names used in the ProtoBuf definition.
738        ///
739        /// The values are not transformed in any way and thus are considered stable
740        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
741        pub fn as_str_name(&self) -> &'static str {
742            match self {
743                Kind::Reliable => "RELIABLE",
744                Kind::Lossy => "LOSSY",
745            }
746        }
747        /// Creates an enum from field names used in the ProtoBuf definition.
748        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
749            match value {
750                "RELIABLE" => Some(Self::Reliable),
751                "LOSSY" => Some(Self::Lossy),
752                _ => None,
753            }
754        }
755    }
756    #[allow(clippy::derive_partial_eq_without_eq)]
757#[derive(Clone, PartialEq, ::prost::Oneof)]
758    pub enum Value {
759        #[prost(message, tag="2")]
760        User(super::UserPacket),
761        #[prost(message, tag="3")]
762        Speaker(super::ActiveSpeakerUpdate),
763        #[prost(message, tag="6")]
764        SipDtmf(super::SipDtmf),
765        #[prost(message, tag="7")]
766        Transcription(super::Transcription),
767        #[prost(message, tag="8")]
768        Metrics(super::MetricsBatch),
769        #[prost(message, tag="9")]
770        ChatMessage(super::ChatMessage),
771        #[prost(message, tag="10")]
772        RpcRequest(super::RpcRequest),
773        #[prost(message, tag="11")]
774        RpcAck(super::RpcAck),
775        #[prost(message, tag="12")]
776        RpcResponse(super::RpcResponse),
777        #[prost(message, tag="13")]
778        StreamHeader(super::data_stream::Header),
779        #[prost(message, tag="14")]
780        StreamChunk(super::data_stream::Chunk),
781        #[prost(message, tag="15")]
782        StreamTrailer(super::data_stream::Trailer),
783        #[prost(message, tag="18")]
784        EncryptedPacket(super::EncryptedPacket),
785    }
786}
787#[allow(clippy::derive_partial_eq_without_eq)]
788#[derive(Clone, PartialEq, ::prost::Message)]
789pub struct EncryptedPacket {
790    #[prost(enumeration="encryption::Type", tag="1")]
791    pub encryption_type: i32,
792    #[prost(bytes="vec", tag="2")]
793    pub iv: ::prost::alloc::vec::Vec<u8>,
794    #[prost(uint32, tag="3")]
795    pub key_index: u32,
796    /// This is an encrypted EncryptedPacketPayload message representation
797    #[prost(bytes="vec", tag="4")]
798    pub encrypted_value: ::prost::alloc::vec::Vec<u8>,
799}
800#[allow(clippy::derive_partial_eq_without_eq)]
801#[derive(Clone, PartialEq, ::prost::Message)]
802pub struct EncryptedPacketPayload {
803    #[prost(oneof="encrypted_packet_payload::Value", tags="1, 3, 4, 5, 6, 7, 8, 9")]
804    pub value: ::core::option::Option<encrypted_packet_payload::Value>,
805}
806/// Nested message and enum types in `EncryptedPacketPayload`.
807pub mod encrypted_packet_payload {
808    #[allow(clippy::derive_partial_eq_without_eq)]
809#[derive(Clone, PartialEq, ::prost::Oneof)]
810    pub enum Value {
811        #[prost(message, tag="1")]
812        User(super::UserPacket),
813        #[prost(message, tag="3")]
814        ChatMessage(super::ChatMessage),
815        #[prost(message, tag="4")]
816        RpcRequest(super::RpcRequest),
817        #[prost(message, tag="5")]
818        RpcAck(super::RpcAck),
819        #[prost(message, tag="6")]
820        RpcResponse(super::RpcResponse),
821        #[prost(message, tag="7")]
822        StreamHeader(super::data_stream::Header),
823        #[prost(message, tag="8")]
824        StreamChunk(super::data_stream::Chunk),
825        #[prost(message, tag="9")]
826        StreamTrailer(super::data_stream::Trailer),
827    }
828}
829#[allow(clippy::derive_partial_eq_without_eq)]
830#[derive(Clone, PartialEq, ::prost::Message)]
831pub struct ActiveSpeakerUpdate {
832    #[prost(message, repeated, tag="1")]
833    pub speakers: ::prost::alloc::vec::Vec<SpeakerInfo>,
834}
835#[allow(clippy::derive_partial_eq_without_eq)]
836#[derive(Clone, PartialEq, ::prost::Message)]
837pub struct SpeakerInfo {
838    #[prost(string, tag="1")]
839    pub sid: ::prost::alloc::string::String,
840    /// audio level, 0-1.0, 1 is loudest
841    #[prost(float, tag="2")]
842    pub level: f32,
843    /// true if speaker is currently active
844    #[prost(bool, tag="3")]
845    pub active: bool,
846}
847#[allow(clippy::derive_partial_eq_without_eq)]
848#[derive(Clone, PartialEq, ::prost::Message)]
849pub struct UserPacket {
850    /// participant ID of user that sent the message
851    #[deprecated]
852    #[prost(string, tag="1")]
853    pub participant_sid: ::prost::alloc::string::String,
854    #[deprecated]
855    #[prost(string, tag="5")]
856    pub participant_identity: ::prost::alloc::string::String,
857    /// user defined payload
858    #[prost(bytes="vec", tag="2")]
859    pub payload: ::prost::alloc::vec::Vec<u8>,
860    /// the ID of the participants who will receive the message (sent to all by default)
861    #[deprecated]
862    #[prost(string, repeated, tag="3")]
863    pub destination_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
864    /// identities of participants who will receive the message (sent to all by default)
865    #[deprecated]
866    #[prost(string, repeated, tag="6")]
867    pub destination_identities: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
868    /// topic under which the message was published
869    #[prost(string, optional, tag="4")]
870    pub topic: ::core::option::Option<::prost::alloc::string::String>,
871    /// Unique ID to identify the message
872    #[prost(string, optional, tag="8")]
873    pub id: ::core::option::Option<::prost::alloc::string::String>,
874    /// start and end time allow relating the message to specific media time
875    #[prost(uint64, optional, tag="9")]
876    pub start_time: ::core::option::Option<u64>,
877    #[prost(uint64, optional, tag="10")]
878    pub end_time: ::core::option::Option<u64>,
879    /// added by SDK to enable de-duping of messages, for INTERNAL USE ONLY
880    #[prost(bytes="vec", tag="11")]
881    pub nonce: ::prost::alloc::vec::Vec<u8>,
882}
883#[allow(clippy::derive_partial_eq_without_eq)]
884#[derive(Clone, PartialEq, ::prost::Message)]
885pub struct SipDtmf {
886    #[prost(uint32, tag="3")]
887    pub code: u32,
888    #[prost(string, tag="4")]
889    pub digit: ::prost::alloc::string::String,
890}
891#[allow(clippy::derive_partial_eq_without_eq)]
892#[derive(Clone, PartialEq, ::prost::Message)]
893pub struct Transcription {
894    /// Participant that got its speech transcribed
895    #[prost(string, tag="2")]
896    pub transcribed_participant_identity: ::prost::alloc::string::String,
897    #[prost(string, tag="3")]
898    pub track_id: ::prost::alloc::string::String,
899    #[prost(message, repeated, tag="4")]
900    pub segments: ::prost::alloc::vec::Vec<TranscriptionSegment>,
901}
902#[allow(clippy::derive_partial_eq_without_eq)]
903#[derive(Clone, PartialEq, ::prost::Message)]
904pub struct TranscriptionSegment {
905    #[prost(string, tag="1")]
906    pub id: ::prost::alloc::string::String,
907    #[prost(string, tag="2")]
908    pub text: ::prost::alloc::string::String,
909    #[prost(uint64, tag="3")]
910    pub start_time: u64,
911    #[prost(uint64, tag="4")]
912    pub end_time: u64,
913    #[prost(bool, tag="5")]
914    pub r#final: bool,
915    #[prost(string, tag="6")]
916    pub language: ::prost::alloc::string::String,
917}
918#[allow(clippy::derive_partial_eq_without_eq)]
919#[derive(Clone, PartialEq, ::prost::Message)]
920pub struct ChatMessage {
921    /// uuid
922    #[prost(string, tag="1")]
923    pub id: ::prost::alloc::string::String,
924    #[prost(int64, tag="2")]
925    pub timestamp: i64,
926    /// populated only if the intent is to edit/update an existing message
927    #[prost(int64, optional, tag="3")]
928    pub edit_timestamp: ::core::option::Option<i64>,
929    #[prost(string, tag="4")]
930    pub message: ::prost::alloc::string::String,
931    /// true to remove message
932    #[prost(bool, tag="5")]
933    pub deleted: bool,
934    /// true if the chat message has been generated by an agent from a participant's audio transcription
935    #[prost(bool, tag="6")]
936    pub generated: bool,
937}
938#[allow(clippy::derive_partial_eq_without_eq)]
939#[derive(Clone, PartialEq, ::prost::Message)]
940pub struct RpcRequest {
941    #[prost(string, tag="1")]
942    pub id: ::prost::alloc::string::String,
943    #[prost(string, tag="2")]
944    pub method: ::prost::alloc::string::String,
945    #[prost(string, tag="3")]
946    pub payload: ::prost::alloc::string::String,
947    #[prost(uint32, tag="4")]
948    pub response_timeout_ms: u32,
949    #[prost(uint32, tag="5")]
950    pub version: u32,
951    /// Compressed payload data. When set, this field is used instead of `payload`.
952    #[prost(bytes="vec", tag="6")]
953    pub compressed_payload: ::prost::alloc::vec::Vec<u8>,
954}
955#[allow(clippy::derive_partial_eq_without_eq)]
956#[derive(Clone, PartialEq, ::prost::Message)]
957pub struct RpcAck {
958    #[prost(string, tag="1")]
959    pub request_id: ::prost::alloc::string::String,
960}
961#[allow(clippy::derive_partial_eq_without_eq)]
962#[derive(Clone, PartialEq, ::prost::Message)]
963pub struct RpcResponse {
964    #[prost(string, tag="1")]
965    pub request_id: ::prost::alloc::string::String,
966    #[prost(oneof="rpc_response::Value", tags="2, 3, 4")]
967    pub value: ::core::option::Option<rpc_response::Value>,
968}
969/// Nested message and enum types in `RpcResponse`.
970pub mod rpc_response {
971    #[allow(clippy::derive_partial_eq_without_eq)]
972#[derive(Clone, PartialEq, ::prost::Oneof)]
973    pub enum Value {
974        #[prost(string, tag="2")]
975        Payload(::prost::alloc::string::String),
976        #[prost(message, tag="3")]
977        Error(super::RpcError),
978        /// Compressed payload data. When set, this field is used instead of `payload`.
979        #[prost(bytes, tag="4")]
980        CompressedPayload(::prost::alloc::vec::Vec<u8>),
981    }
982}
983#[allow(clippy::derive_partial_eq_without_eq)]
984#[derive(Clone, PartialEq, ::prost::Message)]
985pub struct RpcError {
986    #[prost(uint32, tag="1")]
987    pub code: u32,
988    #[prost(string, tag="2")]
989    pub message: ::prost::alloc::string::String,
990    #[prost(string, tag="3")]
991    pub data: ::prost::alloc::string::String,
992}
993#[allow(clippy::derive_partial_eq_without_eq)]
994#[derive(Clone, PartialEq, ::prost::Message)]
995pub struct ParticipantTracks {
996    /// participant ID of participant to whom the tracks belong
997    #[prost(string, tag="1")]
998    pub participant_sid: ::prost::alloc::string::String,
999    #[prost(string, repeated, tag="2")]
1000    pub track_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1001}
1002/// details about the server
1003#[allow(clippy::derive_partial_eq_without_eq)]
1004#[derive(Clone, PartialEq, ::prost::Message)]
1005pub struct ServerInfo {
1006    #[prost(enumeration="server_info::Edition", tag="1")]
1007    pub edition: i32,
1008    #[prost(string, tag="2")]
1009    pub version: ::prost::alloc::string::String,
1010    #[prost(int32, tag="3")]
1011    pub protocol: i32,
1012    #[prost(string, tag="4")]
1013    pub region: ::prost::alloc::string::String,
1014    #[prost(string, tag="5")]
1015    pub node_id: ::prost::alloc::string::String,
1016    /// additional debugging information. sent only if server is in development mode
1017    #[prost(string, tag="6")]
1018    pub debug_info: ::prost::alloc::string::String,
1019    #[prost(int32, tag="7")]
1020    pub agent_protocol: i32,
1021}
1022/// Nested message and enum types in `ServerInfo`.
1023pub mod server_info {
1024    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1025    #[repr(i32)]
1026    pub enum Edition {
1027        Standard = 0,
1028        Cloud = 1,
1029    }
1030    impl Edition {
1031        /// String value of the enum field names used in the ProtoBuf definition.
1032        ///
1033        /// The values are not transformed in any way and thus are considered stable
1034        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1035        pub fn as_str_name(&self) -> &'static str {
1036            match self {
1037                Edition::Standard => "Standard",
1038                Edition::Cloud => "Cloud",
1039            }
1040        }
1041        /// Creates an enum from field names used in the ProtoBuf definition.
1042        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1043            match value {
1044                "Standard" => Some(Self::Standard),
1045                "Cloud" => Some(Self::Cloud),
1046                _ => None,
1047            }
1048        }
1049    }
1050}
1051/// details about the client
1052#[allow(clippy::derive_partial_eq_without_eq)]
1053#[derive(Clone, PartialEq, ::prost::Message)]
1054pub struct ClientInfo {
1055    #[prost(enumeration="client_info::Sdk", tag="1")]
1056    pub sdk: i32,
1057    #[prost(string, tag="2")]
1058    pub version: ::prost::alloc::string::String,
1059    #[prost(int32, tag="3")]
1060    pub protocol: i32,
1061    #[prost(string, tag="4")]
1062    pub os: ::prost::alloc::string::String,
1063    #[prost(string, tag="5")]
1064    pub os_version: ::prost::alloc::string::String,
1065    #[prost(string, tag="6")]
1066    pub device_model: ::prost::alloc::string::String,
1067    #[prost(string, tag="7")]
1068    pub browser: ::prost::alloc::string::String,
1069    #[prost(string, tag="8")]
1070    pub browser_version: ::prost::alloc::string::String,
1071    #[prost(string, tag="9")]
1072    pub address: ::prost::alloc::string::String,
1073    /// wifi, wired, cellular, vpn, empty if not known
1074    #[prost(string, tag="10")]
1075    pub network: ::prost::alloc::string::String,
1076    /// comma separated list of additional LiveKit SDKs in use of this client, with versions
1077    /// e.g. "components-js:1.2.3,track-processors-js:1.2.3"
1078    #[prost(string, tag="11")]
1079    pub other_sdks: ::prost::alloc::string::String,
1080    /// client protocol version
1081    #[prost(int32, tag="12")]
1082    pub client_protocol: i32,
1083}
1084/// Nested message and enum types in `ClientInfo`.
1085pub mod client_info {
1086    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1087    #[repr(i32)]
1088    pub enum Sdk {
1089        Unknown = 0,
1090        Js = 1,
1091        Swift = 2,
1092        Android = 3,
1093        Flutter = 4,
1094        Go = 5,
1095        Unity = 6,
1096        ReactNative = 7,
1097        Rust = 8,
1098        Python = 9,
1099        Cpp = 10,
1100        UnityWeb = 11,
1101        Node = 12,
1102        Unreal = 13,
1103        Esp32 = 14,
1104    }
1105    impl Sdk {
1106        /// String value of the enum field names used in the ProtoBuf definition.
1107        ///
1108        /// The values are not transformed in any way and thus are considered stable
1109        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1110        pub fn as_str_name(&self) -> &'static str {
1111            match self {
1112                Sdk::Unknown => "UNKNOWN",
1113                Sdk::Js => "JS",
1114                Sdk::Swift => "SWIFT",
1115                Sdk::Android => "ANDROID",
1116                Sdk::Flutter => "FLUTTER",
1117                Sdk::Go => "GO",
1118                Sdk::Unity => "UNITY",
1119                Sdk::ReactNative => "REACT_NATIVE",
1120                Sdk::Rust => "RUST",
1121                Sdk::Python => "PYTHON",
1122                Sdk::Cpp => "CPP",
1123                Sdk::UnityWeb => "UNITY_WEB",
1124                Sdk::Node => "NODE",
1125                Sdk::Unreal => "UNREAL",
1126                Sdk::Esp32 => "ESP32",
1127            }
1128        }
1129        /// Creates an enum from field names used in the ProtoBuf definition.
1130        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1131            match value {
1132                "UNKNOWN" => Some(Self::Unknown),
1133                "JS" => Some(Self::Js),
1134                "SWIFT" => Some(Self::Swift),
1135                "ANDROID" => Some(Self::Android),
1136                "FLUTTER" => Some(Self::Flutter),
1137                "GO" => Some(Self::Go),
1138                "UNITY" => Some(Self::Unity),
1139                "REACT_NATIVE" => Some(Self::ReactNative),
1140                "RUST" => Some(Self::Rust),
1141                "PYTHON" => Some(Self::Python),
1142                "CPP" => Some(Self::Cpp),
1143                "UNITY_WEB" => Some(Self::UnityWeb),
1144                "NODE" => Some(Self::Node),
1145                "UNREAL" => Some(Self::Unreal),
1146                "ESP32" => Some(Self::Esp32),
1147                _ => None,
1148            }
1149        }
1150    }
1151}
1152/// server provided client configuration
1153#[allow(clippy::derive_partial_eq_without_eq)]
1154#[derive(Clone, PartialEq, ::prost::Message)]
1155pub struct ClientConfiguration {
1156    #[prost(message, optional, tag="1")]
1157    pub video: ::core::option::Option<VideoConfiguration>,
1158    #[prost(message, optional, tag="2")]
1159    pub screen: ::core::option::Option<VideoConfiguration>,
1160    #[prost(enumeration="ClientConfigSetting", tag="3")]
1161    pub resume_connection: i32,
1162    #[prost(message, optional, tag="4")]
1163    pub disabled_codecs: ::core::option::Option<DisabledCodecs>,
1164    #[prost(enumeration="ClientConfigSetting", tag="5")]
1165    pub force_relay: i32,
1166}
1167#[allow(clippy::derive_partial_eq_without_eq)]
1168#[derive(Clone, PartialEq, ::prost::Message)]
1169pub struct VideoConfiguration {
1170    #[prost(enumeration="ClientConfigSetting", tag="1")]
1171    pub hardware_encoder: i32,
1172}
1173#[allow(clippy::derive_partial_eq_without_eq)]
1174#[derive(Clone, PartialEq, ::prost::Message)]
1175pub struct DisabledCodecs {
1176    /// disabled for both publish and subscribe
1177    #[prost(message, repeated, tag="1")]
1178    pub codecs: ::prost::alloc::vec::Vec<Codec>,
1179    /// only disable for publish
1180    #[prost(message, repeated, tag="2")]
1181    pub publish: ::prost::alloc::vec::Vec<Codec>,
1182}
1183#[allow(clippy::derive_partial_eq_without_eq)]
1184#[derive(Clone, PartialEq, ::prost::Message)]
1185pub struct RtpDrift {
1186    #[prost(message, optional, tag="1")]
1187    pub start_time: ::core::option::Option<::pbjson_types::Timestamp>,
1188    #[prost(message, optional, tag="2")]
1189    pub end_time: ::core::option::Option<::pbjson_types::Timestamp>,
1190    #[prost(double, tag="3")]
1191    pub duration: f64,
1192    #[prost(uint64, tag="4")]
1193    pub start_timestamp: u64,
1194    #[prost(uint64, tag="5")]
1195    pub end_timestamp: u64,
1196    #[prost(uint64, tag="6")]
1197    pub rtp_clock_ticks: u64,
1198    #[prost(int64, tag="7")]
1199    pub drift_samples: i64,
1200    #[prost(double, tag="8")]
1201    pub drift_ms: f64,
1202    #[prost(double, tag="9")]
1203    pub clock_rate: f64,
1204}
1205#[allow(clippy::derive_partial_eq_without_eq)]
1206#[derive(Clone, PartialEq, ::prost::Message)]
1207pub struct RtpStats {
1208    #[prost(message, optional, tag="1")]
1209    pub start_time: ::core::option::Option<::pbjson_types::Timestamp>,
1210    #[prost(message, optional, tag="2")]
1211    pub end_time: ::core::option::Option<::pbjson_types::Timestamp>,
1212    #[prost(double, tag="3")]
1213    pub duration: f64,
1214    #[prost(uint32, tag="4")]
1215    pub packets: u32,
1216    #[prost(double, tag="5")]
1217    pub packet_rate: f64,
1218    #[prost(uint64, tag="6")]
1219    pub bytes: u64,
1220    #[prost(uint64, tag="39")]
1221    pub header_bytes: u64,
1222    #[prost(double, tag="7")]
1223    pub bitrate: f64,
1224    #[prost(uint32, tag="8")]
1225    pub packets_lost: u32,
1226    #[prost(double, tag="9")]
1227    pub packet_loss_rate: f64,
1228    #[prost(float, tag="10")]
1229    pub packet_loss_percentage: f32,
1230    #[prost(uint32, tag="11")]
1231    pub packets_duplicate: u32,
1232    #[prost(double, tag="12")]
1233    pub packet_duplicate_rate: f64,
1234    #[prost(uint64, tag="13")]
1235    pub bytes_duplicate: u64,
1236    #[prost(uint64, tag="40")]
1237    pub header_bytes_duplicate: u64,
1238    #[prost(double, tag="14")]
1239    pub bitrate_duplicate: f64,
1240    #[prost(uint32, tag="15")]
1241    pub packets_padding: u32,
1242    #[prost(double, tag="16")]
1243    pub packet_padding_rate: f64,
1244    #[prost(uint64, tag="17")]
1245    pub bytes_padding: u64,
1246    #[prost(uint64, tag="41")]
1247    pub header_bytes_padding: u64,
1248    #[prost(double, tag="18")]
1249    pub bitrate_padding: f64,
1250    #[prost(uint32, tag="19")]
1251    pub packets_out_of_order: u32,
1252    #[prost(uint32, tag="20")]
1253    pub frames: u32,
1254    #[prost(double, tag="21")]
1255    pub frame_rate: f64,
1256    #[prost(double, tag="22")]
1257    pub jitter_current: f64,
1258    #[prost(double, tag="23")]
1259    pub jitter_max: f64,
1260    #[prost(map="int32, uint32", tag="24")]
1261    pub gap_histogram: ::std::collections::HashMap<i32, u32>,
1262    #[prost(uint32, tag="25")]
1263    pub nacks: u32,
1264    #[prost(uint32, tag="37")]
1265    pub nack_acks: u32,
1266    #[prost(uint32, tag="26")]
1267    pub nack_misses: u32,
1268    #[prost(uint32, tag="38")]
1269    pub nack_repeated: u32,
1270    #[prost(uint32, tag="27")]
1271    pub plis: u32,
1272    #[prost(message, optional, tag="28")]
1273    pub last_pli: ::core::option::Option<::pbjson_types::Timestamp>,
1274    #[prost(uint32, tag="29")]
1275    pub firs: u32,
1276    #[prost(message, optional, tag="30")]
1277    pub last_fir: ::core::option::Option<::pbjson_types::Timestamp>,
1278    #[prost(uint32, tag="31")]
1279    pub rtt_current: u32,
1280    #[prost(uint32, tag="32")]
1281    pub rtt_max: u32,
1282    #[prost(uint32, tag="33")]
1283    pub key_frames: u32,
1284    #[prost(message, optional, tag="34")]
1285    pub last_key_frame: ::core::option::Option<::pbjson_types::Timestamp>,
1286    #[prost(uint32, tag="35")]
1287    pub layer_lock_plis: u32,
1288    #[prost(message, optional, tag="36")]
1289    pub last_layer_lock_pli: ::core::option::Option<::pbjson_types::Timestamp>,
1290    #[prost(message, optional, tag="44")]
1291    pub packet_drift: ::core::option::Option<RtpDrift>,
1292    #[prost(message, optional, tag="45")]
1293    pub ntp_report_drift: ::core::option::Option<RtpDrift>,
1294    #[prost(message, optional, tag="46")]
1295    pub rebased_report_drift: ::core::option::Option<RtpDrift>,
1296    /// NEXT_ID: 48
1297    #[prost(message, optional, tag="47")]
1298    pub received_report_drift: ::core::option::Option<RtpDrift>,
1299}
1300#[allow(clippy::derive_partial_eq_without_eq)]
1301#[derive(Clone, PartialEq, ::prost::Message)]
1302pub struct RtcpSenderReportState {
1303    #[prost(uint32, tag="1")]
1304    pub rtp_timestamp: u32,
1305    #[prost(uint64, tag="2")]
1306    pub rtp_timestamp_ext: u64,
1307    #[prost(uint64, tag="3")]
1308    pub ntp_timestamp: u64,
1309    /// time at which this happened
1310    #[prost(int64, tag="4")]
1311    pub at: i64,
1312    #[prost(int64, tag="5")]
1313    pub at_adjusted: i64,
1314    #[prost(uint32, tag="6")]
1315    pub packets: u32,
1316    #[prost(uint64, tag="7")]
1317    pub octets: u64,
1318}
1319#[allow(clippy::derive_partial_eq_without_eq)]
1320#[derive(Clone, PartialEq, ::prost::Message)]
1321pub struct RtpForwarderState {
1322    #[prost(bool, tag="1")]
1323    pub started: bool,
1324    #[prost(int32, tag="2")]
1325    pub reference_layer_spatial: i32,
1326    #[prost(int64, tag="3")]
1327    pub pre_start_time: i64,
1328    #[prost(uint64, tag="4")]
1329    pub ext_first_timestamp: u64,
1330    #[prost(uint64, tag="5")]
1331    pub dummy_start_timestamp_offset: u64,
1332    #[prost(message, optional, tag="6")]
1333    pub rtp_munger: ::core::option::Option<RtpMungerState>,
1334    #[prost(message, repeated, tag="8")]
1335    pub sender_report_state: ::prost::alloc::vec::Vec<RtcpSenderReportState>,
1336    #[prost(oneof="rtp_forwarder_state::CodecMunger", tags="7")]
1337    pub codec_munger: ::core::option::Option<rtp_forwarder_state::CodecMunger>,
1338}
1339/// Nested message and enum types in `RTPForwarderState`.
1340pub mod rtp_forwarder_state {
1341    #[allow(clippy::derive_partial_eq_without_eq)]
1342#[derive(Clone, PartialEq, ::prost::Oneof)]
1343    pub enum CodecMunger {
1344        #[prost(message, tag="7")]
1345        Vp8Munger(super::Vp8MungerState),
1346    }
1347}
1348#[allow(clippy::derive_partial_eq_without_eq)]
1349#[derive(Clone, PartialEq, ::prost::Message)]
1350pub struct RtpMungerState {
1351    #[prost(uint64, tag="1")]
1352    pub ext_last_sequence_number: u64,
1353    #[prost(uint64, tag="2")]
1354    pub ext_second_last_sequence_number: u64,
1355    #[prost(uint64, tag="3")]
1356    pub ext_last_timestamp: u64,
1357    #[prost(uint64, tag="4")]
1358    pub ext_second_last_timestamp: u64,
1359    #[prost(bool, tag="5")]
1360    pub last_marker: bool,
1361    #[prost(bool, tag="6")]
1362    pub second_last_marker: bool,
1363}
1364#[allow(clippy::derive_partial_eq_without_eq)]
1365#[derive(Clone, PartialEq, ::prost::Message)]
1366pub struct Vp8MungerState {
1367    #[prost(int32, tag="1")]
1368    pub ext_last_picture_id: i32,
1369    #[prost(bool, tag="2")]
1370    pub picture_id_used: bool,
1371    #[prost(uint32, tag="3")]
1372    pub last_tl0_pic_idx: u32,
1373    #[prost(bool, tag="4")]
1374    pub tl0_pic_idx_used: bool,
1375    #[prost(bool, tag="5")]
1376    pub tid_used: bool,
1377    #[prost(uint32, tag="6")]
1378    pub last_key_idx: u32,
1379    #[prost(bool, tag="7")]
1380    pub key_idx_used: bool,
1381}
1382#[allow(clippy::derive_partial_eq_without_eq)]
1383#[derive(Clone, PartialEq, ::prost::Message)]
1384pub struct TimedVersion {
1385    #[prost(int64, tag="1")]
1386    pub unix_micro: i64,
1387    #[prost(int32, tag="2")]
1388    pub ticks: i32,
1389}
1390#[allow(clippy::derive_partial_eq_without_eq)]
1391#[derive(Clone, PartialEq, ::prost::Message)]
1392pub struct DataStream {
1393}
1394/// Nested message and enum types in `DataStream`.
1395pub mod data_stream {
1396    /// header properties specific to text streams
1397    #[allow(clippy::derive_partial_eq_without_eq)]
1398#[derive(Clone, PartialEq, ::prost::Message)]
1399    pub struct TextHeader {
1400        #[prost(enumeration="OperationType", tag="1")]
1401        pub operation_type: i32,
1402        /// Optional: Version for updates/edits
1403        #[prost(int32, tag="2")]
1404        pub version: i32,
1405        /// Optional: Reply to specific message
1406        #[prost(string, tag="3")]
1407        pub reply_to_stream_id: ::prost::alloc::string::String,
1408        /// file attachments for text streams
1409        #[prost(string, repeated, tag="4")]
1410        pub attached_stream_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1411        /// true if the text has been generated by an agent from a participant's audio transcription
1412        #[prost(bool, tag="5")]
1413        pub generated: bool,
1414    }
1415    /// header properties specific to byte or file streams
1416    #[allow(clippy::derive_partial_eq_without_eq)]
1417#[derive(Clone, PartialEq, ::prost::Message)]
1418    pub struct ByteHeader {
1419        #[prost(string, tag="1")]
1420        pub name: ::prost::alloc::string::String,
1421    }
1422    /// main DataStream.Header that contains a oneof for specific headers
1423    #[allow(clippy::derive_partial_eq_without_eq)]
1424#[derive(Clone, PartialEq, ::prost::Message)]
1425    pub struct Header {
1426        /// unique identifier for this data stream
1427        #[prost(string, tag="1")]
1428        pub stream_id: ::prost::alloc::string::String,
1429        /// using int64 for Unix timestamp
1430        #[prost(int64, tag="2")]
1431        pub timestamp: i64,
1432        #[prost(string, tag="3")]
1433        pub topic: ::prost::alloc::string::String,
1434        #[prost(string, tag="4")]
1435        pub mime_type: ::prost::alloc::string::String,
1436        /// only populated for finite streams, if it's a stream of unknown size this stays empty
1437        #[prost(uint64, optional, tag="5")]
1438        pub total_length: ::core::option::Option<u64>,
1439        ///   this is set on the DataPacket
1440        #[deprecated]
1441        #[prost(enumeration="super::encryption::Type", tag="7")]
1442        pub encryption_type: i32,
1443        /// user defined attributes map that can carry additional info
1444        #[prost(map="string, string", tag="8")]
1445        pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
1446        /// oneof to choose between specific header types
1447        #[prost(oneof="header::ContentHeader", tags="9, 10")]
1448        pub content_header: ::core::option::Option<header::ContentHeader>,
1449    }
1450    /// Nested message and enum types in `Header`.
1451    pub mod header {
1452        /// oneof to choose between specific header types
1453        #[allow(clippy::derive_partial_eq_without_eq)]
1454#[derive(Clone, PartialEq, ::prost::Oneof)]
1455        pub enum ContentHeader {
1456            #[prost(message, tag="9")]
1457            TextHeader(super::TextHeader),
1458            #[prost(message, tag="10")]
1459            ByteHeader(super::ByteHeader),
1460        }
1461    }
1462    #[allow(clippy::derive_partial_eq_without_eq)]
1463#[derive(Clone, PartialEq, ::prost::Message)]
1464    pub struct Chunk {
1465        /// unique identifier for this data stream to map it to the correct header
1466        #[prost(string, tag="1")]
1467        pub stream_id: ::prost::alloc::string::String,
1468        #[prost(uint64, tag="2")]
1469        pub chunk_index: u64,
1470        /// content as binary (bytes)
1471        #[prost(bytes="vec", tag="3")]
1472        pub content: ::prost::alloc::vec::Vec<u8>,
1473        /// a version indicating that this chunk_index has been retroactively modified and the original one needs to be replaced
1474        #[prost(int32, tag="4")]
1475        pub version: i32,
1476        /// this is set on the DataPacket
1477        #[deprecated]
1478        #[prost(bytes="vec", optional, tag="5")]
1479        pub iv: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1480    }
1481    #[allow(clippy::derive_partial_eq_without_eq)]
1482#[derive(Clone, PartialEq, ::prost::Message)]
1483    pub struct Trailer {
1484        /// unique identifier for this data stream
1485        #[prost(string, tag="1")]
1486        pub stream_id: ::prost::alloc::string::String,
1487        /// reason why the stream was closed (could contain "error" / "interrupted" / empty for expected end)
1488        #[prost(string, tag="2")]
1489        pub reason: ::prost::alloc::string::String,
1490        /// finalizing updates for the stream, can also include additional insights for errors or endTime for transcription
1491        #[prost(map="string, string", tag="3")]
1492        pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
1493    }
1494    /// enum for operation types (specific to TextHeader)
1495    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1496    #[repr(i32)]
1497    pub enum OperationType {
1498        Create = 0,
1499        Update = 1,
1500        Delete = 2,
1501        Reaction = 3,
1502    }
1503    impl OperationType {
1504        /// String value of the enum field names used in the ProtoBuf definition.
1505        ///
1506        /// The values are not transformed in any way and thus are considered stable
1507        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1508        pub fn as_str_name(&self) -> &'static str {
1509            match self {
1510                OperationType::Create => "CREATE",
1511                OperationType::Update => "UPDATE",
1512                OperationType::Delete => "DELETE",
1513                OperationType::Reaction => "REACTION",
1514            }
1515        }
1516        /// Creates an enum from field names used in the ProtoBuf definition.
1517        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1518            match value {
1519                "CREATE" => Some(Self::Create),
1520                "UPDATE" => Some(Self::Update),
1521                "DELETE" => Some(Self::Delete),
1522                "REACTION" => Some(Self::Reaction),
1523                _ => None,
1524            }
1525        }
1526    }
1527}
1528#[allow(clippy::derive_partial_eq_without_eq)]
1529#[derive(Clone, PartialEq, ::prost::Message)]
1530pub struct FilterParams {
1531    #[prost(string, repeated, tag="1")]
1532    pub include_events: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1533    #[prost(string, repeated, tag="2")]
1534    pub exclude_events: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1535}
1536#[allow(clippy::derive_partial_eq_without_eq)]
1537#[derive(Clone, PartialEq, ::prost::Message)]
1538pub struct WebhookConfig {
1539    #[prost(string, tag="1")]
1540    pub url: ::prost::alloc::string::String,
1541    #[prost(string, tag="2")]
1542    pub signing_key: ::prost::alloc::string::String,
1543    #[prost(message, optional, tag="3")]
1544    pub filter_params: ::core::option::Option<FilterParams>,
1545}
1546#[allow(clippy::derive_partial_eq_without_eq)]
1547#[derive(Clone, PartialEq, ::prost::Message)]
1548pub struct SubscribedAudioCodec {
1549    #[prost(string, tag="1")]
1550    pub codec: ::prost::alloc::string::String,
1551    #[prost(bool, tag="2")]
1552    pub enabled: bool,
1553}
1554#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1555#[repr(i32)]
1556pub enum AudioCodec {
1557    DefaultAc = 0,
1558    Opus = 1,
1559    Aac = 2,
1560    AcMp3 = 3,
1561}
1562impl AudioCodec {
1563    /// String value of the enum field names used in the ProtoBuf definition.
1564    ///
1565    /// The values are not transformed in any way and thus are considered stable
1566    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1567    pub fn as_str_name(&self) -> &'static str {
1568        match self {
1569            AudioCodec::DefaultAc => "DEFAULT_AC",
1570            AudioCodec::Opus => "OPUS",
1571            AudioCodec::Aac => "AAC",
1572            AudioCodec::AcMp3 => "AC_MP3",
1573        }
1574    }
1575    /// Creates an enum from field names used in the ProtoBuf definition.
1576    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1577        match value {
1578            "DEFAULT_AC" => Some(Self::DefaultAc),
1579            "OPUS" => Some(Self::Opus),
1580            "AAC" => Some(Self::Aac),
1581            "AC_MP3" => Some(Self::AcMp3),
1582            _ => None,
1583        }
1584    }
1585}
1586#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1587#[repr(i32)]
1588pub enum VideoCodec {
1589    DefaultVc = 0,
1590    H264Baseline = 1,
1591    H264Main = 2,
1592    H264High = 3,
1593    Vp8 = 4,
1594}
1595impl VideoCodec {
1596    /// String value of the enum field names used in the ProtoBuf definition.
1597    ///
1598    /// The values are not transformed in any way and thus are considered stable
1599    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1600    pub fn as_str_name(&self) -> &'static str {
1601        match self {
1602            VideoCodec::DefaultVc => "DEFAULT_VC",
1603            VideoCodec::H264Baseline => "H264_BASELINE",
1604            VideoCodec::H264Main => "H264_MAIN",
1605            VideoCodec::H264High => "H264_HIGH",
1606            VideoCodec::Vp8 => "VP8",
1607        }
1608    }
1609    /// Creates an enum from field names used in the ProtoBuf definition.
1610    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1611        match value {
1612            "DEFAULT_VC" => Some(Self::DefaultVc),
1613            "H264_BASELINE" => Some(Self::H264Baseline),
1614            "H264_MAIN" => Some(Self::H264Main),
1615            "H264_HIGH" => Some(Self::H264High),
1616            "VP8" => Some(Self::Vp8),
1617            _ => None,
1618        }
1619    }
1620}
1621#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1622#[repr(i32)]
1623pub enum ImageCodec {
1624    IcDefault = 0,
1625    IcJpeg = 1,
1626}
1627impl ImageCodec {
1628    /// String value of the enum field names used in the ProtoBuf definition.
1629    ///
1630    /// The values are not transformed in any way and thus are considered stable
1631    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1632    pub fn as_str_name(&self) -> &'static str {
1633        match self {
1634            ImageCodec::IcDefault => "IC_DEFAULT",
1635            ImageCodec::IcJpeg => "IC_JPEG",
1636        }
1637    }
1638    /// Creates an enum from field names used in the ProtoBuf definition.
1639    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1640        match value {
1641            "IC_DEFAULT" => Some(Self::IcDefault),
1642            "IC_JPEG" => Some(Self::IcJpeg),
1643            _ => None,
1644        }
1645    }
1646}
1647/// Policy for publisher to handle subscribers that are unable to support the primary codec of a track
1648#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1649#[repr(i32)]
1650pub enum BackupCodecPolicy {
1651    /// default behavior, the track prefer to regress to backup codec and all subscribers will receive the backup codec,
1652    /// the sfu will try to regress codec if possible but not assured.
1653    PreferRegression = 0,
1654    /// encoding/send the primary and backup codec simultaneously
1655    Simulcast = 1,
1656    /// force the track to regress to backup codec, this option can be used in video conference or the publisher has limited bandwidth/encoding power
1657    Regression = 2,
1658}
1659impl BackupCodecPolicy {
1660    /// String value of the enum field names used in the ProtoBuf definition.
1661    ///
1662    /// The values are not transformed in any way and thus are considered stable
1663    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1664    pub fn as_str_name(&self) -> &'static str {
1665        match self {
1666            BackupCodecPolicy::PreferRegression => "PREFER_REGRESSION",
1667            BackupCodecPolicy::Simulcast => "SIMULCAST",
1668            BackupCodecPolicy::Regression => "REGRESSION",
1669        }
1670    }
1671    /// Creates an enum from field names used in the ProtoBuf definition.
1672    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1673        match value {
1674            "PREFER_REGRESSION" => Some(Self::PreferRegression),
1675            "SIMULCAST" => Some(Self::Simulcast),
1676            "REGRESSION" => Some(Self::Regression),
1677            _ => None,
1678        }
1679    }
1680}
1681#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1682#[repr(i32)]
1683pub enum TrackType {
1684    Audio = 0,
1685    Video = 1,
1686    Data = 2,
1687}
1688impl TrackType {
1689    /// String value of the enum field names used in the ProtoBuf definition.
1690    ///
1691    /// The values are not transformed in any way and thus are considered stable
1692    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1693    pub fn as_str_name(&self) -> &'static str {
1694        match self {
1695            TrackType::Audio => "AUDIO",
1696            TrackType::Video => "VIDEO",
1697            TrackType::Data => "DATA",
1698        }
1699    }
1700    /// Creates an enum from field names used in the ProtoBuf definition.
1701    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1702        match value {
1703            "AUDIO" => Some(Self::Audio),
1704            "VIDEO" => Some(Self::Video),
1705            "DATA" => Some(Self::Data),
1706            _ => None,
1707        }
1708    }
1709}
1710#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1711#[repr(i32)]
1712pub enum TrackSource {
1713    Unknown = 0,
1714    Camera = 1,
1715    Microphone = 2,
1716    ScreenShare = 3,
1717    ScreenShareAudio = 4,
1718}
1719impl TrackSource {
1720    /// String value of the enum field names used in the ProtoBuf definition.
1721    ///
1722    /// The values are not transformed in any way and thus are considered stable
1723    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1724    pub fn as_str_name(&self) -> &'static str {
1725        match self {
1726            TrackSource::Unknown => "UNKNOWN",
1727            TrackSource::Camera => "CAMERA",
1728            TrackSource::Microphone => "MICROPHONE",
1729            TrackSource::ScreenShare => "SCREEN_SHARE",
1730            TrackSource::ScreenShareAudio => "SCREEN_SHARE_AUDIO",
1731        }
1732    }
1733    /// Creates an enum from field names used in the ProtoBuf definition.
1734    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1735        match value {
1736            "UNKNOWN" => Some(Self::Unknown),
1737            "CAMERA" => Some(Self::Camera),
1738            "MICROPHONE" => Some(Self::Microphone),
1739            "SCREEN_SHARE" => Some(Self::ScreenShare),
1740            "SCREEN_SHARE_AUDIO" => Some(Self::ScreenShareAudio),
1741            _ => None,
1742        }
1743    }
1744}
1745#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1746#[repr(i32)]
1747pub enum DataTrackExtensionId {
1748    DteiInvalid = 0,
1749    DteiParticipantSid = 1,
1750}
1751impl DataTrackExtensionId {
1752    /// String value of the enum field names used in the ProtoBuf definition.
1753    ///
1754    /// The values are not transformed in any way and thus are considered stable
1755    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1756    pub fn as_str_name(&self) -> &'static str {
1757        match self {
1758            DataTrackExtensionId::DteiInvalid => "DTEI_INVALID",
1759            DataTrackExtensionId::DteiParticipantSid => "DTEI_PARTICIPANT_SID",
1760        }
1761    }
1762    /// Creates an enum from field names used in the ProtoBuf definition.
1763    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1764        match value {
1765            "DTEI_INVALID" => Some(Self::DteiInvalid),
1766            "DTEI_PARTICIPANT_SID" => Some(Self::DteiParticipantSid),
1767            _ => None,
1768        }
1769    }
1770}
1771#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1772#[repr(i32)]
1773pub enum VideoQuality {
1774    Low = 0,
1775    Medium = 1,
1776    High = 2,
1777    Off = 3,
1778}
1779impl VideoQuality {
1780    /// String value of the enum field names used in the ProtoBuf definition.
1781    ///
1782    /// The values are not transformed in any way and thus are considered stable
1783    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1784    pub fn as_str_name(&self) -> &'static str {
1785        match self {
1786            VideoQuality::Low => "LOW",
1787            VideoQuality::Medium => "MEDIUM",
1788            VideoQuality::High => "HIGH",
1789            VideoQuality::Off => "OFF",
1790        }
1791    }
1792    /// Creates an enum from field names used in the ProtoBuf definition.
1793    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1794        match value {
1795            "LOW" => Some(Self::Low),
1796            "MEDIUM" => Some(Self::Medium),
1797            "HIGH" => Some(Self::High),
1798            "OFF" => Some(Self::Off),
1799            _ => None,
1800        }
1801    }
1802}
1803#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1804#[repr(i32)]
1805pub enum ConnectionQuality {
1806    Poor = 0,
1807    Good = 1,
1808    Excellent = 2,
1809    Lost = 3,
1810}
1811impl ConnectionQuality {
1812    /// String value of the enum field names used in the ProtoBuf definition.
1813    ///
1814    /// The values are not transformed in any way and thus are considered stable
1815    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1816    pub fn as_str_name(&self) -> &'static str {
1817        match self {
1818            ConnectionQuality::Poor => "POOR",
1819            ConnectionQuality::Good => "GOOD",
1820            ConnectionQuality::Excellent => "EXCELLENT",
1821            ConnectionQuality::Lost => "LOST",
1822        }
1823    }
1824    /// Creates an enum from field names used in the ProtoBuf definition.
1825    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1826        match value {
1827            "POOR" => Some(Self::Poor),
1828            "GOOD" => Some(Self::Good),
1829            "EXCELLENT" => Some(Self::Excellent),
1830            "LOST" => Some(Self::Lost),
1831            _ => None,
1832        }
1833    }
1834}
1835#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1836#[repr(i32)]
1837pub enum ClientConfigSetting {
1838    Unset = 0,
1839    Disabled = 1,
1840    Enabled = 2,
1841}
1842impl ClientConfigSetting {
1843    /// String value of the enum field names used in the ProtoBuf definition.
1844    ///
1845    /// The values are not transformed in any way and thus are considered stable
1846    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1847    pub fn as_str_name(&self) -> &'static str {
1848        match self {
1849            ClientConfigSetting::Unset => "UNSET",
1850            ClientConfigSetting::Disabled => "DISABLED",
1851            ClientConfigSetting::Enabled => "ENABLED",
1852        }
1853    }
1854    /// Creates an enum from field names used in the ProtoBuf definition.
1855    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1856        match value {
1857            "UNSET" => Some(Self::Unset),
1858            "DISABLED" => Some(Self::Disabled),
1859            "ENABLED" => Some(Self::Enabled),
1860            _ => None,
1861        }
1862    }
1863}
1864#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1865#[repr(i32)]
1866pub enum DisconnectReason {
1867    UnknownReason = 0,
1868    /// the client initiated the disconnect
1869    ClientInitiated = 1,
1870    /// another participant with the same identity has joined the room
1871    DuplicateIdentity = 2,
1872    /// the server instance is shutting down
1873    ServerShutdown = 3,
1874    /// RoomService.RemoveParticipant was called
1875    ParticipantRemoved = 4,
1876    /// RoomService.DeleteRoom was called
1877    RoomDeleted = 5,
1878    /// the client is attempting to resume a session, but server is not aware of it
1879    StateMismatch = 6,
1880    /// client was unable to connect fully
1881    JoinFailure = 7,
1882    /// Cloud-only, the server requested Participant to migrate the connection elsewhere
1883    Migration = 8,
1884    /// the signal websocket was closed unexpectedly
1885    SignalClose = 9,
1886    /// the room was closed, due to all Standard and Ingress participants having left
1887    RoomClosed = 10,
1888    /// SIP callee did not respond in time
1889    UserUnavailable = 11,
1890    /// SIP callee rejected the call (busy)
1891    UserRejected = 12,
1892    /// SIP protocol failure or unexpected response
1893    SipTrunkFailure = 13,
1894    /// server timed out a participant session
1895    ConnectionTimeout = 14,
1896    /// media stream failure or media timeout
1897    MediaFailure = 15,
1898    /// agent encountered an error
1899    AgentError = 16,
1900}
1901impl DisconnectReason {
1902    /// String value of the enum field names used in the ProtoBuf definition.
1903    ///
1904    /// The values are not transformed in any way and thus are considered stable
1905    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1906    pub fn as_str_name(&self) -> &'static str {
1907        match self {
1908            DisconnectReason::UnknownReason => "UNKNOWN_REASON",
1909            DisconnectReason::ClientInitiated => "CLIENT_INITIATED",
1910            DisconnectReason::DuplicateIdentity => "DUPLICATE_IDENTITY",
1911            DisconnectReason::ServerShutdown => "SERVER_SHUTDOWN",
1912            DisconnectReason::ParticipantRemoved => "PARTICIPANT_REMOVED",
1913            DisconnectReason::RoomDeleted => "ROOM_DELETED",
1914            DisconnectReason::StateMismatch => "STATE_MISMATCH",
1915            DisconnectReason::JoinFailure => "JOIN_FAILURE",
1916            DisconnectReason::Migration => "MIGRATION",
1917            DisconnectReason::SignalClose => "SIGNAL_CLOSE",
1918            DisconnectReason::RoomClosed => "ROOM_CLOSED",
1919            DisconnectReason::UserUnavailable => "USER_UNAVAILABLE",
1920            DisconnectReason::UserRejected => "USER_REJECTED",
1921            DisconnectReason::SipTrunkFailure => "SIP_TRUNK_FAILURE",
1922            DisconnectReason::ConnectionTimeout => "CONNECTION_TIMEOUT",
1923            DisconnectReason::MediaFailure => "MEDIA_FAILURE",
1924            DisconnectReason::AgentError => "AGENT_ERROR",
1925        }
1926    }
1927    /// Creates an enum from field names used in the ProtoBuf definition.
1928    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1929        match value {
1930            "UNKNOWN_REASON" => Some(Self::UnknownReason),
1931            "CLIENT_INITIATED" => Some(Self::ClientInitiated),
1932            "DUPLICATE_IDENTITY" => Some(Self::DuplicateIdentity),
1933            "SERVER_SHUTDOWN" => Some(Self::ServerShutdown),
1934            "PARTICIPANT_REMOVED" => Some(Self::ParticipantRemoved),
1935            "ROOM_DELETED" => Some(Self::RoomDeleted),
1936            "STATE_MISMATCH" => Some(Self::StateMismatch),
1937            "JOIN_FAILURE" => Some(Self::JoinFailure),
1938            "MIGRATION" => Some(Self::Migration),
1939            "SIGNAL_CLOSE" => Some(Self::SignalClose),
1940            "ROOM_CLOSED" => Some(Self::RoomClosed),
1941            "USER_UNAVAILABLE" => Some(Self::UserUnavailable),
1942            "USER_REJECTED" => Some(Self::UserRejected),
1943            "SIP_TRUNK_FAILURE" => Some(Self::SipTrunkFailure),
1944            "CONNECTION_TIMEOUT" => Some(Self::ConnectionTimeout),
1945            "MEDIA_FAILURE" => Some(Self::MediaFailure),
1946            "AGENT_ERROR" => Some(Self::AgentError),
1947            _ => None,
1948        }
1949    }
1950}
1951#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1952#[repr(i32)]
1953pub enum ReconnectReason {
1954    RrUnknown = 0,
1955    RrSignalDisconnected = 1,
1956    RrPublisherFailed = 2,
1957    RrSubscriberFailed = 3,
1958    RrSwitchCandidate = 4,
1959}
1960impl ReconnectReason {
1961    /// String value of the enum field names used in the ProtoBuf definition.
1962    ///
1963    /// The values are not transformed in any way and thus are considered stable
1964    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1965    pub fn as_str_name(&self) -> &'static str {
1966        match self {
1967            ReconnectReason::RrUnknown => "RR_UNKNOWN",
1968            ReconnectReason::RrSignalDisconnected => "RR_SIGNAL_DISCONNECTED",
1969            ReconnectReason::RrPublisherFailed => "RR_PUBLISHER_FAILED",
1970            ReconnectReason::RrSubscriberFailed => "RR_SUBSCRIBER_FAILED",
1971            ReconnectReason::RrSwitchCandidate => "RR_SWITCH_CANDIDATE",
1972        }
1973    }
1974    /// Creates an enum from field names used in the ProtoBuf definition.
1975    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1976        match value {
1977            "RR_UNKNOWN" => Some(Self::RrUnknown),
1978            "RR_SIGNAL_DISCONNECTED" => Some(Self::RrSignalDisconnected),
1979            "RR_PUBLISHER_FAILED" => Some(Self::RrPublisherFailed),
1980            "RR_SUBSCRIBER_FAILED" => Some(Self::RrSubscriberFailed),
1981            "RR_SWITCH_CANDIDATE" => Some(Self::RrSwitchCandidate),
1982            _ => None,
1983        }
1984    }
1985}
1986#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1987#[repr(i32)]
1988pub enum SubscriptionError {
1989    SeUnknown = 0,
1990    SeCodecUnsupported = 1,
1991    SeTrackNotfound = 2,
1992}
1993impl SubscriptionError {
1994    /// String value of the enum field names used in the ProtoBuf definition.
1995    ///
1996    /// The values are not transformed in any way and thus are considered stable
1997    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1998    pub fn as_str_name(&self) -> &'static str {
1999        match self {
2000            SubscriptionError::SeUnknown => "SE_UNKNOWN",
2001            SubscriptionError::SeCodecUnsupported => "SE_CODEC_UNSUPPORTED",
2002            SubscriptionError::SeTrackNotfound => "SE_TRACK_NOTFOUND",
2003        }
2004    }
2005    /// Creates an enum from field names used in the ProtoBuf definition.
2006    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2007        match value {
2008            "SE_UNKNOWN" => Some(Self::SeUnknown),
2009            "SE_CODEC_UNSUPPORTED" => Some(Self::SeCodecUnsupported),
2010            "SE_TRACK_NOTFOUND" => Some(Self::SeTrackNotfound),
2011            _ => None,
2012        }
2013    }
2014}
2015#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2016#[repr(i32)]
2017pub enum AudioTrackFeature {
2018    TfStereo = 0,
2019    TfNoDtx = 1,
2020    TfAutoGainControl = 2,
2021    TfEchoCancellation = 3,
2022    TfNoiseSuppression = 4,
2023    TfEnhancedNoiseCancellation = 5,
2024    /// client will buffer audio once available and send it to the server via bytes stream once connected
2025    TfPreconnectBuffer = 6,
2026}
2027impl AudioTrackFeature {
2028    /// String value of the enum field names used in the ProtoBuf definition.
2029    ///
2030    /// The values are not transformed in any way and thus are considered stable
2031    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2032    pub fn as_str_name(&self) -> &'static str {
2033        match self {
2034            AudioTrackFeature::TfStereo => "TF_STEREO",
2035            AudioTrackFeature::TfNoDtx => "TF_NO_DTX",
2036            AudioTrackFeature::TfAutoGainControl => "TF_AUTO_GAIN_CONTROL",
2037            AudioTrackFeature::TfEchoCancellation => "TF_ECHO_CANCELLATION",
2038            AudioTrackFeature::TfNoiseSuppression => "TF_NOISE_SUPPRESSION",
2039            AudioTrackFeature::TfEnhancedNoiseCancellation => "TF_ENHANCED_NOISE_CANCELLATION",
2040            AudioTrackFeature::TfPreconnectBuffer => "TF_PRECONNECT_BUFFER",
2041        }
2042    }
2043    /// Creates an enum from field names used in the ProtoBuf definition.
2044    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2045        match value {
2046            "TF_STEREO" => Some(Self::TfStereo),
2047            "TF_NO_DTX" => Some(Self::TfNoDtx),
2048            "TF_AUTO_GAIN_CONTROL" => Some(Self::TfAutoGainControl),
2049            "TF_ECHO_CANCELLATION" => Some(Self::TfEchoCancellation),
2050            "TF_NOISE_SUPPRESSION" => Some(Self::TfNoiseSuppression),
2051            "TF_ENHANCED_NOISE_CANCELLATION" => Some(Self::TfEnhancedNoiseCancellation),
2052            "TF_PRECONNECT_BUFFER" => Some(Self::TfPreconnectBuffer),
2053            _ => None,
2054        }
2055    }
2056}
2057#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2058#[repr(i32)]
2059pub enum PacketTrailerFeature {
2060    PtfUserTimestamp = 0,
2061}
2062impl PacketTrailerFeature {
2063    /// String value of the enum field names used in the ProtoBuf definition.
2064    ///
2065    /// The values are not transformed in any way and thus are considered stable
2066    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2067    pub fn as_str_name(&self) -> &'static str {
2068        match self {
2069            PacketTrailerFeature::PtfUserTimestamp => "PTF_USER_TIMESTAMP",
2070        }
2071    }
2072    /// Creates an enum from field names used in the ProtoBuf definition.
2073    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2074        match value {
2075            "PTF_USER_TIMESTAMP" => Some(Self::PtfUserTimestamp),
2076            _ => None,
2077        }
2078    }
2079}
2080/// composite using a web browser
2081#[allow(clippy::derive_partial_eq_without_eq)]
2082#[derive(Clone, PartialEq, ::prost::Message)]
2083pub struct RoomCompositeEgressRequest {
2084    /// required
2085    #[prost(string, tag="1")]
2086    pub room_name: ::prost::alloc::string::String,
2087    /// (optional)
2088    #[prost(string, tag="2")]
2089    pub layout: ::prost::alloc::string::String,
2090    /// (default false)
2091    #[prost(bool, tag="3")]
2092    pub audio_only: bool,
2093    /// only applies to audio_only egress (default DEFAULT_MIXING)
2094    #[prost(enumeration="AudioMixing", tag="15")]
2095    pub audio_mixing: i32,
2096    /// (default false)
2097    #[prost(bool, tag="4")]
2098    pub video_only: bool,
2099    /// template base url (default <https://recorder.livekit.io>)
2100    #[prost(string, tag="5")]
2101    pub custom_base_url: ::prost::alloc::string::String,
2102    #[prost(message, repeated, tag="11")]
2103    pub file_outputs: ::prost::alloc::vec::Vec<EncodedFileOutput>,
2104    #[prost(message, repeated, tag="12")]
2105    pub stream_outputs: ::prost::alloc::vec::Vec<StreamOutput>,
2106    #[prost(message, repeated, tag="13")]
2107    pub segment_outputs: ::prost::alloc::vec::Vec<SegmentedFileOutput>,
2108    #[prost(message, repeated, tag="14")]
2109    pub image_outputs: ::prost::alloc::vec::Vec<ImageOutput>,
2110    /// extra webhooks to call for this request
2111    #[prost(message, repeated, tag="16")]
2112    pub webhooks: ::prost::alloc::vec::Vec<WebhookConfig>,
2113    /// deprecated (use _output fields)
2114    #[prost(oneof="room_composite_egress_request::Output", tags="6, 7, 10")]
2115    pub output: ::core::option::Option<room_composite_egress_request::Output>,
2116    #[prost(oneof="room_composite_egress_request::Options", tags="8, 9")]
2117    pub options: ::core::option::Option<room_composite_egress_request::Options>,
2118}
2119/// Nested message and enum types in `RoomCompositeEgressRequest`.
2120pub mod room_composite_egress_request {
2121    /// deprecated (use _output fields)
2122    #[allow(clippy::derive_partial_eq_without_eq)]
2123#[derive(Clone, PartialEq, ::prost::Oneof)]
2124    pub enum Output {
2125        #[prost(message, tag="6")]
2126        File(super::EncodedFileOutput),
2127        #[prost(message, tag="7")]
2128        Stream(super::StreamOutput),
2129        #[prost(message, tag="10")]
2130        Segments(super::SegmentedFileOutput),
2131    }
2132    #[allow(clippy::derive_partial_eq_without_eq)]
2133#[derive(Clone, PartialEq, ::prost::Oneof)]
2134    pub enum Options {
2135        /// (default H264_720P_30)
2136        #[prost(enumeration="super::EncodingOptionsPreset", tag="8")]
2137        Preset(i32),
2138        /// (optional)
2139        #[prost(message, tag="9")]
2140        Advanced(super::EncodingOptions),
2141    }
2142}
2143/// record any website
2144#[allow(clippy::derive_partial_eq_without_eq)]
2145#[derive(Clone, PartialEq, ::prost::Message)]
2146pub struct WebEgressRequest {
2147    #[prost(string, tag="1")]
2148    pub url: ::prost::alloc::string::String,
2149    #[prost(bool, tag="2")]
2150    pub audio_only: bool,
2151    #[prost(bool, tag="3")]
2152    pub video_only: bool,
2153    #[prost(bool, tag="12")]
2154    pub await_start_signal: bool,
2155    #[prost(message, repeated, tag="9")]
2156    pub file_outputs: ::prost::alloc::vec::Vec<EncodedFileOutput>,
2157    #[prost(message, repeated, tag="10")]
2158    pub stream_outputs: ::prost::alloc::vec::Vec<StreamOutput>,
2159    #[prost(message, repeated, tag="11")]
2160    pub segment_outputs: ::prost::alloc::vec::Vec<SegmentedFileOutput>,
2161    #[prost(message, repeated, tag="13")]
2162    pub image_outputs: ::prost::alloc::vec::Vec<ImageOutput>,
2163    /// extra webhooks to call for this request
2164    #[prost(message, repeated, tag="14")]
2165    pub webhooks: ::prost::alloc::vec::Vec<WebhookConfig>,
2166    /// deprecated (use _output fields)
2167    #[prost(oneof="web_egress_request::Output", tags="4, 5, 6")]
2168    pub output: ::core::option::Option<web_egress_request::Output>,
2169    #[prost(oneof="web_egress_request::Options", tags="7, 8")]
2170    pub options: ::core::option::Option<web_egress_request::Options>,
2171}
2172/// Nested message and enum types in `WebEgressRequest`.
2173pub mod web_egress_request {
2174    /// deprecated (use _output fields)
2175    #[allow(clippy::derive_partial_eq_without_eq)]
2176#[derive(Clone, PartialEq, ::prost::Oneof)]
2177    pub enum Output {
2178        #[prost(message, tag="4")]
2179        File(super::EncodedFileOutput),
2180        #[prost(message, tag="5")]
2181        Stream(super::StreamOutput),
2182        #[prost(message, tag="6")]
2183        Segments(super::SegmentedFileOutput),
2184    }
2185    #[allow(clippy::derive_partial_eq_without_eq)]
2186#[derive(Clone, PartialEq, ::prost::Oneof)]
2187    pub enum Options {
2188        #[prost(enumeration="super::EncodingOptionsPreset", tag="7")]
2189        Preset(i32),
2190        #[prost(message, tag="8")]
2191        Advanced(super::EncodingOptions),
2192    }
2193}
2194/// record audio and video from a single participant
2195#[allow(clippy::derive_partial_eq_without_eq)]
2196#[derive(Clone, PartialEq, ::prost::Message)]
2197pub struct ParticipantEgressRequest {
2198    /// required
2199    #[prost(string, tag="1")]
2200    pub room_name: ::prost::alloc::string::String,
2201    /// required
2202    #[prost(string, tag="2")]
2203    pub identity: ::prost::alloc::string::String,
2204    /// (default false)
2205    #[prost(bool, tag="3")]
2206    pub screen_share: bool,
2207    #[prost(message, repeated, tag="6")]
2208    pub file_outputs: ::prost::alloc::vec::Vec<EncodedFileOutput>,
2209    #[prost(message, repeated, tag="7")]
2210    pub stream_outputs: ::prost::alloc::vec::Vec<StreamOutput>,
2211    #[prost(message, repeated, tag="8")]
2212    pub segment_outputs: ::prost::alloc::vec::Vec<SegmentedFileOutput>,
2213    #[prost(message, repeated, tag="9")]
2214    pub image_outputs: ::prost::alloc::vec::Vec<ImageOutput>,
2215    /// extra webhooks to call for this request
2216    #[prost(message, repeated, tag="10")]
2217    pub webhooks: ::prost::alloc::vec::Vec<WebhookConfig>,
2218    #[prost(oneof="participant_egress_request::Options", tags="4, 5")]
2219    pub options: ::core::option::Option<participant_egress_request::Options>,
2220}
2221/// Nested message and enum types in `ParticipantEgressRequest`.
2222pub mod participant_egress_request {
2223    #[allow(clippy::derive_partial_eq_without_eq)]
2224#[derive(Clone, PartialEq, ::prost::Oneof)]
2225    pub enum Options {
2226        /// (default H264_720P_30)
2227        #[prost(enumeration="super::EncodingOptionsPreset", tag="4")]
2228        Preset(i32),
2229        /// (optional)
2230        #[prost(message, tag="5")]
2231        Advanced(super::EncodingOptions),
2232    }
2233}
2234/// containerize up to one audio and one video track
2235#[allow(clippy::derive_partial_eq_without_eq)]
2236#[derive(Clone, PartialEq, ::prost::Message)]
2237pub struct TrackCompositeEgressRequest {
2238    /// required
2239    #[prost(string, tag="1")]
2240    pub room_name: ::prost::alloc::string::String,
2241    /// (optional)
2242    #[prost(string, tag="2")]
2243    pub audio_track_id: ::prost::alloc::string::String,
2244    /// (optional)
2245    #[prost(string, tag="3")]
2246    pub video_track_id: ::prost::alloc::string::String,
2247    #[prost(message, repeated, tag="11")]
2248    pub file_outputs: ::prost::alloc::vec::Vec<EncodedFileOutput>,
2249    #[prost(message, repeated, tag="12")]
2250    pub stream_outputs: ::prost::alloc::vec::Vec<StreamOutput>,
2251    #[prost(message, repeated, tag="13")]
2252    pub segment_outputs: ::prost::alloc::vec::Vec<SegmentedFileOutput>,
2253    #[prost(message, repeated, tag="14")]
2254    pub image_outputs: ::prost::alloc::vec::Vec<ImageOutput>,
2255    /// extra webhooks to call for this request
2256    #[prost(message, repeated, tag="15")]
2257    pub webhooks: ::prost::alloc::vec::Vec<WebhookConfig>,
2258    /// deprecated (use _output fields)
2259    #[prost(oneof="track_composite_egress_request::Output", tags="4, 5, 8")]
2260    pub output: ::core::option::Option<track_composite_egress_request::Output>,
2261    #[prost(oneof="track_composite_egress_request::Options", tags="6, 7")]
2262    pub options: ::core::option::Option<track_composite_egress_request::Options>,
2263}
2264/// Nested message and enum types in `TrackCompositeEgressRequest`.
2265pub mod track_composite_egress_request {
2266    /// deprecated (use _output fields)
2267    #[allow(clippy::derive_partial_eq_without_eq)]
2268#[derive(Clone, PartialEq, ::prost::Oneof)]
2269    pub enum Output {
2270        #[prost(message, tag="4")]
2271        File(super::EncodedFileOutput),
2272        #[prost(message, tag="5")]
2273        Stream(super::StreamOutput),
2274        #[prost(message, tag="8")]
2275        Segments(super::SegmentedFileOutput),
2276    }
2277    #[allow(clippy::derive_partial_eq_without_eq)]
2278#[derive(Clone, PartialEq, ::prost::Oneof)]
2279    pub enum Options {
2280        /// (default H264_720P_30)
2281        #[prost(enumeration="super::EncodingOptionsPreset", tag="6")]
2282        Preset(i32),
2283        /// (optional)
2284        #[prost(message, tag="7")]
2285        Advanced(super::EncodingOptions),
2286    }
2287}
2288/// record tracks individually, without transcoding
2289#[allow(clippy::derive_partial_eq_without_eq)]
2290#[derive(Clone, PartialEq, ::prost::Message)]
2291pub struct TrackEgressRequest {
2292    /// required
2293    #[prost(string, tag="1")]
2294    pub room_name: ::prost::alloc::string::String,
2295    /// required
2296    #[prost(string, tag="2")]
2297    pub track_id: ::prost::alloc::string::String,
2298    /// extra webhooks to call for this request
2299    #[prost(message, repeated, tag="5")]
2300    pub webhooks: ::prost::alloc::vec::Vec<WebhookConfig>,
2301    /// required
2302    #[prost(oneof="track_egress_request::Output", tags="3, 4")]
2303    pub output: ::core::option::Option<track_egress_request::Output>,
2304}
2305/// Nested message and enum types in `TrackEgressRequest`.
2306pub mod track_egress_request {
2307    /// required
2308    #[allow(clippy::derive_partial_eq_without_eq)]
2309#[derive(Clone, PartialEq, ::prost::Oneof)]
2310    pub enum Output {
2311        #[prost(message, tag="3")]
2312        File(super::DirectFileOutput),
2313        #[prost(string, tag="4")]
2314        WebsocketUrl(::prost::alloc::string::String),
2315    }
2316}
2317#[allow(clippy::derive_partial_eq_without_eq)]
2318#[derive(Clone, PartialEq, ::prost::Message)]
2319pub struct EncodedFileOutput {
2320    /// (optional)
2321    #[prost(enumeration="EncodedFileType", tag="1")]
2322    pub file_type: i32,
2323    /// see egress docs for templating (default {room_name}-{time})
2324    #[prost(string, tag="2")]
2325    pub filepath: ::prost::alloc::string::String,
2326    /// disable upload of manifest file (default false)
2327    #[prost(bool, tag="6")]
2328    pub disable_manifest: bool,
2329    #[prost(oneof="encoded_file_output::Output", tags="3, 4, 5, 7")]
2330    pub output: ::core::option::Option<encoded_file_output::Output>,
2331}
2332/// Nested message and enum types in `EncodedFileOutput`.
2333pub mod encoded_file_output {
2334    #[allow(clippy::derive_partial_eq_without_eq)]
2335#[derive(Clone, PartialEq, ::prost::Oneof)]
2336    pub enum Output {
2337        #[prost(message, tag="3")]
2338        S3(super::S3Upload),
2339        #[prost(message, tag="4")]
2340        Gcp(super::GcpUpload),
2341        #[prost(message, tag="5")]
2342        Azure(super::AzureBlobUpload),
2343        #[prost(message, tag="7")]
2344        AliOss(super::AliOssUpload),
2345    }
2346}
2347/// Used to generate HLS segments or other kind of segmented output
2348#[allow(clippy::derive_partial_eq_without_eq)]
2349#[derive(Clone, PartialEq, ::prost::Message)]
2350pub struct SegmentedFileOutput {
2351    /// (optional)
2352    #[prost(enumeration="SegmentedFileProtocol", tag="1")]
2353    pub protocol: i32,
2354    /// (optional)
2355    #[prost(string, tag="2")]
2356    pub filename_prefix: ::prost::alloc::string::String,
2357    /// (optional)
2358    #[prost(string, tag="3")]
2359    pub playlist_name: ::prost::alloc::string::String,
2360    /// (optional, disabled if not provided). Path of a live playlist
2361    #[prost(string, tag="11")]
2362    pub live_playlist_name: ::prost::alloc::string::String,
2363    /// in seconds (optional)
2364    #[prost(uint32, tag="4")]
2365    pub segment_duration: u32,
2366    /// (optional, default INDEX)
2367    #[prost(enumeration="SegmentedFileSuffix", tag="10")]
2368    pub filename_suffix: i32,
2369    /// disable upload of manifest file (default false)
2370    #[prost(bool, tag="8")]
2371    pub disable_manifest: bool,
2372    /// required
2373    #[prost(oneof="segmented_file_output::Output", tags="5, 6, 7, 9")]
2374    pub output: ::core::option::Option<segmented_file_output::Output>,
2375}
2376/// Nested message and enum types in `SegmentedFileOutput`.
2377pub mod segmented_file_output {
2378    /// required
2379    #[allow(clippy::derive_partial_eq_without_eq)]
2380#[derive(Clone, PartialEq, ::prost::Oneof)]
2381    pub enum Output {
2382        #[prost(message, tag="5")]
2383        S3(super::S3Upload),
2384        #[prost(message, tag="6")]
2385        Gcp(super::GcpUpload),
2386        #[prost(message, tag="7")]
2387        Azure(super::AzureBlobUpload),
2388        #[prost(message, tag="9")]
2389        AliOss(super::AliOssUpload),
2390    }
2391}
2392#[allow(clippy::derive_partial_eq_without_eq)]
2393#[derive(Clone, PartialEq, ::prost::Message)]
2394pub struct DirectFileOutput {
2395    /// see egress docs for templating (default {track_id}-{time})
2396    #[prost(string, tag="1")]
2397    pub filepath: ::prost::alloc::string::String,
2398    /// disable upload of manifest file (default false)
2399    #[prost(bool, tag="5")]
2400    pub disable_manifest: bool,
2401    #[prost(oneof="direct_file_output::Output", tags="2, 3, 4, 6")]
2402    pub output: ::core::option::Option<direct_file_output::Output>,
2403}
2404/// Nested message and enum types in `DirectFileOutput`.
2405pub mod direct_file_output {
2406    #[allow(clippy::derive_partial_eq_without_eq)]
2407#[derive(Clone, PartialEq, ::prost::Oneof)]
2408    pub enum Output {
2409        #[prost(message, tag="2")]
2410        S3(super::S3Upload),
2411        #[prost(message, tag="3")]
2412        Gcp(super::GcpUpload),
2413        #[prost(message, tag="4")]
2414        Azure(super::AzureBlobUpload),
2415        #[prost(message, tag="6")]
2416        AliOss(super::AliOssUpload),
2417    }
2418}
2419#[allow(clippy::derive_partial_eq_without_eq)]
2420#[derive(Clone, PartialEq, ::prost::Message)]
2421pub struct ImageOutput {
2422    /// in seconds (required)
2423    #[prost(uint32, tag="1")]
2424    pub capture_interval: u32,
2425    /// (optional, defaults to track width)
2426    #[prost(int32, tag="2")]
2427    pub width: i32,
2428    /// (optional, defaults to track height)
2429    #[prost(int32, tag="3")]
2430    pub height: i32,
2431    /// (optional)
2432    #[prost(string, tag="4")]
2433    pub filename_prefix: ::prost::alloc::string::String,
2434    /// (optional, default INDEX)
2435    #[prost(enumeration="ImageFileSuffix", tag="5")]
2436    pub filename_suffix: i32,
2437    /// (optional)
2438    #[prost(enumeration="ImageCodec", tag="6")]
2439    pub image_codec: i32,
2440    /// disable upload of manifest file (default false)
2441    #[prost(bool, tag="7")]
2442    pub disable_manifest: bool,
2443    /// required
2444    #[prost(oneof="image_output::Output", tags="8, 9, 10, 11")]
2445    pub output: ::core::option::Option<image_output::Output>,
2446}
2447/// Nested message and enum types in `ImageOutput`.
2448pub mod image_output {
2449    /// required
2450    #[allow(clippy::derive_partial_eq_without_eq)]
2451#[derive(Clone, PartialEq, ::prost::Oneof)]
2452    pub enum Output {
2453        #[prost(message, tag="8")]
2454        S3(super::S3Upload),
2455        #[prost(message, tag="9")]
2456        Gcp(super::GcpUpload),
2457        #[prost(message, tag="10")]
2458        Azure(super::AzureBlobUpload),
2459        #[prost(message, tag="11")]
2460        AliOss(super::AliOssUpload),
2461    }
2462}
2463#[allow(clippy::derive_partial_eq_without_eq)]
2464#[derive(Clone, PartialEq, ::prost::Message)]
2465pub struct S3Upload {
2466    #[prost(string, tag="1")]
2467    pub access_key: ::prost::alloc::string::String,
2468    #[prost(string, tag="2")]
2469    pub secret: ::prost::alloc::string::String,
2470    #[prost(string, tag="11")]
2471    pub session_token: ::prost::alloc::string::String,
2472    /// ARN of the role to assume for file upload. Egress will make an AssumeRole API call using the provided access_key and secret to assume that role. On LiveKit cloud, this is only available on accounts that have the feature enabled
2473    #[prost(string, tag="12")]
2474    pub assume_role_arn: ::prost::alloc::string::String,
2475    /// ExternalID to use when assuming role for upload
2476    #[prost(string, tag="13")]
2477    pub assume_role_external_id: ::prost::alloc::string::String,
2478    #[prost(string, tag="3")]
2479    pub region: ::prost::alloc::string::String,
2480    #[prost(string, tag="4")]
2481    pub endpoint: ::prost::alloc::string::String,
2482    #[prost(string, tag="5")]
2483    pub bucket: ::prost::alloc::string::String,
2484    #[prost(bool, tag="6")]
2485    pub force_path_style: bool,
2486    #[prost(map="string, string", tag="7")]
2487    pub metadata: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
2488    #[prost(string, tag="8")]
2489    pub tagging: ::prost::alloc::string::String,
2490    /// Content-Disposition header
2491    #[prost(string, tag="9")]
2492    pub content_disposition: ::prost::alloc::string::String,
2493    #[prost(message, optional, tag="10")]
2494    pub proxy: ::core::option::Option<ProxyConfig>,
2495}
2496#[allow(clippy::derive_partial_eq_without_eq)]
2497#[derive(Clone, PartialEq, ::prost::Message)]
2498pub struct GcpUpload {
2499    /// service account credentials serialized in JSON "credentials.json"
2500    #[prost(string, tag="1")]
2501    pub credentials: ::prost::alloc::string::String,
2502    #[prost(string, tag="2")]
2503    pub bucket: ::prost::alloc::string::String,
2504    #[prost(message, optional, tag="3")]
2505    pub proxy: ::core::option::Option<ProxyConfig>,
2506}
2507#[allow(clippy::derive_partial_eq_without_eq)]
2508#[derive(Clone, PartialEq, ::prost::Message)]
2509pub struct AzureBlobUpload {
2510    #[prost(string, tag="1")]
2511    pub account_name: ::prost::alloc::string::String,
2512    #[prost(string, tag="2")]
2513    pub account_key: ::prost::alloc::string::String,
2514    #[prost(string, tag="3")]
2515    pub container_name: ::prost::alloc::string::String,
2516}
2517#[allow(clippy::derive_partial_eq_without_eq)]
2518#[derive(Clone, PartialEq, ::prost::Message)]
2519pub struct AliOssUpload {
2520    #[prost(string, tag="1")]
2521    pub access_key: ::prost::alloc::string::String,
2522    #[prost(string, tag="2")]
2523    pub secret: ::prost::alloc::string::String,
2524    #[prost(string, tag="3")]
2525    pub region: ::prost::alloc::string::String,
2526    #[prost(string, tag="4")]
2527    pub endpoint: ::prost::alloc::string::String,
2528    #[prost(string, tag="5")]
2529    pub bucket: ::prost::alloc::string::String,
2530}
2531#[allow(clippy::derive_partial_eq_without_eq)]
2532#[derive(Clone, PartialEq, ::prost::Message)]
2533pub struct ProxyConfig {
2534    #[prost(string, tag="1")]
2535    pub url: ::prost::alloc::string::String,
2536    #[prost(string, tag="2")]
2537    pub username: ::prost::alloc::string::String,
2538    #[prost(string, tag="3")]
2539    pub password: ::prost::alloc::string::String,
2540}
2541#[allow(clippy::derive_partial_eq_without_eq)]
2542#[derive(Clone, PartialEq, ::prost::Message)]
2543pub struct StreamOutput {
2544    /// required
2545    #[prost(enumeration="StreamProtocol", tag="1")]
2546    pub protocol: i32,
2547    /// required
2548    #[prost(string, repeated, tag="2")]
2549    pub urls: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2550}
2551#[allow(clippy::derive_partial_eq_without_eq)]
2552#[derive(Clone, PartialEq, ::prost::Message)]
2553pub struct EncodingOptions {
2554    /// (default 1920)
2555    #[prost(int32, tag="1")]
2556    pub width: i32,
2557    /// (default 1080)
2558    #[prost(int32, tag="2")]
2559    pub height: i32,
2560    /// (default 24)
2561    #[prost(int32, tag="3")]
2562    pub depth: i32,
2563    /// (default 30)
2564    #[prost(int32, tag="4")]
2565    pub framerate: i32,
2566    /// (default OPUS)
2567    #[prost(enumeration="AudioCodec", tag="5")]
2568    pub audio_codec: i32,
2569    /// (default 128)
2570    #[prost(int32, tag="6")]
2571    pub audio_bitrate: i32,
2572    /// quality setting on audio encoder
2573    #[prost(int32, tag="11")]
2574    pub audio_quality: i32,
2575    /// (default 44100)
2576    #[prost(int32, tag="7")]
2577    pub audio_frequency: i32,
2578    /// (default H264_MAIN)
2579    #[prost(enumeration="VideoCodec", tag="8")]
2580    pub video_codec: i32,
2581    /// (default 4500)
2582    #[prost(int32, tag="9")]
2583    pub video_bitrate: i32,
2584    /// quality setting on video encoder
2585    #[prost(int32, tag="12")]
2586    pub video_quality: i32,
2587    /// in seconds (default 4s for streaming, segment duration for segmented output, encoder default for files)
2588    #[prost(double, tag="10")]
2589    pub key_frame_interval: f64,
2590}
2591#[allow(clippy::derive_partial_eq_without_eq)]
2592#[derive(Clone, PartialEq, ::prost::Message)]
2593pub struct UpdateLayoutRequest {
2594    #[prost(string, tag="1")]
2595    pub egress_id: ::prost::alloc::string::String,
2596    #[prost(string, tag="2")]
2597    pub layout: ::prost::alloc::string::String,
2598}
2599#[allow(clippy::derive_partial_eq_without_eq)]
2600#[derive(Clone, PartialEq, ::prost::Message)]
2601pub struct UpdateStreamRequest {
2602    #[prost(string, tag="1")]
2603    pub egress_id: ::prost::alloc::string::String,
2604    #[prost(string, repeated, tag="2")]
2605    pub add_output_urls: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2606    #[prost(string, repeated, tag="3")]
2607    pub remove_output_urls: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2608}
2609#[allow(clippy::derive_partial_eq_without_eq)]
2610#[derive(Clone, PartialEq, ::prost::Message)]
2611pub struct ListEgressRequest {
2612    /// (optional, filter by room name)
2613    #[prost(string, tag="1")]
2614    pub room_name: ::prost::alloc::string::String,
2615    /// (optional, filter by egress ID)
2616    #[prost(string, tag="2")]
2617    pub egress_id: ::prost::alloc::string::String,
2618    /// (optional, list active egress only)
2619    #[prost(bool, tag="3")]
2620    pub active: bool,
2621}
2622#[allow(clippy::derive_partial_eq_without_eq)]
2623#[derive(Clone, PartialEq, ::prost::Message)]
2624pub struct ListEgressResponse {
2625    #[prost(message, repeated, tag="1")]
2626    pub items: ::prost::alloc::vec::Vec<EgressInfo>,
2627}
2628#[allow(clippy::derive_partial_eq_without_eq)]
2629#[derive(Clone, PartialEq, ::prost::Message)]
2630pub struct StopEgressRequest {
2631    #[prost(string, tag="1")]
2632    pub egress_id: ::prost::alloc::string::String,
2633}
2634#[allow(clippy::derive_partial_eq_without_eq)]
2635#[derive(Clone, PartialEq, ::prost::Message)]
2636pub struct EgressInfo {
2637    #[prost(string, tag="1")]
2638    pub egress_id: ::prost::alloc::string::String,
2639    #[prost(string, tag="2")]
2640    pub room_id: ::prost::alloc::string::String,
2641    #[prost(string, tag="13")]
2642    pub room_name: ::prost::alloc::string::String,
2643    #[prost(enumeration="EgressSourceType", tag="26")]
2644    pub source_type: i32,
2645    #[prost(enumeration="EgressStatus", tag="3")]
2646    pub status: i32,
2647    #[prost(int64, tag="10")]
2648    pub started_at: i64,
2649    #[prost(int64, tag="11")]
2650    pub ended_at: i64,
2651    #[prost(int64, tag="18")]
2652    pub updated_at: i64,
2653    #[prost(string, tag="21")]
2654    pub details: ::prost::alloc::string::String,
2655    #[prost(string, tag="9")]
2656    pub error: ::prost::alloc::string::String,
2657    #[prost(int32, tag="22")]
2658    pub error_code: i32,
2659    #[prost(message, repeated, tag="15")]
2660    pub stream_results: ::prost::alloc::vec::Vec<StreamInfo>,
2661    #[prost(message, repeated, tag="16")]
2662    pub file_results: ::prost::alloc::vec::Vec<FileInfo>,
2663    #[prost(message, repeated, tag="17")]
2664    pub segment_results: ::prost::alloc::vec::Vec<SegmentsInfo>,
2665    #[prost(message, repeated, tag="20")]
2666    pub image_results: ::prost::alloc::vec::Vec<ImagesInfo>,
2667    #[prost(string, tag="23")]
2668    pub manifest_location: ::prost::alloc::string::String,
2669    #[prost(bool, tag="25")]
2670    pub backup_storage_used: bool,
2671    /// next ID: 28
2672    #[prost(int32, tag="27")]
2673    pub retry_count: i32,
2674    #[prost(oneof="egress_info::Request", tags="4, 14, 19, 5, 6")]
2675    pub request: ::core::option::Option<egress_info::Request>,
2676    /// deprecated (use _result fields)
2677    #[prost(oneof="egress_info::Result", tags="7, 8, 12")]
2678    pub result: ::core::option::Option<egress_info::Result>,
2679}
2680/// Nested message and enum types in `EgressInfo`.
2681pub mod egress_info {
2682    #[allow(clippy::derive_partial_eq_without_eq)]
2683#[derive(Clone, PartialEq, ::prost::Oneof)]
2684    pub enum Request {
2685        #[prost(message, tag="4")]
2686        RoomComposite(super::RoomCompositeEgressRequest),
2687        #[prost(message, tag="14")]
2688        Web(super::WebEgressRequest),
2689        #[prost(message, tag="19")]
2690        Participant(super::ParticipantEgressRequest),
2691        #[prost(message, tag="5")]
2692        TrackComposite(super::TrackCompositeEgressRequest),
2693        #[prost(message, tag="6")]
2694        Track(super::TrackEgressRequest),
2695    }
2696    /// deprecated (use _result fields)
2697    #[allow(clippy::derive_partial_eq_without_eq)]
2698#[derive(Clone, PartialEq, ::prost::Oneof)]
2699    pub enum Result {
2700        #[prost(message, tag="7")]
2701        Stream(super::StreamInfoList),
2702        #[prost(message, tag="8")]
2703        File(super::FileInfo),
2704        #[prost(message, tag="12")]
2705        Segments(super::SegmentsInfo),
2706    }
2707}
2708#[allow(clippy::derive_partial_eq_without_eq)]
2709#[derive(Clone, PartialEq, ::prost::Message)]
2710pub struct StreamInfoList {
2711    #[prost(message, repeated, tag="1")]
2712    pub info: ::prost::alloc::vec::Vec<StreamInfo>,
2713}
2714#[allow(clippy::derive_partial_eq_without_eq)]
2715#[derive(Clone, PartialEq, ::prost::Message)]
2716pub struct StreamInfo {
2717    #[prost(string, tag="1")]
2718    pub url: ::prost::alloc::string::String,
2719    #[prost(int64, tag="2")]
2720    pub started_at: i64,
2721    #[prost(int64, tag="3")]
2722    pub ended_at: i64,
2723    #[prost(int64, tag="4")]
2724    pub duration: i64,
2725    #[prost(enumeration="stream_info::Status", tag="5")]
2726    pub status: i32,
2727    #[prost(string, tag="6")]
2728    pub error: ::prost::alloc::string::String,
2729    #[prost(int64, tag="7")]
2730    pub last_retry_at: i64,
2731    #[prost(uint32, tag="8")]
2732    pub retries: u32,
2733}
2734/// Nested message and enum types in `StreamInfo`.
2735pub mod stream_info {
2736    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2737    #[repr(i32)]
2738    pub enum Status {
2739        Active = 0,
2740        Finished = 1,
2741        Failed = 2,
2742    }
2743    impl Status {
2744        /// String value of the enum field names used in the ProtoBuf definition.
2745        ///
2746        /// The values are not transformed in any way and thus are considered stable
2747        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2748        pub fn as_str_name(&self) -> &'static str {
2749            match self {
2750                Status::Active => "ACTIVE",
2751                Status::Finished => "FINISHED",
2752                Status::Failed => "FAILED",
2753            }
2754        }
2755        /// Creates an enum from field names used in the ProtoBuf definition.
2756        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2757            match value {
2758                "ACTIVE" => Some(Self::Active),
2759                "FINISHED" => Some(Self::Finished),
2760                "FAILED" => Some(Self::Failed),
2761                _ => None,
2762            }
2763        }
2764    }
2765}
2766#[allow(clippy::derive_partial_eq_without_eq)]
2767#[derive(Clone, PartialEq, ::prost::Message)]
2768pub struct FileInfo {
2769    #[prost(string, tag="1")]
2770    pub filename: ::prost::alloc::string::String,
2771    #[prost(int64, tag="2")]
2772    pub started_at: i64,
2773    #[prost(int64, tag="3")]
2774    pub ended_at: i64,
2775    #[prost(int64, tag="6")]
2776    pub duration: i64,
2777    #[prost(int64, tag="4")]
2778    pub size: i64,
2779    #[prost(string, tag="5")]
2780    pub location: ::prost::alloc::string::String,
2781}
2782#[allow(clippy::derive_partial_eq_without_eq)]
2783#[derive(Clone, PartialEq, ::prost::Message)]
2784pub struct SegmentsInfo {
2785    #[prost(string, tag="1")]
2786    pub playlist_name: ::prost::alloc::string::String,
2787    #[prost(string, tag="8")]
2788    pub live_playlist_name: ::prost::alloc::string::String,
2789    #[prost(int64, tag="2")]
2790    pub duration: i64,
2791    #[prost(int64, tag="3")]
2792    pub size: i64,
2793    #[prost(string, tag="4")]
2794    pub playlist_location: ::prost::alloc::string::String,
2795    #[prost(string, tag="9")]
2796    pub live_playlist_location: ::prost::alloc::string::String,
2797    #[prost(int64, tag="5")]
2798    pub segment_count: i64,
2799    #[prost(int64, tag="6")]
2800    pub started_at: i64,
2801    #[prost(int64, tag="7")]
2802    pub ended_at: i64,
2803}
2804#[allow(clippy::derive_partial_eq_without_eq)]
2805#[derive(Clone, PartialEq, ::prost::Message)]
2806pub struct ImagesInfo {
2807    #[prost(string, tag="4")]
2808    pub filename_prefix: ::prost::alloc::string::String,
2809    #[prost(int64, tag="1")]
2810    pub image_count: i64,
2811    #[prost(int64, tag="2")]
2812    pub started_at: i64,
2813    #[prost(int64, tag="3")]
2814    pub ended_at: i64,
2815}
2816#[allow(clippy::derive_partial_eq_without_eq)]
2817#[derive(Clone, PartialEq, ::prost::Message)]
2818pub struct AutoParticipantEgress {
2819    #[prost(message, repeated, tag="3")]
2820    pub file_outputs: ::prost::alloc::vec::Vec<EncodedFileOutput>,
2821    #[prost(message, repeated, tag="4")]
2822    pub segment_outputs: ::prost::alloc::vec::Vec<SegmentedFileOutput>,
2823    #[prost(oneof="auto_participant_egress::Options", tags="1, 2")]
2824    pub options: ::core::option::Option<auto_participant_egress::Options>,
2825}
2826/// Nested message and enum types in `AutoParticipantEgress`.
2827pub mod auto_participant_egress {
2828    #[allow(clippy::derive_partial_eq_without_eq)]
2829#[derive(Clone, PartialEq, ::prost::Oneof)]
2830    pub enum Options {
2831        /// (default H264_720P_30)
2832        #[prost(enumeration="super::EncodingOptionsPreset", tag="1")]
2833        Preset(i32),
2834        /// (optional)
2835        #[prost(message, tag="2")]
2836        Advanced(super::EncodingOptions),
2837    }
2838}
2839#[allow(clippy::derive_partial_eq_without_eq)]
2840#[derive(Clone, PartialEq, ::prost::Message)]
2841pub struct AutoTrackEgress {
2842    /// see docs for templating (default {track_id}-{time})
2843    #[prost(string, tag="1")]
2844    pub filepath: ::prost::alloc::string::String,
2845    /// disables upload of json manifest file (default false)
2846    #[prost(bool, tag="5")]
2847    pub disable_manifest: bool,
2848    #[prost(oneof="auto_track_egress::Output", tags="2, 3, 4, 6")]
2849    pub output: ::core::option::Option<auto_track_egress::Output>,
2850}
2851/// Nested message and enum types in `AutoTrackEgress`.
2852pub mod auto_track_egress {
2853    #[allow(clippy::derive_partial_eq_without_eq)]
2854#[derive(Clone, PartialEq, ::prost::Oneof)]
2855    pub enum Output {
2856        #[prost(message, tag="2")]
2857        S3(super::S3Upload),
2858        #[prost(message, tag="3")]
2859        Gcp(super::GcpUpload),
2860        #[prost(message, tag="4")]
2861        Azure(super::AzureBlobUpload),
2862        #[prost(message, tag="6")]
2863        AliOss(super::AliOssUpload),
2864    }
2865}
2866#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2867#[repr(i32)]
2868pub enum EncodedFileType {
2869    /// file type chosen based on codecs
2870    DefaultFiletype = 0,
2871    Mp4 = 1,
2872    Ogg = 2,
2873    Mp3 = 3,
2874}
2875impl EncodedFileType {
2876    /// String value of the enum field names used in the ProtoBuf definition.
2877    ///
2878    /// The values are not transformed in any way and thus are considered stable
2879    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2880    pub fn as_str_name(&self) -> &'static str {
2881        match self {
2882            EncodedFileType::DefaultFiletype => "DEFAULT_FILETYPE",
2883            EncodedFileType::Mp4 => "MP4",
2884            EncodedFileType::Ogg => "OGG",
2885            EncodedFileType::Mp3 => "MP3",
2886        }
2887    }
2888    /// Creates an enum from field names used in the ProtoBuf definition.
2889    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2890        match value {
2891            "DEFAULT_FILETYPE" => Some(Self::DefaultFiletype),
2892            "MP4" => Some(Self::Mp4),
2893            "OGG" => Some(Self::Ogg),
2894            "MP3" => Some(Self::Mp3),
2895            _ => None,
2896        }
2897    }
2898}
2899#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2900#[repr(i32)]
2901pub enum SegmentedFileProtocol {
2902    DefaultSegmentedFileProtocol = 0,
2903    HlsProtocol = 1,
2904}
2905impl SegmentedFileProtocol {
2906    /// String value of the enum field names used in the ProtoBuf definition.
2907    ///
2908    /// The values are not transformed in any way and thus are considered stable
2909    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2910    pub fn as_str_name(&self) -> &'static str {
2911        match self {
2912            SegmentedFileProtocol::DefaultSegmentedFileProtocol => "DEFAULT_SEGMENTED_FILE_PROTOCOL",
2913            SegmentedFileProtocol::HlsProtocol => "HLS_PROTOCOL",
2914        }
2915    }
2916    /// Creates an enum from field names used in the ProtoBuf definition.
2917    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2918        match value {
2919            "DEFAULT_SEGMENTED_FILE_PROTOCOL" => Some(Self::DefaultSegmentedFileProtocol),
2920            "HLS_PROTOCOL" => Some(Self::HlsProtocol),
2921            _ => None,
2922        }
2923    }
2924}
2925#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2926#[repr(i32)]
2927pub enum SegmentedFileSuffix {
2928    Index = 0,
2929    Timestamp = 1,
2930}
2931impl SegmentedFileSuffix {
2932    /// String value of the enum field names used in the ProtoBuf definition.
2933    ///
2934    /// The values are not transformed in any way and thus are considered stable
2935    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2936    pub fn as_str_name(&self) -> &'static str {
2937        match self {
2938            SegmentedFileSuffix::Index => "INDEX",
2939            SegmentedFileSuffix::Timestamp => "TIMESTAMP",
2940        }
2941    }
2942    /// Creates an enum from field names used in the ProtoBuf definition.
2943    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2944        match value {
2945            "INDEX" => Some(Self::Index),
2946            "TIMESTAMP" => Some(Self::Timestamp),
2947            _ => None,
2948        }
2949    }
2950}
2951#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2952#[repr(i32)]
2953pub enum ImageFileSuffix {
2954    ImageSuffixIndex = 0,
2955    ImageSuffixTimestamp = 1,
2956    /// Do not append any suffix and overwrite the existing image with the latest
2957    ImageSuffixNoneOverwrite = 2,
2958}
2959impl ImageFileSuffix {
2960    /// String value of the enum field names used in the ProtoBuf definition.
2961    ///
2962    /// The values are not transformed in any way and thus are considered stable
2963    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2964    pub fn as_str_name(&self) -> &'static str {
2965        match self {
2966            ImageFileSuffix::ImageSuffixIndex => "IMAGE_SUFFIX_INDEX",
2967            ImageFileSuffix::ImageSuffixTimestamp => "IMAGE_SUFFIX_TIMESTAMP",
2968            ImageFileSuffix::ImageSuffixNoneOverwrite => "IMAGE_SUFFIX_NONE_OVERWRITE",
2969        }
2970    }
2971    /// Creates an enum from field names used in the ProtoBuf definition.
2972    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2973        match value {
2974            "IMAGE_SUFFIX_INDEX" => Some(Self::ImageSuffixIndex),
2975            "IMAGE_SUFFIX_TIMESTAMP" => Some(Self::ImageSuffixTimestamp),
2976            "IMAGE_SUFFIX_NONE_OVERWRITE" => Some(Self::ImageSuffixNoneOverwrite),
2977            _ => None,
2978        }
2979    }
2980}
2981#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2982#[repr(i32)]
2983pub enum StreamProtocol {
2984    /// protocol chosen based on urls
2985    DefaultProtocol = 0,
2986    Rtmp = 1,
2987    Srt = 2,
2988}
2989impl StreamProtocol {
2990    /// String value of the enum field names used in the ProtoBuf definition.
2991    ///
2992    /// The values are not transformed in any way and thus are considered stable
2993    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2994    pub fn as_str_name(&self) -> &'static str {
2995        match self {
2996            StreamProtocol::DefaultProtocol => "DEFAULT_PROTOCOL",
2997            StreamProtocol::Rtmp => "RTMP",
2998            StreamProtocol::Srt => "SRT",
2999        }
3000    }
3001    /// Creates an enum from field names used in the ProtoBuf definition.
3002    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3003        match value {
3004            "DEFAULT_PROTOCOL" => Some(Self::DefaultProtocol),
3005            "RTMP" => Some(Self::Rtmp),
3006            "SRT" => Some(Self::Srt),
3007            _ => None,
3008        }
3009    }
3010}
3011#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3012#[repr(i32)]
3013pub enum AudioMixing {
3014    /// all users are mixed together
3015    DefaultMixing = 0,
3016    /// agent audio in the left channel, all other audio in the right channel
3017    DualChannelAgent = 1,
3018    /// each new audio track alternates between left and right channels
3019    DualChannelAlternate = 2,
3020}
3021impl AudioMixing {
3022    /// String value of the enum field names used in the ProtoBuf definition.
3023    ///
3024    /// The values are not transformed in any way and thus are considered stable
3025    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3026    pub fn as_str_name(&self) -> &'static str {
3027        match self {
3028            AudioMixing::DefaultMixing => "DEFAULT_MIXING",
3029            AudioMixing::DualChannelAgent => "DUAL_CHANNEL_AGENT",
3030            AudioMixing::DualChannelAlternate => "DUAL_CHANNEL_ALTERNATE",
3031        }
3032    }
3033    /// Creates an enum from field names used in the ProtoBuf definition.
3034    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3035        match value {
3036            "DEFAULT_MIXING" => Some(Self::DefaultMixing),
3037            "DUAL_CHANNEL_AGENT" => Some(Self::DualChannelAgent),
3038            "DUAL_CHANNEL_ALTERNATE" => Some(Self::DualChannelAlternate),
3039            _ => None,
3040        }
3041    }
3042}
3043#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3044#[repr(i32)]
3045pub enum EncodingOptionsPreset {
3046    ///   1280x720, 30fps, 3000kpbs, H.264_MAIN / OPUS
3047    H264720p30 = 0,
3048    ///   1280x720, 60fps, 4500kbps, H.264_MAIN / OPUS
3049    H264720p60 = 1,
3050    /// 1920x1080, 30fps, 4500kbps, H.264_MAIN / OPUS
3051    H2641080p30 = 2,
3052    /// 1920x1080, 60fps, 6000kbps, H.264_MAIN / OPUS
3053    H2641080p60 = 3,
3054    ///   720x1280, 30fps, 3000kpbs, H.264_MAIN / OPUS
3055    PortraitH264720p30 = 4,
3056    ///   720x1280, 60fps, 4500kbps, H.264_MAIN / OPUS
3057    PortraitH264720p60 = 5,
3058    /// 1080x1920, 30fps, 4500kbps, H.264_MAIN / OPUS
3059    PortraitH2641080p30 = 6,
3060    /// 1080x1920, 60fps, 6000kbps, H.264_MAIN / OPUS
3061    PortraitH2641080p60 = 7,
3062}
3063impl EncodingOptionsPreset {
3064    /// String value of the enum field names used in the ProtoBuf definition.
3065    ///
3066    /// The values are not transformed in any way and thus are considered stable
3067    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3068    pub fn as_str_name(&self) -> &'static str {
3069        match self {
3070            EncodingOptionsPreset::H264720p30 => "H264_720P_30",
3071            EncodingOptionsPreset::H264720p60 => "H264_720P_60",
3072            EncodingOptionsPreset::H2641080p30 => "H264_1080P_30",
3073            EncodingOptionsPreset::H2641080p60 => "H264_1080P_60",
3074            EncodingOptionsPreset::PortraitH264720p30 => "PORTRAIT_H264_720P_30",
3075            EncodingOptionsPreset::PortraitH264720p60 => "PORTRAIT_H264_720P_60",
3076            EncodingOptionsPreset::PortraitH2641080p30 => "PORTRAIT_H264_1080P_30",
3077            EncodingOptionsPreset::PortraitH2641080p60 => "PORTRAIT_H264_1080P_60",
3078        }
3079    }
3080    /// Creates an enum from field names used in the ProtoBuf definition.
3081    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3082        match value {
3083            "H264_720P_30" => Some(Self::H264720p30),
3084            "H264_720P_60" => Some(Self::H264720p60),
3085            "H264_1080P_30" => Some(Self::H2641080p30),
3086            "H264_1080P_60" => Some(Self::H2641080p60),
3087            "PORTRAIT_H264_720P_30" => Some(Self::PortraitH264720p30),
3088            "PORTRAIT_H264_720P_60" => Some(Self::PortraitH264720p60),
3089            "PORTRAIT_H264_1080P_30" => Some(Self::PortraitH2641080p30),
3090            "PORTRAIT_H264_1080P_60" => Some(Self::PortraitH2641080p60),
3091            _ => None,
3092        }
3093    }
3094}
3095#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3096#[repr(i32)]
3097pub enum EgressStatus {
3098    EgressStarting = 0,
3099    EgressActive = 1,
3100    EgressEnding = 2,
3101    EgressComplete = 3,
3102    EgressFailed = 4,
3103    EgressAborted = 5,
3104    EgressLimitReached = 6,
3105}
3106impl EgressStatus {
3107    /// String value of the enum field names used in the ProtoBuf definition.
3108    ///
3109    /// The values are not transformed in any way and thus are considered stable
3110    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3111    pub fn as_str_name(&self) -> &'static str {
3112        match self {
3113            EgressStatus::EgressStarting => "EGRESS_STARTING",
3114            EgressStatus::EgressActive => "EGRESS_ACTIVE",
3115            EgressStatus::EgressEnding => "EGRESS_ENDING",
3116            EgressStatus::EgressComplete => "EGRESS_COMPLETE",
3117            EgressStatus::EgressFailed => "EGRESS_FAILED",
3118            EgressStatus::EgressAborted => "EGRESS_ABORTED",
3119            EgressStatus::EgressLimitReached => "EGRESS_LIMIT_REACHED",
3120        }
3121    }
3122    /// Creates an enum from field names used in the ProtoBuf definition.
3123    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3124        match value {
3125            "EGRESS_STARTING" => Some(Self::EgressStarting),
3126            "EGRESS_ACTIVE" => Some(Self::EgressActive),
3127            "EGRESS_ENDING" => Some(Self::EgressEnding),
3128            "EGRESS_COMPLETE" => Some(Self::EgressComplete),
3129            "EGRESS_FAILED" => Some(Self::EgressFailed),
3130            "EGRESS_ABORTED" => Some(Self::EgressAborted),
3131            "EGRESS_LIMIT_REACHED" => Some(Self::EgressLimitReached),
3132            _ => None,
3133        }
3134    }
3135}
3136#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3137#[repr(i32)]
3138pub enum EgressSourceType {
3139    Web = 0,
3140    Sdk = 1,
3141}
3142impl EgressSourceType {
3143    /// String value of the enum field names used in the ProtoBuf definition.
3144    ///
3145    /// The values are not transformed in any way and thus are considered stable
3146    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3147    pub fn as_str_name(&self) -> &'static str {
3148        match self {
3149            EgressSourceType::Web => "EGRESS_SOURCE_TYPE_WEB",
3150            EgressSourceType::Sdk => "EGRESS_SOURCE_TYPE_SDK",
3151        }
3152    }
3153    /// Creates an enum from field names used in the ProtoBuf definition.
3154    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3155        match value {
3156            "EGRESS_SOURCE_TYPE_WEB" => Some(Self::Web),
3157            "EGRESS_SOURCE_TYPE_SDK" => Some(Self::Sdk),
3158            _ => None,
3159        }
3160    }
3161}
3162#[allow(clippy::derive_partial_eq_without_eq)]
3163#[derive(Clone, PartialEq, ::prost::Message)]
3164pub struct SignalRequest {
3165    #[prost(oneof="signal_request::Message", tags="1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21")]
3166    pub message: ::core::option::Option<signal_request::Message>,
3167}
3168/// Nested message and enum types in `SignalRequest`.
3169pub mod signal_request {
3170    #[allow(clippy::derive_partial_eq_without_eq)]
3171#[derive(Clone, PartialEq, ::prost::Oneof)]
3172    pub enum Message {
3173        /// participant offer for publisher
3174        #[prost(message, tag="1")]
3175        Offer(super::SessionDescription),
3176        /// participant answering subscriber offer
3177        #[prost(message, tag="2")]
3178        Answer(super::SessionDescription),
3179        #[prost(message, tag="3")]
3180        Trickle(super::TrickleRequest),
3181        #[prost(message, tag="4")]
3182        AddTrack(super::AddTrackRequest),
3183        /// mute the participant's published tracks
3184        #[prost(message, tag="5")]
3185        Mute(super::MuteTrackRequest),
3186        /// Subscribe or unsubscribe from tracks
3187        #[prost(message, tag="6")]
3188        Subscription(super::UpdateSubscription),
3189        /// Update settings of subscribed tracks
3190        #[prost(message, tag="7")]
3191        TrackSetting(super::UpdateTrackSettings),
3192        /// Immediately terminate session
3193        #[prost(message, tag="8")]
3194        Leave(super::LeaveRequest),
3195        /// Update published video layers
3196        #[prost(message, tag="10")]
3197        UpdateLayers(super::UpdateVideoLayers),
3198        /// Update subscriber permissions
3199        #[prost(message, tag="11")]
3200        SubscriptionPermission(super::SubscriptionPermission),
3201        /// sync client's subscribe state to server during reconnect
3202        #[prost(message, tag="12")]
3203        SyncState(super::SyncState),
3204        /// Simulate conditions, for client validations
3205        #[prost(message, tag="13")]
3206        Simulate(super::SimulateScenario),
3207        /// client triggered ping to server
3208        ///
3209        /// deprecated by ping_req (message Ping)
3210        #[prost(int64, tag="14")]
3211        Ping(i64),
3212        /// update a participant's own metadata, name, or attributes
3213        /// requires canUpdateOwnParticipantMetadata permission
3214        #[prost(message, tag="15")]
3215        UpdateMetadata(super::UpdateParticipantMetadata),
3216        #[prost(message, tag="16")]
3217        PingReq(super::Ping),
3218        /// Update local audio track settings
3219        #[prost(message, tag="17")]
3220        UpdateAudioTrack(super::UpdateLocalAudioTrack),
3221        /// Update local video track settings
3222        #[prost(message, tag="18")]
3223        UpdateVideoTrack(super::UpdateLocalVideoTrack),
3224        /// Publish a data track
3225        #[prost(message, tag="19")]
3226        PublishDataTrackRequest(super::PublishDataTrackRequest),
3227        /// Unpublish a data track
3228        #[prost(message, tag="20")]
3229        UnpublishDataTrackRequest(super::UnpublishDataTrackRequest),
3230        /// Update subscription state for one or more data tracks
3231        #[prost(message, tag="21")]
3232        UpdateDataSubscription(super::UpdateDataSubscription),
3233    }
3234}
3235#[allow(clippy::derive_partial_eq_without_eq)]
3236#[derive(Clone, PartialEq, ::prost::Message)]
3237pub struct SignalResponse {
3238    #[prost(oneof="signal_response::Message", tags="1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29")]
3239    pub message: ::core::option::Option<signal_response::Message>,
3240}
3241/// Nested message and enum types in `SignalResponse`.
3242pub mod signal_response {
3243    #[allow(clippy::derive_partial_eq_without_eq)]
3244#[derive(Clone, PartialEq, ::prost::Oneof)]
3245    pub enum Message {
3246        /// sent when join is accepted
3247        #[prost(message, tag="1")]
3248        Join(super::JoinResponse),
3249        /// sent when server answers publisher
3250        #[prost(message, tag="2")]
3251        Answer(super::SessionDescription),
3252        /// sent when server is sending subscriber an offer
3253        #[prost(message, tag="3")]
3254        Offer(super::SessionDescription),
3255        /// sent when an ICE candidate is available
3256        #[prost(message, tag="4")]
3257        Trickle(super::TrickleRequest),
3258        /// sent when participants in the room has changed
3259        #[prost(message, tag="5")]
3260        Update(super::ParticipantUpdate),
3261        /// sent to the participant when their track has been published
3262        #[prost(message, tag="6")]
3263        TrackPublished(super::TrackPublishedResponse),
3264        /// Immediately terminate session
3265        #[prost(message, tag="8")]
3266        Leave(super::LeaveRequest),
3267        /// server initiated mute
3268        #[prost(message, tag="9")]
3269        Mute(super::MuteTrackRequest),
3270        /// indicates changes to speaker status, including when they've gone to not speaking
3271        #[prost(message, tag="10")]
3272        SpeakersChanged(super::SpeakersChanged),
3273        /// sent when metadata of the room has changed
3274        #[prost(message, tag="11")]
3275        RoomUpdate(super::RoomUpdate),
3276        /// when connection quality changed
3277        #[prost(message, tag="12")]
3278        ConnectionQuality(super::ConnectionQualityUpdate),
3279        /// when streamed tracks state changed, used to notify when any of the streams were paused due to
3280        /// congestion
3281        #[prost(message, tag="13")]
3282        StreamStateUpdate(super::StreamStateUpdate),
3283        /// when max subscribe quality changed, used by dynamic broadcasting to disable unused layers
3284        #[prost(message, tag="14")]
3285        SubscribedQualityUpdate(super::SubscribedQualityUpdate),
3286        /// when subscription permission changed
3287        #[prost(message, tag="15")]
3288        SubscriptionPermissionUpdate(super::SubscriptionPermissionUpdate),
3289        /// update the token the client was using, to prevent an active client from using an expired token
3290        #[prost(string, tag="16")]
3291        RefreshToken(::prost::alloc::string::String),
3292        /// server initiated track unpublish
3293        #[prost(message, tag="17")]
3294        TrackUnpublished(super::TrackUnpublishedResponse),
3295        /// respond to ping
3296        ///
3297        /// deprecated by pong_resp (message Pong)
3298        #[prost(int64, tag="18")]
3299        Pong(i64),
3300        /// sent when client reconnects
3301        #[prost(message, tag="19")]
3302        Reconnect(super::ReconnectResponse),
3303        /// respond to Ping
3304        #[prost(message, tag="20")]
3305        PongResp(super::Pong),
3306        /// Subscription response, client should not expect any media from this subscription if it fails
3307        #[prost(message, tag="21")]
3308        SubscriptionResponse(super::SubscriptionResponse),
3309        /// Response relating to user inititated requests that carry a `request_id`
3310        #[prost(message, tag="22")]
3311        RequestResponse(super::RequestResponse),
3312        /// notify to the publisher when a published track has been subscribed for the first time
3313        #[prost(message, tag="23")]
3314        TrackSubscribed(super::TrackSubscribed),
3315        /// notify to the participant when they have been moved to a new room
3316        #[prost(message, tag="24")]
3317        RoomMoved(super::RoomMovedResponse),
3318        /// notify number of required media sections to satisfy subscribed tracks
3319        #[prost(message, tag="25")]
3320        MediaSectionsRequirement(super::MediaSectionsRequirement),
3321        /// when audio subscription changes, used to enable simulcasting of audio codecs based on subscriptions
3322        #[prost(message, tag="26")]
3323        SubscribedAudioCodecUpdate(super::SubscribedAudioCodecUpdate),
3324        /// Sent in response to `PublishDataTrackRequest`.
3325        #[prost(message, tag="27")]
3326        PublishDataTrackResponse(super::PublishDataTrackResponse),
3327        /// Sent in response to `UnpublishDataTrackRequest` or SFU-initiated unpublish.
3328        #[prost(message, tag="28")]
3329        UnpublishDataTrackResponse(super::UnpublishDataTrackResponse),
3330        /// Sent to data track subscribers to provide mapping from track SIDs to handles.
3331        #[prost(message, tag="29")]
3332        DataTrackSubscriberHandles(super::DataTrackSubscriberHandles),
3333    }
3334}
3335#[allow(clippy::derive_partial_eq_without_eq)]
3336#[derive(Clone, PartialEq, ::prost::Message)]
3337pub struct SimulcastCodec {
3338    #[prost(string, tag="1")]
3339    pub codec: ::prost::alloc::string::String,
3340    #[prost(string, tag="2")]
3341    pub cid: ::prost::alloc::string::String,
3342    #[prost(message, repeated, tag="4")]
3343    pub layers: ::prost::alloc::vec::Vec<VideoLayer>,
3344    #[prost(enumeration="video_layer::Mode", tag="5")]
3345    pub video_layer_mode: i32,
3346}
3347#[allow(clippy::derive_partial_eq_without_eq)]
3348#[derive(Clone, PartialEq, ::prost::Message)]
3349pub struct AddTrackRequest {
3350    /// client ID of track, to match it when RTC track is received
3351    #[prost(string, tag="1")]
3352    pub cid: ::prost::alloc::string::String,
3353    #[prost(string, tag="2")]
3354    pub name: ::prost::alloc::string::String,
3355    #[prost(enumeration="TrackType", tag="3")]
3356    pub r#type: i32,
3357    #[prost(uint32, tag="4")]
3358    pub width: u32,
3359    #[prost(uint32, tag="5")]
3360    pub height: u32,
3361    /// true to add track and initialize to muted
3362    #[prost(bool, tag="6")]
3363    pub muted: bool,
3364    /// true if DTX (Discontinuous Transmission) is disabled for audio
3365    ///
3366    /// deprecated in favor of audio_features
3367    #[deprecated]
3368    #[prost(bool, tag="7")]
3369    pub disable_dtx: bool,
3370    #[prost(enumeration="TrackSource", tag="8")]
3371    pub source: i32,
3372    #[prost(message, repeated, tag="9")]
3373    pub layers: ::prost::alloc::vec::Vec<VideoLayer>,
3374    #[prost(message, repeated, tag="10")]
3375    pub simulcast_codecs: ::prost::alloc::vec::Vec<SimulcastCodec>,
3376    /// server ID of track, publish new codec to exist track
3377    #[prost(string, tag="11")]
3378    pub sid: ::prost::alloc::string::String,
3379    /// deprecated in favor of audio_features
3380    #[deprecated]
3381    #[prost(bool, tag="12")]
3382    pub stereo: bool,
3383    /// true if RED (Redundant Encoding) is disabled for audio
3384    #[prost(bool, tag="13")]
3385    pub disable_red: bool,
3386    #[prost(enumeration="encryption::Type", tag="14")]
3387    pub encryption: i32,
3388    /// which stream the track belongs to, used to group tracks together.
3389    /// if not specified, server will infer it from track source to bundle camera/microphone, screenshare/audio together
3390    #[prost(string, tag="15")]
3391    pub stream: ::prost::alloc::string::String,
3392    #[prost(enumeration="BackupCodecPolicy", tag="16")]
3393    pub backup_codec_policy: i32,
3394    #[prost(enumeration="AudioTrackFeature", repeated, tag="17")]
3395    pub audio_features: ::prost::alloc::vec::Vec<i32>,
3396    #[prost(enumeration="PacketTrailerFeature", repeated, tag="18")]
3397    pub packet_trailer_features: ::prost::alloc::vec::Vec<i32>,
3398}
3399#[allow(clippy::derive_partial_eq_without_eq)]
3400#[derive(Clone, PartialEq, ::prost::Message)]
3401pub struct PublishDataTrackRequest {
3402    /// Client-assigned, 16-bit identifier that will be attached to packets sent by the publisher.
3403    /// This must be non-zero and unique for each data track published by the publisher.
3404    #[prost(uint32, tag="1")]
3405    pub pub_handle: u32,
3406    /// Human-readable identifier (e.g., `geoLocation`, `servoPosition.x`, etc.), unique per publisher.
3407    /// This must be non-empty and no longer than 256 characters.
3408    #[prost(string, tag="2")]
3409    pub name: ::prost::alloc::string::String,
3410    /// Method used for end-to-end encryption (E2EE) on frame payloads.
3411    #[prost(enumeration="encryption::Type", tag="3")]
3412    pub encryption: i32,
3413}
3414#[allow(clippy::derive_partial_eq_without_eq)]
3415#[derive(Clone, PartialEq, ::prost::Message)]
3416pub struct PublishDataTrackResponse {
3417    /// Information about the published track.
3418    #[prost(message, optional, tag="1")]
3419    pub info: ::core::option::Option<DataTrackInfo>,
3420}
3421#[allow(clippy::derive_partial_eq_without_eq)]
3422#[derive(Clone, PartialEq, ::prost::Message)]
3423pub struct UnpublishDataTrackRequest {
3424    /// Publisher handle of the track to unpublish.
3425    #[prost(uint32, tag="1")]
3426    pub pub_handle: u32,
3427}
3428#[allow(clippy::derive_partial_eq_without_eq)]
3429#[derive(Clone, PartialEq, ::prost::Message)]
3430pub struct UnpublishDataTrackResponse {
3431    /// Information about the unpublished track.
3432    #[prost(message, optional, tag="1")]
3433    pub info: ::core::option::Option<DataTrackInfo>,
3434}
3435#[allow(clippy::derive_partial_eq_without_eq)]
3436#[derive(Clone, PartialEq, ::prost::Message)]
3437pub struct DataTrackSubscriberHandles {
3438    /// Maps handles from incoming packets to the track SIDs that the packets belong to.
3439    #[prost(map="uint32, message", tag="1")]
3440    pub sub_handles: ::std::collections::HashMap<u32, data_track_subscriber_handles::PublishedDataTrack>,
3441}
3442/// Nested message and enum types in `DataTrackSubscriberHandles`.
3443pub mod data_track_subscriber_handles {
3444    #[allow(clippy::derive_partial_eq_without_eq)]
3445#[derive(Clone, PartialEq, ::prost::Message)]
3446    pub struct PublishedDataTrack {
3447        #[prost(string, tag="1")]
3448        pub publisher_identity: ::prost::alloc::string::String,
3449        #[prost(string, tag="2")]
3450        pub publisher_sid: ::prost::alloc::string::String,
3451        #[prost(string, tag="3")]
3452        pub track_sid: ::prost::alloc::string::String,
3453    }
3454}
3455#[allow(clippy::derive_partial_eq_without_eq)]
3456#[derive(Clone, PartialEq, ::prost::Message)]
3457pub struct TrickleRequest {
3458    #[prost(string, tag="1")]
3459    pub candidate_init: ::prost::alloc::string::String,
3460    #[prost(enumeration="SignalTarget", tag="2")]
3461    pub target: i32,
3462    #[prost(bool, tag="3")]
3463    pub r#final: bool,
3464}
3465#[allow(clippy::derive_partial_eq_without_eq)]
3466#[derive(Clone, PartialEq, ::prost::Message)]
3467pub struct MuteTrackRequest {
3468    #[prost(string, tag="1")]
3469    pub sid: ::prost::alloc::string::String,
3470    #[prost(bool, tag="2")]
3471    pub muted: bool,
3472}
3473#[allow(clippy::derive_partial_eq_without_eq)]
3474#[derive(Clone, PartialEq, ::prost::Message)]
3475pub struct JoinResponse {
3476    #[prost(message, optional, tag="1")]
3477    pub room: ::core::option::Option<Room>,
3478    #[prost(message, optional, tag="2")]
3479    pub participant: ::core::option::Option<ParticipantInfo>,
3480    #[prost(message, repeated, tag="3")]
3481    pub other_participants: ::prost::alloc::vec::Vec<ParticipantInfo>,
3482    /// deprecated. use server_info.version instead.
3483    #[prost(string, tag="4")]
3484    pub server_version: ::prost::alloc::string::String,
3485    #[prost(message, repeated, tag="5")]
3486    pub ice_servers: ::prost::alloc::vec::Vec<IceServer>,
3487    /// use subscriber as the primary PeerConnection
3488    #[prost(bool, tag="6")]
3489    pub subscriber_primary: bool,
3490    /// when the current server isn't available, return alternate url to retry connection
3491    /// when this is set, the other fields will be largely empty
3492    #[prost(string, tag="7")]
3493    pub alternative_url: ::prost::alloc::string::String,
3494    #[prost(message, optional, tag="8")]
3495    pub client_configuration: ::core::option::Option<ClientConfiguration>,
3496    /// deprecated. use server_info.region instead.
3497    #[prost(string, tag="9")]
3498    pub server_region: ::prost::alloc::string::String,
3499    #[prost(int32, tag="10")]
3500    pub ping_timeout: i32,
3501    #[prost(int32, tag="11")]
3502    pub ping_interval: i32,
3503    #[prost(message, optional, tag="12")]
3504    pub server_info: ::core::option::Option<ServerInfo>,
3505    /// Server-Injected-Frame byte trailer, used to identify unencrypted frames when e2ee is enabled
3506    #[prost(bytes="vec", tag="13")]
3507    pub sif_trailer: ::prost::alloc::vec::Vec<u8>,
3508    #[prost(message, repeated, tag="14")]
3509    pub enabled_publish_codecs: ::prost::alloc::vec::Vec<Codec>,
3510    /// when set, client should attempt to establish publish peer connection when joining room to speed up publishing
3511    #[prost(bool, tag="15")]
3512    pub fast_publish: bool,
3513}
3514#[allow(clippy::derive_partial_eq_without_eq)]
3515#[derive(Clone, PartialEq, ::prost::Message)]
3516pub struct ReconnectResponse {
3517    #[prost(message, repeated, tag="1")]
3518    pub ice_servers: ::prost::alloc::vec::Vec<IceServer>,
3519    #[prost(message, optional, tag="2")]
3520    pub client_configuration: ::core::option::Option<ClientConfiguration>,
3521    #[prost(message, optional, tag="3")]
3522    pub server_info: ::core::option::Option<ServerInfo>,
3523    /// last sequence number of reliable message received before resuming
3524    #[prost(uint32, tag="4")]
3525    pub last_message_seq: u32,
3526}
3527#[allow(clippy::derive_partial_eq_without_eq)]
3528#[derive(Clone, PartialEq, ::prost::Message)]
3529pub struct TrackPublishedResponse {
3530    #[prost(string, tag="1")]
3531    pub cid: ::prost::alloc::string::String,
3532    #[prost(message, optional, tag="2")]
3533    pub track: ::core::option::Option<TrackInfo>,
3534}
3535#[allow(clippy::derive_partial_eq_without_eq)]
3536#[derive(Clone, PartialEq, ::prost::Message)]
3537pub struct TrackUnpublishedResponse {
3538    #[prost(string, tag="1")]
3539    pub track_sid: ::prost::alloc::string::String,
3540}
3541#[allow(clippy::derive_partial_eq_without_eq)]
3542#[derive(Clone, PartialEq, ::prost::Message)]
3543pub struct SessionDescription {
3544    /// "answer" | "offer" | "pranswer" | "rollback"
3545    #[prost(string, tag="1")]
3546    pub r#type: ::prost::alloc::string::String,
3547    #[prost(string, tag="2")]
3548    pub sdp: ::prost::alloc::string::String,
3549    #[prost(uint32, tag="3")]
3550    pub id: u32,
3551    #[prost(map="string, string", tag="4")]
3552    pub mid_to_track_id: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
3553}
3554#[allow(clippy::derive_partial_eq_without_eq)]
3555#[derive(Clone, PartialEq, ::prost::Message)]
3556pub struct ParticipantUpdate {
3557    #[prost(message, repeated, tag="1")]
3558    pub participants: ::prost::alloc::vec::Vec<ParticipantInfo>,
3559}
3560#[allow(clippy::derive_partial_eq_without_eq)]
3561#[derive(Clone, PartialEq, ::prost::Message)]
3562pub struct UpdateSubscription {
3563    #[prost(string, repeated, tag="1")]
3564    pub track_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3565    #[prost(bool, tag="2")]
3566    pub subscribe: bool,
3567    #[prost(message, repeated, tag="3")]
3568    pub participant_tracks: ::prost::alloc::vec::Vec<ParticipantTracks>,
3569}
3570#[allow(clippy::derive_partial_eq_without_eq)]
3571#[derive(Clone, PartialEq, ::prost::Message)]
3572pub struct UpdateDataSubscription {
3573    #[prost(message, repeated, tag="1")]
3574    pub updates: ::prost::alloc::vec::Vec<update_data_subscription::Update>,
3575}
3576/// Nested message and enum types in `UpdateDataSubscription`.
3577pub mod update_data_subscription {
3578    #[allow(clippy::derive_partial_eq_without_eq)]
3579#[derive(Clone, PartialEq, ::prost::Message)]
3580    pub struct Update {
3581        #[prost(string, tag="1")]
3582        pub track_sid: ::prost::alloc::string::String,
3583        #[prost(bool, tag="2")]
3584        pub subscribe: bool,
3585        /// Options to apply when initially subscribing or updating an existing subscription.
3586        /// When unsubscribing, this field is ignored.
3587        #[prost(message, optional, tag="3")]
3588        pub options: ::core::option::Option<super::DataTrackSubscriptionOptions>,
3589    }
3590}
3591#[allow(clippy::derive_partial_eq_without_eq)]
3592#[derive(Clone, PartialEq, ::prost::Message)]
3593pub struct UpdateTrackSettings {
3594    #[prost(string, repeated, tag="1")]
3595    pub track_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3596    /// when true, the track is placed in a paused state, with no new data returned
3597    #[prost(bool, tag="3")]
3598    pub disabled: bool,
3599    /// deprecated in favor of width & height
3600    #[prost(enumeration="VideoQuality", tag="4")]
3601    pub quality: i32,
3602    /// for video, width to receive
3603    #[prost(uint32, tag="5")]
3604    pub width: u32,
3605    /// for video, height to receive
3606    #[prost(uint32, tag="6")]
3607    pub height: u32,
3608    #[prost(uint32, tag="7")]
3609    pub fps: u32,
3610    /// subscription priority. 1 being the highest (0 is unset)
3611    /// when unset, server sill assign priority based on the order of subscription
3612    /// server will use priority in the following ways:
3613    /// 1. when subscribed tracks exceed per-participant subscription limit, server will
3614    ///     pause the lowest priority tracks
3615    /// 2. when the network is congested, server will assign available bandwidth to
3616    ///     higher priority tracks first. lowest priority tracks can be paused
3617    #[prost(uint32, tag="8")]
3618    pub priority: u32,
3619}
3620#[allow(clippy::derive_partial_eq_without_eq)]
3621#[derive(Clone, PartialEq, ::prost::Message)]
3622pub struct UpdateLocalAudioTrack {
3623    #[prost(string, tag="1")]
3624    pub track_sid: ::prost::alloc::string::String,
3625    #[prost(enumeration="AudioTrackFeature", repeated, tag="2")]
3626    pub features: ::prost::alloc::vec::Vec<i32>,
3627}
3628#[allow(clippy::derive_partial_eq_without_eq)]
3629#[derive(Clone, PartialEq, ::prost::Message)]
3630pub struct UpdateLocalVideoTrack {
3631    #[prost(string, tag="1")]
3632    pub track_sid: ::prost::alloc::string::String,
3633    #[prost(uint32, tag="2")]
3634    pub width: u32,
3635    #[prost(uint32, tag="3")]
3636    pub height: u32,
3637}
3638#[allow(clippy::derive_partial_eq_without_eq)]
3639#[derive(Clone, PartialEq, ::prost::Message)]
3640pub struct LeaveRequest {
3641    /// sent when server initiates the disconnect due to server-restart
3642    /// indicates clients should attempt full-reconnect sequence
3643    /// NOTE: `can_reconnect` obsoleted by `action` starting in protocol version 13
3644    #[prost(bool, tag="1")]
3645    pub can_reconnect: bool,
3646    #[prost(enumeration="DisconnectReason", tag="2")]
3647    pub reason: i32,
3648    #[prost(enumeration="leave_request::Action", tag="3")]
3649    pub action: i32,
3650    #[prost(message, optional, tag="4")]
3651    pub regions: ::core::option::Option<RegionSettings>,
3652}
3653/// Nested message and enum types in `LeaveRequest`.
3654pub mod leave_request {
3655    /// indicates action clients should take on receiving this message
3656    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3657    #[repr(i32)]
3658    pub enum Action {
3659        /// should disconnect
3660        Disconnect = 0,
3661        /// should attempt a resume with `reconnect=1` in join URL
3662        Resume = 1,
3663        /// should attempt a reconnect, i. e. no `reconnect=1`
3664        Reconnect = 2,
3665    }
3666    impl Action {
3667        /// String value of the enum field names used in the ProtoBuf definition.
3668        ///
3669        /// The values are not transformed in any way and thus are considered stable
3670        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3671        pub fn as_str_name(&self) -> &'static str {
3672            match self {
3673                Action::Disconnect => "DISCONNECT",
3674                Action::Resume => "RESUME",
3675                Action::Reconnect => "RECONNECT",
3676            }
3677        }
3678        /// Creates an enum from field names used in the ProtoBuf definition.
3679        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3680            match value {
3681                "DISCONNECT" => Some(Self::Disconnect),
3682                "RESUME" => Some(Self::Resume),
3683                "RECONNECT" => Some(Self::Reconnect),
3684                _ => None,
3685            }
3686        }
3687    }
3688}
3689/// message to indicate published video track dimensions are changing
3690#[allow(clippy::derive_partial_eq_without_eq)]
3691#[derive(Clone, PartialEq, ::prost::Message)]
3692pub struct UpdateVideoLayers {
3693    #[prost(string, tag="1")]
3694    pub track_sid: ::prost::alloc::string::String,
3695    #[prost(message, repeated, tag="2")]
3696    pub layers: ::prost::alloc::vec::Vec<VideoLayer>,
3697}
3698#[allow(clippy::derive_partial_eq_without_eq)]
3699#[derive(Clone, PartialEq, ::prost::Message)]
3700pub struct UpdateParticipantMetadata {
3701    #[prost(string, tag="1")]
3702    pub metadata: ::prost::alloc::string::String,
3703    #[prost(string, tag="2")]
3704    pub name: ::prost::alloc::string::String,
3705    /// attributes to update. it only updates attributes that have been set
3706    /// to delete attributes, set the value to an empty string
3707    #[prost(map="string, string", tag="3")]
3708    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
3709    #[prost(uint32, tag="4")]
3710    pub request_id: u32,
3711}
3712#[allow(clippy::derive_partial_eq_without_eq)]
3713#[derive(Clone, PartialEq, ::prost::Message)]
3714pub struct IceServer {
3715    #[prost(string, repeated, tag="1")]
3716    pub urls: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3717    #[prost(string, tag="2")]
3718    pub username: ::prost::alloc::string::String,
3719    #[prost(string, tag="3")]
3720    pub credential: ::prost::alloc::string::String,
3721}
3722#[allow(clippy::derive_partial_eq_without_eq)]
3723#[derive(Clone, PartialEq, ::prost::Message)]
3724pub struct SpeakersChanged {
3725    #[prost(message, repeated, tag="1")]
3726    pub speakers: ::prost::alloc::vec::Vec<SpeakerInfo>,
3727}
3728#[allow(clippy::derive_partial_eq_without_eq)]
3729#[derive(Clone, PartialEq, ::prost::Message)]
3730pub struct RoomUpdate {
3731    #[prost(message, optional, tag="1")]
3732    pub room: ::core::option::Option<Room>,
3733}
3734#[allow(clippy::derive_partial_eq_without_eq)]
3735#[derive(Clone, PartialEq, ::prost::Message)]
3736pub struct ConnectionQualityInfo {
3737    #[prost(string, tag="1")]
3738    pub participant_sid: ::prost::alloc::string::String,
3739    #[prost(enumeration="ConnectionQuality", tag="2")]
3740    pub quality: i32,
3741    #[prost(float, tag="3")]
3742    pub score: f32,
3743}
3744#[allow(clippy::derive_partial_eq_without_eq)]
3745#[derive(Clone, PartialEq, ::prost::Message)]
3746pub struct ConnectionQualityUpdate {
3747    #[prost(message, repeated, tag="1")]
3748    pub updates: ::prost::alloc::vec::Vec<ConnectionQualityInfo>,
3749}
3750#[allow(clippy::derive_partial_eq_without_eq)]
3751#[derive(Clone, PartialEq, ::prost::Message)]
3752pub struct StreamStateInfo {
3753    #[prost(string, tag="1")]
3754    pub participant_sid: ::prost::alloc::string::String,
3755    #[prost(string, tag="2")]
3756    pub track_sid: ::prost::alloc::string::String,
3757    #[prost(enumeration="StreamState", tag="3")]
3758    pub state: i32,
3759}
3760#[allow(clippy::derive_partial_eq_without_eq)]
3761#[derive(Clone, PartialEq, ::prost::Message)]
3762pub struct StreamStateUpdate {
3763    #[prost(message, repeated, tag="1")]
3764    pub stream_states: ::prost::alloc::vec::Vec<StreamStateInfo>,
3765}
3766#[allow(clippy::derive_partial_eq_without_eq)]
3767#[derive(Clone, PartialEq, ::prost::Message)]
3768pub struct SubscribedQuality {
3769    #[prost(enumeration="VideoQuality", tag="1")]
3770    pub quality: i32,
3771    #[prost(bool, tag="2")]
3772    pub enabled: bool,
3773}
3774#[allow(clippy::derive_partial_eq_without_eq)]
3775#[derive(Clone, PartialEq, ::prost::Message)]
3776pub struct SubscribedCodec {
3777    #[prost(string, tag="1")]
3778    pub codec: ::prost::alloc::string::String,
3779    #[prost(message, repeated, tag="2")]
3780    pub qualities: ::prost::alloc::vec::Vec<SubscribedQuality>,
3781}
3782#[allow(clippy::derive_partial_eq_without_eq)]
3783#[derive(Clone, PartialEq, ::prost::Message)]
3784pub struct SubscribedQualityUpdate {
3785    #[prost(string, tag="1")]
3786    pub track_sid: ::prost::alloc::string::String,
3787    #[deprecated]
3788    #[prost(message, repeated, tag="2")]
3789    pub subscribed_qualities: ::prost::alloc::vec::Vec<SubscribedQuality>,
3790    #[prost(message, repeated, tag="3")]
3791    pub subscribed_codecs: ::prost::alloc::vec::Vec<SubscribedCodec>,
3792}
3793#[allow(clippy::derive_partial_eq_without_eq)]
3794#[derive(Clone, PartialEq, ::prost::Message)]
3795pub struct SubscribedAudioCodecUpdate {
3796    #[prost(string, tag="1")]
3797    pub track_sid: ::prost::alloc::string::String,
3798    #[prost(message, repeated, tag="2")]
3799    pub subscribed_audio_codecs: ::prost::alloc::vec::Vec<SubscribedAudioCodec>,
3800}
3801#[allow(clippy::derive_partial_eq_without_eq)]
3802#[derive(Clone, PartialEq, ::prost::Message)]
3803pub struct TrackPermission {
3804    /// permission could be granted either by participant sid or identity
3805    #[prost(string, tag="1")]
3806    pub participant_sid: ::prost::alloc::string::String,
3807    #[prost(bool, tag="2")]
3808    pub all_tracks: bool,
3809    #[prost(string, repeated, tag="3")]
3810    pub track_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3811    #[prost(string, tag="4")]
3812    pub participant_identity: ::prost::alloc::string::String,
3813}
3814#[allow(clippy::derive_partial_eq_without_eq)]
3815#[derive(Clone, PartialEq, ::prost::Message)]
3816pub struct SubscriptionPermission {
3817    #[prost(bool, tag="1")]
3818    pub all_participants: bool,
3819    #[prost(message, repeated, tag="2")]
3820    pub track_permissions: ::prost::alloc::vec::Vec<TrackPermission>,
3821}
3822#[allow(clippy::derive_partial_eq_without_eq)]
3823#[derive(Clone, PartialEq, ::prost::Message)]
3824pub struct SubscriptionPermissionUpdate {
3825    #[prost(string, tag="1")]
3826    pub participant_sid: ::prost::alloc::string::String,
3827    #[prost(string, tag="2")]
3828    pub track_sid: ::prost::alloc::string::String,
3829    #[prost(bool, tag="3")]
3830    pub allowed: bool,
3831}
3832#[allow(clippy::derive_partial_eq_without_eq)]
3833#[derive(Clone, PartialEq, ::prost::Message)]
3834pub struct RoomMovedResponse {
3835    /// information about the new room
3836    #[prost(message, optional, tag="1")]
3837    pub room: ::core::option::Option<Room>,
3838    /// new reconnect token that can be used to reconnect to the new room
3839    #[prost(string, tag="2")]
3840    pub token: ::prost::alloc::string::String,
3841    #[prost(message, optional, tag="3")]
3842    pub participant: ::core::option::Option<ParticipantInfo>,
3843    #[prost(message, repeated, tag="4")]
3844    pub other_participants: ::prost::alloc::vec::Vec<ParticipantInfo>,
3845}
3846#[allow(clippy::derive_partial_eq_without_eq)]
3847#[derive(Clone, PartialEq, ::prost::Message)]
3848pub struct SyncState {
3849    /// last subscribe/publish answer before reconnecting
3850    /// subscribe answer if using dual peer connection
3851    /// publish answer if using single peer connection
3852    #[prost(message, optional, tag="1")]
3853    pub answer: ::core::option::Option<SessionDescription>,
3854    #[prost(message, optional, tag="2")]
3855    pub subscription: ::core::option::Option<UpdateSubscription>,
3856    #[prost(message, repeated, tag="3")]
3857    pub publish_tracks: ::prost::alloc::vec::Vec<TrackPublishedResponse>,
3858    #[prost(message, repeated, tag="4")]
3859    pub data_channels: ::prost::alloc::vec::Vec<DataChannelInfo>,
3860    /// last received server side offer/sent client side offer before reconnecting
3861    /// received server side offer if using dual peer connection
3862    /// sent client side offer if using single peer connection
3863    #[prost(message, optional, tag="5")]
3864    pub offer: ::core::option::Option<SessionDescription>,
3865    #[prost(string, repeated, tag="6")]
3866    pub track_sids_disabled: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3867    #[prost(message, repeated, tag="7")]
3868    pub datachannel_receive_states: ::prost::alloc::vec::Vec<DataChannelReceiveState>,
3869    #[prost(message, repeated, tag="8")]
3870    pub publish_data_tracks: ::prost::alloc::vec::Vec<PublishDataTrackResponse>,
3871}
3872#[allow(clippy::derive_partial_eq_without_eq)]
3873#[derive(Clone, PartialEq, ::prost::Message)]
3874pub struct DataChannelReceiveState {
3875    #[prost(string, tag="1")]
3876    pub publisher_sid: ::prost::alloc::string::String,
3877    #[prost(uint32, tag="2")]
3878    pub last_seq: u32,
3879}
3880#[allow(clippy::derive_partial_eq_without_eq)]
3881#[derive(Clone, PartialEq, ::prost::Message)]
3882pub struct DataChannelInfo {
3883    #[prost(string, tag="1")]
3884    pub label: ::prost::alloc::string::String,
3885    #[prost(uint32, tag="2")]
3886    pub id: u32,
3887    #[prost(enumeration="SignalTarget", tag="3")]
3888    pub target: i32,
3889}
3890#[allow(clippy::derive_partial_eq_without_eq)]
3891#[derive(Clone, PartialEq, ::prost::Message)]
3892pub struct SimulateScenario {
3893    #[prost(oneof="simulate_scenario::Scenario", tags="1, 2, 3, 4, 5, 6, 7, 8, 9")]
3894    pub scenario: ::core::option::Option<simulate_scenario::Scenario>,
3895}
3896/// Nested message and enum types in `SimulateScenario`.
3897pub mod simulate_scenario {
3898    #[allow(clippy::derive_partial_eq_without_eq)]
3899#[derive(Clone, PartialEq, ::prost::Oneof)]
3900    pub enum Scenario {
3901        /// simulate N seconds of speaker activity
3902        #[prost(int32, tag="1")]
3903        SpeakerUpdate(i32),
3904        /// simulate local node failure
3905        #[prost(bool, tag="2")]
3906        NodeFailure(bool),
3907        /// simulate migration
3908        #[prost(bool, tag="3")]
3909        Migration(bool),
3910        /// server to send leave
3911        #[prost(bool, tag="4")]
3912        ServerLeave(bool),
3913        /// switch candidate protocol to tcp
3914        #[prost(enumeration="super::CandidateProtocol", tag="5")]
3915        SwitchCandidateProtocol(i32),
3916        /// maximum bandwidth for subscribers, in bps
3917        /// when zero, clears artificial bandwidth limit
3918        #[prost(int64, tag="6")]
3919        SubscriberBandwidth(i64),
3920        /// disconnect signal on resume
3921        #[prost(bool, tag="7")]
3922        DisconnectSignalOnResume(bool),
3923        /// disconnect signal on resume before sending any messages from server
3924        #[prost(bool, tag="8")]
3925        DisconnectSignalOnResumeNoMessages(bool),
3926        /// full reconnect leave request
3927        #[prost(bool, tag="9")]
3928        LeaveRequestFullReconnect(bool),
3929    }
3930}
3931#[allow(clippy::derive_partial_eq_without_eq)]
3932#[derive(Clone, PartialEq, ::prost::Message)]
3933pub struct Ping {
3934    #[prost(int64, tag="1")]
3935    pub timestamp: i64,
3936    /// rtt in milliseconds calculated by client
3937    #[prost(int64, tag="2")]
3938    pub rtt: i64,
3939}
3940#[allow(clippy::derive_partial_eq_without_eq)]
3941#[derive(Clone, PartialEq, ::prost::Message)]
3942pub struct Pong {
3943    /// timestamp field of last received ping request
3944    #[prost(int64, tag="1")]
3945    pub last_ping_timestamp: i64,
3946    #[prost(int64, tag="2")]
3947    pub timestamp: i64,
3948}
3949#[allow(clippy::derive_partial_eq_without_eq)]
3950#[derive(Clone, PartialEq, ::prost::Message)]
3951pub struct RegionSettings {
3952    #[prost(message, repeated, tag="1")]
3953    pub regions: ::prost::alloc::vec::Vec<RegionInfo>,
3954}
3955#[allow(clippy::derive_partial_eq_without_eq)]
3956#[derive(Clone, PartialEq, ::prost::Message)]
3957pub struct RegionInfo {
3958    #[prost(string, tag="1")]
3959    pub region: ::prost::alloc::string::String,
3960    #[prost(string, tag="2")]
3961    pub url: ::prost::alloc::string::String,
3962    #[prost(int64, tag="3")]
3963    pub distance: i64,
3964}
3965#[allow(clippy::derive_partial_eq_without_eq)]
3966#[derive(Clone, PartialEq, ::prost::Message)]
3967pub struct SubscriptionResponse {
3968    #[prost(string, tag="1")]
3969    pub track_sid: ::prost::alloc::string::String,
3970    #[prost(enumeration="SubscriptionError", tag="2")]
3971    pub err: i32,
3972}
3973#[allow(clippy::derive_partial_eq_without_eq)]
3974#[derive(Clone, PartialEq, ::prost::Message)]
3975pub struct RequestResponse {
3976    #[prost(uint32, tag="1")]
3977    pub request_id: u32,
3978    #[prost(enumeration="request_response::Reason", tag="2")]
3979    pub reason: i32,
3980    #[prost(string, tag="3")]
3981    pub message: ::prost::alloc::string::String,
3982    #[prost(oneof="request_response::Request", tags="4, 5, 6, 7, 8, 9, 10, 11")]
3983    pub request: ::core::option::Option<request_response::Request>,
3984}
3985/// Nested message and enum types in `RequestResponse`.
3986pub mod request_response {
3987    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3988    #[repr(i32)]
3989    pub enum Reason {
3990        Ok = 0,
3991        NotFound = 1,
3992        NotAllowed = 2,
3993        LimitExceeded = 3,
3994        Queued = 4,
3995        UnsupportedType = 5,
3996        UnclassifiedError = 6,
3997        InvalidHandle = 7,
3998        InvalidName = 8,
3999        DuplicateHandle = 9,
4000        DuplicateName = 10,
4001    }
4002    impl Reason {
4003        /// String value of the enum field names used in the ProtoBuf definition.
4004        ///
4005        /// The values are not transformed in any way and thus are considered stable
4006        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4007        pub fn as_str_name(&self) -> &'static str {
4008            match self {
4009                Reason::Ok => "OK",
4010                Reason::NotFound => "NOT_FOUND",
4011                Reason::NotAllowed => "NOT_ALLOWED",
4012                Reason::LimitExceeded => "LIMIT_EXCEEDED",
4013                Reason::Queued => "QUEUED",
4014                Reason::UnsupportedType => "UNSUPPORTED_TYPE",
4015                Reason::UnclassifiedError => "UNCLASSIFIED_ERROR",
4016                Reason::InvalidHandle => "INVALID_HANDLE",
4017                Reason::InvalidName => "INVALID_NAME",
4018                Reason::DuplicateHandle => "DUPLICATE_HANDLE",
4019                Reason::DuplicateName => "DUPLICATE_NAME",
4020            }
4021        }
4022        /// Creates an enum from field names used in the ProtoBuf definition.
4023        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4024            match value {
4025                "OK" => Some(Self::Ok),
4026                "NOT_FOUND" => Some(Self::NotFound),
4027                "NOT_ALLOWED" => Some(Self::NotAllowed),
4028                "LIMIT_EXCEEDED" => Some(Self::LimitExceeded),
4029                "QUEUED" => Some(Self::Queued),
4030                "UNSUPPORTED_TYPE" => Some(Self::UnsupportedType),
4031                "UNCLASSIFIED_ERROR" => Some(Self::UnclassifiedError),
4032                "INVALID_HANDLE" => Some(Self::InvalidHandle),
4033                "INVALID_NAME" => Some(Self::InvalidName),
4034                "DUPLICATE_HANDLE" => Some(Self::DuplicateHandle),
4035                "DUPLICATE_NAME" => Some(Self::DuplicateName),
4036                _ => None,
4037            }
4038        }
4039    }
4040    #[allow(clippy::derive_partial_eq_without_eq)]
4041#[derive(Clone, PartialEq, ::prost::Oneof)]
4042    pub enum Request {
4043        #[prost(message, tag="4")]
4044        Trickle(super::TrickleRequest),
4045        #[prost(message, tag="5")]
4046        AddTrack(super::AddTrackRequest),
4047        #[prost(message, tag="6")]
4048        Mute(super::MuteTrackRequest),
4049        #[prost(message, tag="7")]
4050        UpdateMetadata(super::UpdateParticipantMetadata),
4051        #[prost(message, tag="8")]
4052        UpdateAudioTrack(super::UpdateLocalAudioTrack),
4053        #[prost(message, tag="9")]
4054        UpdateVideoTrack(super::UpdateLocalVideoTrack),
4055        #[prost(message, tag="10")]
4056        PublishDataTrack(super::PublishDataTrackRequest),
4057        #[prost(message, tag="11")]
4058        UnpublishDataTrack(super::UnpublishDataTrackRequest),
4059    }
4060}
4061#[allow(clippy::derive_partial_eq_without_eq)]
4062#[derive(Clone, PartialEq, ::prost::Message)]
4063pub struct TrackSubscribed {
4064    #[prost(string, tag="1")]
4065    pub track_sid: ::prost::alloc::string::String,
4066}
4067#[allow(clippy::derive_partial_eq_without_eq)]
4068#[derive(Clone, PartialEq, ::prost::Message)]
4069pub struct ConnectionSettings {
4070    #[prost(bool, tag="1")]
4071    pub auto_subscribe: bool,
4072    #[prost(bool, tag="2")]
4073    pub adaptive_stream: bool,
4074    #[prost(bool, optional, tag="3")]
4075    pub subscriber_allow_pause: ::core::option::Option<bool>,
4076    #[prost(bool, tag="4")]
4077    pub disable_ice_lite: bool,
4078    #[prost(bool, optional, tag="5")]
4079    pub auto_subscribe_data_track: ::core::option::Option<bool>,
4080}
4081#[allow(clippy::derive_partial_eq_without_eq)]
4082#[derive(Clone, PartialEq, ::prost::Message)]
4083pub struct JoinRequest {
4084    #[prost(message, optional, tag="1")]
4085    pub client_info: ::core::option::Option<ClientInfo>,
4086    #[prost(message, optional, tag="2")]
4087    pub connection_settings: ::core::option::Option<ConnectionSettings>,
4088    /// if not empty, will overwrite `metadata` in token
4089    #[prost(string, tag="3")]
4090    pub metadata: ::prost::alloc::string::String,
4091    /// will set keys provided via this
4092    /// will overwrite if the same key is in the token
4093    /// will not delete keys from token if there is a key collision and this sets that key to empty value
4094    #[prost(map="string, string", tag="4")]
4095    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
4096    #[prost(message, repeated, tag="5")]
4097    pub add_track_requests: ::prost::alloc::vec::Vec<AddTrackRequest>,
4098    #[prost(message, optional, tag="6")]
4099    pub publisher_offer: ::core::option::Option<SessionDescription>,
4100    #[prost(bool, tag="7")]
4101    pub reconnect: bool,
4102    #[prost(enumeration="ReconnectReason", tag="8")]
4103    pub reconnect_reason: i32,
4104    #[prost(string, tag="9")]
4105    pub participant_sid: ::prost::alloc::string::String,
4106    #[prost(message, optional, tag="10")]
4107    pub sync_state: ::core::option::Option<SyncState>,
4108}
4109#[allow(clippy::derive_partial_eq_without_eq)]
4110#[derive(Clone, PartialEq, ::prost::Message)]
4111pub struct WrappedJoinRequest {
4112    #[prost(enumeration="wrapped_join_request::Compression", tag="1")]
4113    pub compression: i32,
4114    /// marshalled JoinRequest + potentially compressed
4115    #[prost(bytes="vec", tag="2")]
4116    pub join_request: ::prost::alloc::vec::Vec<u8>,
4117}
4118/// Nested message and enum types in `WrappedJoinRequest`.
4119pub mod wrapped_join_request {
4120    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4121    #[repr(i32)]
4122    pub enum Compression {
4123        None = 0,
4124        Gzip = 1,
4125    }
4126    impl Compression {
4127        /// String value of the enum field names used in the ProtoBuf definition.
4128        ///
4129        /// The values are not transformed in any way and thus are considered stable
4130        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4131        pub fn as_str_name(&self) -> &'static str {
4132            match self {
4133                Compression::None => "NONE",
4134                Compression::Gzip => "GZIP",
4135            }
4136        }
4137        /// Creates an enum from field names used in the ProtoBuf definition.
4138        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4139            match value {
4140                "NONE" => Some(Self::None),
4141                "GZIP" => Some(Self::Gzip),
4142                _ => None,
4143            }
4144        }
4145    }
4146}
4147#[allow(clippy::derive_partial_eq_without_eq)]
4148#[derive(Clone, PartialEq, ::prost::Message)]
4149pub struct MediaSectionsRequirement {
4150    #[prost(uint32, tag="1")]
4151    pub num_audios: u32,
4152    #[prost(uint32, tag="2")]
4153    pub num_videos: u32,
4154}
4155#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4156#[repr(i32)]
4157pub enum SignalTarget {
4158    Publisher = 0,
4159    Subscriber = 1,
4160}
4161impl SignalTarget {
4162    /// String value of the enum field names used in the ProtoBuf definition.
4163    ///
4164    /// The values are not transformed in any way and thus are considered stable
4165    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4166    pub fn as_str_name(&self) -> &'static str {
4167        match self {
4168            SignalTarget::Publisher => "PUBLISHER",
4169            SignalTarget::Subscriber => "SUBSCRIBER",
4170        }
4171    }
4172    /// Creates an enum from field names used in the ProtoBuf definition.
4173    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4174        match value {
4175            "PUBLISHER" => Some(Self::Publisher),
4176            "SUBSCRIBER" => Some(Self::Subscriber),
4177            _ => None,
4178        }
4179    }
4180}
4181#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4182#[repr(i32)]
4183pub enum StreamState {
4184    Active = 0,
4185    Paused = 1,
4186}
4187impl StreamState {
4188    /// String value of the enum field names used in the ProtoBuf definition.
4189    ///
4190    /// The values are not transformed in any way and thus are considered stable
4191    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4192    pub fn as_str_name(&self) -> &'static str {
4193        match self {
4194            StreamState::Active => "ACTIVE",
4195            StreamState::Paused => "PAUSED",
4196        }
4197    }
4198    /// Creates an enum from field names used in the ProtoBuf definition.
4199    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4200        match value {
4201            "ACTIVE" => Some(Self::Active),
4202            "PAUSED" => Some(Self::Paused),
4203            _ => None,
4204        }
4205    }
4206}
4207#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4208#[repr(i32)]
4209pub enum CandidateProtocol {
4210    Udp = 0,
4211    Tcp = 1,
4212    Tls = 2,
4213}
4214impl CandidateProtocol {
4215    /// String value of the enum field names used in the ProtoBuf definition.
4216    ///
4217    /// The values are not transformed in any way and thus are considered stable
4218    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4219    pub fn as_str_name(&self) -> &'static str {
4220        match self {
4221            CandidateProtocol::Udp => "UDP",
4222            CandidateProtocol::Tcp => "TCP",
4223            CandidateProtocol::Tls => "TLS",
4224        }
4225    }
4226    /// Creates an enum from field names used in the ProtoBuf definition.
4227    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4228        match value {
4229            "UDP" => Some(Self::Udp),
4230            "TCP" => Some(Self::Tcp),
4231            "TLS" => Some(Self::Tls),
4232            _ => None,
4233        }
4234    }
4235}
4236#[allow(clippy::derive_partial_eq_without_eq)]
4237#[derive(Clone, PartialEq, ::prost::Message)]
4238pub struct Job {
4239    #[prost(string, tag="1")]
4240    pub id: ::prost::alloc::string::String,
4241    #[prost(string, tag="9")]
4242    pub dispatch_id: ::prost::alloc::string::String,
4243    #[prost(enumeration="JobType", tag="2")]
4244    pub r#type: i32,
4245    #[prost(message, optional, tag="3")]
4246    pub room: ::core::option::Option<Room>,
4247    #[prost(message, optional, tag="4")]
4248    pub participant: ::core::option::Option<ParticipantInfo>,
4249    #[deprecated]
4250    #[prost(string, tag="5")]
4251    pub namespace: ::prost::alloc::string::String,
4252    #[prost(string, tag="6")]
4253    pub metadata: ::prost::alloc::string::String,
4254    #[prost(string, tag="7")]
4255    pub agent_name: ::prost::alloc::string::String,
4256    #[prost(message, optional, tag="8")]
4257    pub state: ::core::option::Option<JobState>,
4258    #[prost(bool, tag="10")]
4259    pub enable_recording: bool,
4260}
4261#[allow(clippy::derive_partial_eq_without_eq)]
4262#[derive(Clone, PartialEq, ::prost::Message)]
4263pub struct JobState {
4264    #[prost(enumeration="JobStatus", tag="1")]
4265    pub status: i32,
4266    #[prost(string, tag="2")]
4267    pub error: ::prost::alloc::string::String,
4268    #[prost(int64, tag="3")]
4269    pub started_at: i64,
4270    #[prost(int64, tag="4")]
4271    pub ended_at: i64,
4272    #[prost(int64, tag="5")]
4273    pub updated_at: i64,
4274    #[prost(string, tag="6")]
4275    pub participant_identity: ::prost::alloc::string::String,
4276    #[prost(string, tag="7")]
4277    pub worker_id: ::prost::alloc::string::String,
4278    #[prost(string, tag="8")]
4279    pub agent_id: ::prost::alloc::string::String,
4280}
4281/// from Worker to Server
4282#[allow(clippy::derive_partial_eq_without_eq)]
4283#[derive(Clone, PartialEq, ::prost::Message)]
4284pub struct WorkerMessage {
4285    #[prost(oneof="worker_message::Message", tags="1, 2, 3, 4, 5, 6, 7")]
4286    pub message: ::core::option::Option<worker_message::Message>,
4287}
4288/// Nested message and enum types in `WorkerMessage`.
4289pub mod worker_message {
4290    #[allow(clippy::derive_partial_eq_without_eq)]
4291#[derive(Clone, PartialEq, ::prost::Oneof)]
4292    pub enum Message {
4293        /// agent workers need to register themselves with the server first
4294        #[prost(message, tag="1")]
4295        Register(super::RegisterWorkerRequest),
4296        /// worker confirms to server that it's available for a job, or declines it
4297        #[prost(message, tag="2")]
4298        Availability(super::AvailabilityResponse),
4299        /// worker can update its status to the server, including taking itself out of the pool
4300        #[prost(message, tag="3")]
4301        UpdateWorker(super::UpdateWorkerStatus),
4302        /// job can send status updates to the server, useful for tracking progress
4303        #[prost(message, tag="4")]
4304        UpdateJob(super::UpdateJobStatus),
4305        #[prost(message, tag="5")]
4306        Ping(super::WorkerPing),
4307        #[prost(message, tag="6")]
4308        SimulateJob(super::SimulateJobRequest),
4309        #[prost(message, tag="7")]
4310        MigrateJob(super::MigrateJobRequest),
4311    }
4312}
4313/// from Server to Worker
4314#[allow(clippy::derive_partial_eq_without_eq)]
4315#[derive(Clone, PartialEq, ::prost::Message)]
4316pub struct ServerMessage {
4317    #[prost(oneof="server_message::Message", tags="1, 2, 3, 5, 4")]
4318    pub message: ::core::option::Option<server_message::Message>,
4319}
4320/// Nested message and enum types in `ServerMessage`.
4321pub mod server_message {
4322    #[allow(clippy::derive_partial_eq_without_eq)]
4323#[derive(Clone, PartialEq, ::prost::Oneof)]
4324    pub enum Message {
4325        /// server confirms the registration, from this moment on, the worker is considered active
4326        #[prost(message, tag="1")]
4327        Register(super::RegisterWorkerResponse),
4328        /// server asks worker to confirm availability for a job
4329        #[prost(message, tag="2")]
4330        Availability(super::AvailabilityRequest),
4331        #[prost(message, tag="3")]
4332        Assignment(super::JobAssignment),
4333        #[prost(message, tag="5")]
4334        Termination(super::JobTermination),
4335        #[prost(message, tag="4")]
4336        Pong(super::WorkerPong),
4337    }
4338}
4339#[allow(clippy::derive_partial_eq_without_eq)]
4340#[derive(Clone, PartialEq, ::prost::Message)]
4341pub struct SimulateJobRequest {
4342    #[prost(enumeration="JobType", tag="1")]
4343    pub r#type: i32,
4344    #[prost(message, optional, tag="2")]
4345    pub room: ::core::option::Option<Room>,
4346    #[prost(message, optional, tag="3")]
4347    pub participant: ::core::option::Option<ParticipantInfo>,
4348}
4349#[allow(clippy::derive_partial_eq_without_eq)]
4350#[derive(Clone, PartialEq, ::prost::Message)]
4351pub struct WorkerPing {
4352    #[prost(int64, tag="1")]
4353    pub timestamp: i64,
4354}
4355#[allow(clippy::derive_partial_eq_without_eq)]
4356#[derive(Clone, PartialEq, ::prost::Message)]
4357pub struct WorkerPong {
4358    #[prost(int64, tag="1")]
4359    pub last_timestamp: i64,
4360    #[prost(int64, tag="2")]
4361    pub timestamp: i64,
4362}
4363#[allow(clippy::derive_partial_eq_without_eq)]
4364#[derive(Clone, PartialEq, ::prost::Message)]
4365pub struct RegisterWorkerRequest {
4366    #[prost(enumeration="JobType", tag="1")]
4367    pub r#type: i32,
4368    #[prost(string, tag="8")]
4369    pub agent_name: ::prost::alloc::string::String,
4370    /// string worker_id = 2;
4371    #[prost(string, tag="3")]
4372    pub version: ::prost::alloc::string::String,
4373    /// string name = 4 \[deprecated = true\];
4374    #[prost(uint32, tag="5")]
4375    pub ping_interval: u32,
4376    #[prost(string, optional, tag="6")]
4377    pub namespace: ::core::option::Option<::prost::alloc::string::String>,
4378    #[prost(message, optional, tag="7")]
4379    pub allowed_permissions: ::core::option::Option<ParticipantPermission>,
4380}
4381#[allow(clippy::derive_partial_eq_without_eq)]
4382#[derive(Clone, PartialEq, ::prost::Message)]
4383pub struct RegisterWorkerResponse {
4384    #[prost(string, tag="1")]
4385    pub worker_id: ::prost::alloc::string::String,
4386    #[prost(message, optional, tag="3")]
4387    pub server_info: ::core::option::Option<ServerInfo>,
4388}
4389#[allow(clippy::derive_partial_eq_without_eq)]
4390#[derive(Clone, PartialEq, ::prost::Message)]
4391pub struct MigrateJobRequest {
4392    /// string job_id = 1 \[deprecated = true\];
4393    #[prost(string, repeated, tag="2")]
4394    pub job_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4395}
4396#[allow(clippy::derive_partial_eq_without_eq)]
4397#[derive(Clone, PartialEq, ::prost::Message)]
4398pub struct AvailabilityRequest {
4399    #[prost(message, optional, tag="1")]
4400    pub job: ::core::option::Option<Job>,
4401    /// True when the job was previously assigned to another worker but has been
4402    /// migrated due to different reasons (e.g. worker failure, job migration)
4403    #[prost(bool, tag="2")]
4404    pub resuming: bool,
4405}
4406#[allow(clippy::derive_partial_eq_without_eq)]
4407#[derive(Clone, PartialEq, ::prost::Message)]
4408pub struct AvailabilityResponse {
4409    #[prost(string, tag="1")]
4410    pub job_id: ::prost::alloc::string::String,
4411    #[prost(bool, tag="2")]
4412    pub available: bool,
4413    #[prost(bool, tag="3")]
4414    pub supports_resume: bool,
4415    #[prost(bool, tag="8")]
4416    pub terminate: bool,
4417    #[prost(string, tag="4")]
4418    pub participant_name: ::prost::alloc::string::String,
4419    #[prost(string, tag="5")]
4420    pub participant_identity: ::prost::alloc::string::String,
4421    #[prost(string, tag="6")]
4422    pub participant_metadata: ::prost::alloc::string::String,
4423    /// NEXT_ID: 9
4424    #[prost(map="string, string", tag="7")]
4425    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
4426}
4427#[allow(clippy::derive_partial_eq_without_eq)]
4428#[derive(Clone, PartialEq, ::prost::Message)]
4429pub struct UpdateJobStatus {
4430    #[prost(string, tag="1")]
4431    pub job_id: ::prost::alloc::string::String,
4432    /// The worker can indicate the job end by either specifying SUCCESS or FAILED
4433    #[prost(enumeration="JobStatus", tag="2")]
4434    pub status: i32,
4435    /// metadata shown on the dashboard, useful for debugging
4436    #[prost(string, tag="3")]
4437    pub error: ::prost::alloc::string::String,
4438}
4439#[allow(clippy::derive_partial_eq_without_eq)]
4440#[derive(Clone, PartialEq, ::prost::Message)]
4441pub struct UpdateWorkerStatus {
4442    #[prost(enumeration="WorkerStatus", optional, tag="1")]
4443    pub status: ::core::option::Option<i32>,
4444    /// optional string metadata = 2 \[deprecated=true\];
4445    #[prost(float, tag="3")]
4446    pub load: f32,
4447    #[prost(uint32, tag="4")]
4448    pub job_count: u32,
4449}
4450#[allow(clippy::derive_partial_eq_without_eq)]
4451#[derive(Clone, PartialEq, ::prost::Message)]
4452pub struct JobAssignment {
4453    #[prost(message, optional, tag="1")]
4454    pub job: ::core::option::Option<Job>,
4455    #[prost(string, optional, tag="2")]
4456    pub url: ::core::option::Option<::prost::alloc::string::String>,
4457    #[prost(string, tag="3")]
4458    pub token: ::prost::alloc::string::String,
4459}
4460#[allow(clippy::derive_partial_eq_without_eq)]
4461#[derive(Clone, PartialEq, ::prost::Message)]
4462pub struct JobTermination {
4463    #[prost(string, tag="1")]
4464    pub job_id: ::prost::alloc::string::String,
4465}
4466#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4467#[repr(i32)]
4468pub enum JobType {
4469    JtRoom = 0,
4470    JtPublisher = 1,
4471    JtParticipant = 2,
4472}
4473impl JobType {
4474    /// String value of the enum field names used in the ProtoBuf definition.
4475    ///
4476    /// The values are not transformed in any way and thus are considered stable
4477    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4478    pub fn as_str_name(&self) -> &'static str {
4479        match self {
4480            JobType::JtRoom => "JT_ROOM",
4481            JobType::JtPublisher => "JT_PUBLISHER",
4482            JobType::JtParticipant => "JT_PARTICIPANT",
4483        }
4484    }
4485    /// Creates an enum from field names used in the ProtoBuf definition.
4486    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4487        match value {
4488            "JT_ROOM" => Some(Self::JtRoom),
4489            "JT_PUBLISHER" => Some(Self::JtPublisher),
4490            "JT_PARTICIPANT" => Some(Self::JtParticipant),
4491            _ => None,
4492        }
4493    }
4494}
4495#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4496#[repr(i32)]
4497pub enum WorkerStatus {
4498    WsAvailable = 0,
4499    WsFull = 1,
4500}
4501impl WorkerStatus {
4502    /// String value of the enum field names used in the ProtoBuf definition.
4503    ///
4504    /// The values are not transformed in any way and thus are considered stable
4505    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4506    pub fn as_str_name(&self) -> &'static str {
4507        match self {
4508            WorkerStatus::WsAvailable => "WS_AVAILABLE",
4509            WorkerStatus::WsFull => "WS_FULL",
4510        }
4511    }
4512    /// Creates an enum from field names used in the ProtoBuf definition.
4513    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4514        match value {
4515            "WS_AVAILABLE" => Some(Self::WsAvailable),
4516            "WS_FULL" => Some(Self::WsFull),
4517            _ => None,
4518        }
4519    }
4520}
4521#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4522#[repr(i32)]
4523pub enum JobStatus {
4524    JsPending = 0,
4525    JsRunning = 1,
4526    JsSuccess = 2,
4527    JsFailed = 3,
4528}
4529impl JobStatus {
4530    /// String value of the enum field names used in the ProtoBuf definition.
4531    ///
4532    /// The values are not transformed in any way and thus are considered stable
4533    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4534    pub fn as_str_name(&self) -> &'static str {
4535        match self {
4536            JobStatus::JsPending => "JS_PENDING",
4537            JobStatus::JsRunning => "JS_RUNNING",
4538            JobStatus::JsSuccess => "JS_SUCCESS",
4539            JobStatus::JsFailed => "JS_FAILED",
4540        }
4541    }
4542    /// Creates an enum from field names used in the ProtoBuf definition.
4543    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4544        match value {
4545            "JS_PENDING" => Some(Self::JsPending),
4546            "JS_RUNNING" => Some(Self::JsRunning),
4547            "JS_SUCCESS" => Some(Self::JsSuccess),
4548            "JS_FAILED" => Some(Self::JsFailed),
4549            _ => None,
4550        }
4551    }
4552}
4553#[allow(clippy::derive_partial_eq_without_eq)]
4554#[derive(Clone, PartialEq, ::prost::Message)]
4555pub struct CreateAgentDispatchRequest {
4556    #[prost(string, tag="1")]
4557    pub agent_name: ::prost::alloc::string::String,
4558    #[prost(string, tag="2")]
4559    pub room: ::prost::alloc::string::String,
4560    #[prost(string, tag="3")]
4561    pub metadata: ::prost::alloc::string::String,
4562}
4563#[allow(clippy::derive_partial_eq_without_eq)]
4564#[derive(Clone, PartialEq, ::prost::Message)]
4565pub struct RoomAgentDispatch {
4566    #[prost(string, tag="1")]
4567    pub agent_name: ::prost::alloc::string::String,
4568    #[prost(string, tag="2")]
4569    pub metadata: ::prost::alloc::string::String,
4570}
4571#[allow(clippy::derive_partial_eq_without_eq)]
4572#[derive(Clone, PartialEq, ::prost::Message)]
4573pub struct DeleteAgentDispatchRequest {
4574    #[prost(string, tag="1")]
4575    pub dispatch_id: ::prost::alloc::string::String,
4576    #[prost(string, tag="2")]
4577    pub room: ::prost::alloc::string::String,
4578}
4579#[allow(clippy::derive_partial_eq_without_eq)]
4580#[derive(Clone, PartialEq, ::prost::Message)]
4581pub struct ListAgentDispatchRequest {
4582    /// if set, only the dispatch whose id is given will be returned
4583    #[prost(string, tag="1")]
4584    pub dispatch_id: ::prost::alloc::string::String,
4585    /// name of the room to list agents for. Must be set.
4586    #[prost(string, tag="2")]
4587    pub room: ::prost::alloc::string::String,
4588}
4589#[allow(clippy::derive_partial_eq_without_eq)]
4590#[derive(Clone, PartialEq, ::prost::Message)]
4591pub struct ListAgentDispatchResponse {
4592    #[prost(message, repeated, tag="1")]
4593    pub agent_dispatches: ::prost::alloc::vec::Vec<AgentDispatch>,
4594}
4595#[allow(clippy::derive_partial_eq_without_eq)]
4596#[derive(Clone, PartialEq, ::prost::Message)]
4597pub struct AgentDispatch {
4598    #[prost(string, tag="1")]
4599    pub id: ::prost::alloc::string::String,
4600    #[prost(string, tag="2")]
4601    pub agent_name: ::prost::alloc::string::String,
4602    #[prost(string, tag="3")]
4603    pub room: ::prost::alloc::string::String,
4604    #[prost(string, tag="4")]
4605    pub metadata: ::prost::alloc::string::String,
4606    #[prost(message, optional, tag="5")]
4607    pub state: ::core::option::Option<AgentDispatchState>,
4608}
4609#[allow(clippy::derive_partial_eq_without_eq)]
4610#[derive(Clone, PartialEq, ::prost::Message)]
4611pub struct AgentDispatchState {
4612    /// For dispatches of tyoe JT_ROOM, there will be at most 1 job.
4613    /// For dispatches of type JT_PUBLISHER, there will be 1 per publisher.
4614    #[prost(message, repeated, tag="1")]
4615    pub jobs: ::prost::alloc::vec::Vec<Job>,
4616    #[prost(int64, tag="2")]
4617    pub created_at: i64,
4618    #[prost(int64, tag="3")]
4619    pub deleted_at: i64,
4620}
4621#[allow(clippy::derive_partial_eq_without_eq)]
4622#[derive(Clone, PartialEq, ::prost::Message)]
4623pub struct CreateRoomRequest {
4624    /// name of the room
4625    #[prost(string, tag="1")]
4626    pub name: ::prost::alloc::string::String,
4627    /// configuration to use for this room parameters. Setting parameters below override the config defaults.
4628    #[prost(string, tag="12")]
4629    pub room_preset: ::prost::alloc::string::String,
4630    /// number of seconds to keep the room open if no one joins
4631    #[prost(uint32, tag="2")]
4632    pub empty_timeout: u32,
4633    /// number of seconds to keep the room open after everyone leaves
4634    #[prost(uint32, tag="10")]
4635    pub departure_timeout: u32,
4636    /// limit number of participants that can be in a room
4637    #[prost(uint32, tag="3")]
4638    pub max_participants: u32,
4639    /// override the node room is allocated to, for debugging
4640    #[prost(string, tag="4")]
4641    pub node_id: ::prost::alloc::string::String,
4642    /// metadata of room
4643    #[prost(string, tag="5")]
4644    pub metadata: ::prost::alloc::string::String,
4645    /// auto-egress configurations
4646    #[prost(message, optional, tag="6")]
4647    pub egress: ::core::option::Option<RoomEgress>,
4648    /// playout delay of subscriber
4649    #[prost(uint32, tag="7")]
4650    pub min_playout_delay: u32,
4651    #[prost(uint32, tag="8")]
4652    pub max_playout_delay: u32,
4653    /// improves A/V sync when playout_delay set to a value larger than 200ms. It will disables transceiver re-use
4654    /// so not recommended for rooms with frequent subscription changes
4655    #[prost(bool, tag="9")]
4656    pub sync_streams: bool,
4657    /// replay
4658    #[prost(bool, tag="13")]
4659    pub replay_enabled: bool,
4660    /// Define agents that should be dispatched to this room
4661    ///
4662    /// NEXT-ID: 15
4663    #[prost(message, repeated, tag="14")]
4664    pub agents: ::prost::alloc::vec::Vec<RoomAgentDispatch>,
4665}
4666#[allow(clippy::derive_partial_eq_without_eq)]
4667#[derive(Clone, PartialEq, ::prost::Message)]
4668pub struct RoomEgress {
4669    #[prost(message, optional, tag="1")]
4670    pub room: ::core::option::Option<RoomCompositeEgressRequest>,
4671    #[prost(message, optional, tag="3")]
4672    pub participant: ::core::option::Option<AutoParticipantEgress>,
4673    #[prost(message, optional, tag="2")]
4674    pub tracks: ::core::option::Option<AutoTrackEgress>,
4675}
4676#[allow(clippy::derive_partial_eq_without_eq)]
4677#[derive(Clone, PartialEq, ::prost::Message)]
4678pub struct RoomAgent {
4679    #[prost(message, repeated, tag="1")]
4680    pub dispatches: ::prost::alloc::vec::Vec<RoomAgentDispatch>,
4681}
4682#[allow(clippy::derive_partial_eq_without_eq)]
4683#[derive(Clone, PartialEq, ::prost::Message)]
4684pub struct ListRoomsRequest {
4685    /// when set, will only return rooms with name match
4686    #[prost(string, repeated, tag="1")]
4687    pub names: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4688}
4689#[allow(clippy::derive_partial_eq_without_eq)]
4690#[derive(Clone, PartialEq, ::prost::Message)]
4691pub struct ListRoomsResponse {
4692    #[prost(message, repeated, tag="1")]
4693    pub rooms: ::prost::alloc::vec::Vec<Room>,
4694}
4695#[allow(clippy::derive_partial_eq_without_eq)]
4696#[derive(Clone, PartialEq, ::prost::Message)]
4697pub struct DeleteRoomRequest {
4698    /// name of the room
4699    #[prost(string, tag="1")]
4700    pub room: ::prost::alloc::string::String,
4701}
4702#[allow(clippy::derive_partial_eq_without_eq)]
4703#[derive(Clone, PartialEq, ::prost::Message)]
4704pub struct DeleteRoomResponse {
4705}
4706#[allow(clippy::derive_partial_eq_without_eq)]
4707#[derive(Clone, PartialEq, ::prost::Message)]
4708pub struct ListParticipantsRequest {
4709    /// name of the room
4710    #[prost(string, tag="1")]
4711    pub room: ::prost::alloc::string::String,
4712}
4713#[allow(clippy::derive_partial_eq_without_eq)]
4714#[derive(Clone, PartialEq, ::prost::Message)]
4715pub struct ListParticipantsResponse {
4716    #[prost(message, repeated, tag="1")]
4717    pub participants: ::prost::alloc::vec::Vec<ParticipantInfo>,
4718}
4719#[allow(clippy::derive_partial_eq_without_eq)]
4720#[derive(Clone, PartialEq, ::prost::Message)]
4721pub struct RoomParticipantIdentity {
4722    /// name of the room
4723    #[prost(string, tag="1")]
4724    pub room: ::prost::alloc::string::String,
4725    /// identity of the participant
4726    #[prost(string, tag="2")]
4727    pub identity: ::prost::alloc::string::String,
4728}
4729#[allow(clippy::derive_partial_eq_without_eq)]
4730#[derive(Clone, PartialEq, ::prost::Message)]
4731pub struct RemoveParticipantResponse {
4732}
4733#[allow(clippy::derive_partial_eq_without_eq)]
4734#[derive(Clone, PartialEq, ::prost::Message)]
4735pub struct MuteRoomTrackRequest {
4736    /// name of the room
4737    #[prost(string, tag="1")]
4738    pub room: ::prost::alloc::string::String,
4739    #[prost(string, tag="2")]
4740    pub identity: ::prost::alloc::string::String,
4741    /// sid of the track to mute
4742    #[prost(string, tag="3")]
4743    pub track_sid: ::prost::alloc::string::String,
4744    /// set to true to mute, false to unmute
4745    #[prost(bool, tag="4")]
4746    pub muted: bool,
4747}
4748#[allow(clippy::derive_partial_eq_without_eq)]
4749#[derive(Clone, PartialEq, ::prost::Message)]
4750pub struct MuteRoomTrackResponse {
4751    #[prost(message, optional, tag="1")]
4752    pub track: ::core::option::Option<TrackInfo>,
4753}
4754#[allow(clippy::derive_partial_eq_without_eq)]
4755#[derive(Clone, PartialEq, ::prost::Message)]
4756pub struct UpdateParticipantRequest {
4757    #[prost(string, tag="1")]
4758    pub room: ::prost::alloc::string::String,
4759    #[prost(string, tag="2")]
4760    pub identity: ::prost::alloc::string::String,
4761    /// metadata to update. skipping updates if left empty
4762    #[prost(string, tag="3")]
4763    pub metadata: ::prost::alloc::string::String,
4764    /// set to update the participant's permissions
4765    #[prost(message, optional, tag="4")]
4766    pub permission: ::core::option::Option<ParticipantPermission>,
4767    /// display name to update
4768    #[prost(string, tag="5")]
4769    pub name: ::prost::alloc::string::String,
4770    /// attributes to update. it only updates attributes that have been set
4771    /// to delete attributes, set the value to an empty string
4772    #[prost(map="string, string", tag="6")]
4773    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
4774}
4775#[allow(clippy::derive_partial_eq_without_eq)]
4776#[derive(Clone, PartialEq, ::prost::Message)]
4777pub struct UpdateSubscriptionsRequest {
4778    #[prost(string, tag="1")]
4779    pub room: ::prost::alloc::string::String,
4780    #[prost(string, tag="2")]
4781    pub identity: ::prost::alloc::string::String,
4782    /// list of sids of tracks
4783    #[prost(string, repeated, tag="3")]
4784    pub track_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4785    /// set to true to subscribe, false to unsubscribe from tracks
4786    #[prost(bool, tag="4")]
4787    pub subscribe: bool,
4788    /// list of participants and their tracks
4789    #[prost(message, repeated, tag="5")]
4790    pub participant_tracks: ::prost::alloc::vec::Vec<ParticipantTracks>,
4791}
4792/// empty for now
4793#[allow(clippy::derive_partial_eq_without_eq)]
4794#[derive(Clone, PartialEq, ::prost::Message)]
4795pub struct UpdateSubscriptionsResponse {
4796}
4797#[allow(clippy::derive_partial_eq_without_eq)]
4798#[derive(Clone, PartialEq, ::prost::Message)]
4799pub struct SendDataRequest {
4800    #[prost(string, tag="1")]
4801    pub room: ::prost::alloc::string::String,
4802    #[prost(bytes="vec", tag="2")]
4803    pub data: ::prost::alloc::vec::Vec<u8>,
4804    #[prost(enumeration="data_packet::Kind", tag="3")]
4805    pub kind: i32,
4806    /// mark deprecated
4807    #[deprecated]
4808    #[prost(string, repeated, tag="4")]
4809    pub destination_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4810    /// when set, only forward to these identities
4811    #[prost(string, repeated, tag="6")]
4812    pub destination_identities: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4813    #[prost(string, optional, tag="5")]
4814    pub topic: ::core::option::Option<::prost::alloc::string::String>,
4815    /// added by SDK to enable de-duping of messages, for INTERNAL USE ONLY
4816    #[prost(bytes="vec", tag="7")]
4817    pub nonce: ::prost::alloc::vec::Vec<u8>,
4818}
4819///
4820#[allow(clippy::derive_partial_eq_without_eq)]
4821#[derive(Clone, PartialEq, ::prost::Message)]
4822pub struct SendDataResponse {
4823}
4824#[allow(clippy::derive_partial_eq_without_eq)]
4825#[derive(Clone, PartialEq, ::prost::Message)]
4826pub struct UpdateRoomMetadataRequest {
4827    #[prost(string, tag="1")]
4828    pub room: ::prost::alloc::string::String,
4829    /// metadata to update. skipping updates if left empty
4830    #[prost(string, tag="2")]
4831    pub metadata: ::prost::alloc::string::String,
4832}
4833#[allow(clippy::derive_partial_eq_without_eq)]
4834#[derive(Clone, PartialEq, ::prost::Message)]
4835pub struct RoomConfiguration {
4836    /// Used as ID, must be unique
4837    #[prost(string, tag="1")]
4838    pub name: ::prost::alloc::string::String,
4839    /// number of seconds to keep the room open if no one joins
4840    #[prost(uint32, tag="2")]
4841    pub empty_timeout: u32,
4842    /// number of seconds to keep the room open after everyone leaves
4843    #[prost(uint32, tag="3")]
4844    pub departure_timeout: u32,
4845    /// limit number of participants that can be in a room, excluding Egress and Ingress participants
4846    #[prost(uint32, tag="4")]
4847    pub max_participants: u32,
4848    /// metadata of room
4849    #[prost(string, tag="11")]
4850    pub metadata: ::prost::alloc::string::String,
4851    /// egress
4852    #[prost(message, optional, tag="5")]
4853    pub egress: ::core::option::Option<RoomEgress>,
4854    /// playout delay of subscriber
4855    #[prost(uint32, tag="7")]
4856    pub min_playout_delay: u32,
4857    #[prost(uint32, tag="8")]
4858    pub max_playout_delay: u32,
4859    /// improves A/V sync when playout_delay set to a value larger than 200ms. It will disables transceiver re-use
4860    /// so not recommended for rooms with frequent subscription changes
4861    #[prost(bool, tag="9")]
4862    pub sync_streams: bool,
4863    /// Define agents that should be dispatched to this room
4864    #[prost(message, repeated, tag="10")]
4865    pub agents: ::prost::alloc::vec::Vec<RoomAgentDispatch>,
4866}
4867#[allow(clippy::derive_partial_eq_without_eq)]
4868#[derive(Clone, PartialEq, ::prost::Message)]
4869pub struct ForwardParticipantRequest {
4870    /// room to forward participant from
4871    #[prost(string, tag="1")]
4872    pub room: ::prost::alloc::string::String,
4873    /// identity of the participant to forward
4874    #[prost(string, tag="2")]
4875    pub identity: ::prost::alloc::string::String,
4876    /// room to forward participant to
4877    #[prost(string, tag="3")]
4878    pub destination_room: ::prost::alloc::string::String,
4879}
4880#[allow(clippy::derive_partial_eq_without_eq)]
4881#[derive(Clone, PartialEq, ::prost::Message)]
4882pub struct ForwardParticipantResponse {
4883}
4884#[allow(clippy::derive_partial_eq_without_eq)]
4885#[derive(Clone, PartialEq, ::prost::Message)]
4886pub struct MoveParticipantRequest {
4887    /// room to move participant from
4888    #[prost(string, tag="1")]
4889    pub room: ::prost::alloc::string::String,
4890    /// identity of the participant to move to
4891    #[prost(string, tag="2")]
4892    pub identity: ::prost::alloc::string::String,
4893    /// room to move participant to
4894    #[prost(string, tag="3")]
4895    pub destination_room: ::prost::alloc::string::String,
4896}
4897#[allow(clippy::derive_partial_eq_without_eq)]
4898#[derive(Clone, PartialEq, ::prost::Message)]
4899pub struct MoveParticipantResponse {
4900}
4901#[allow(clippy::derive_partial_eq_without_eq)]
4902#[derive(Clone, PartialEq, ::prost::Message)]
4903pub struct PerformRpcRequest {
4904    #[prost(string, tag="1")]
4905    pub room: ::prost::alloc::string::String,
4906    #[prost(string, tag="2")]
4907    pub destination_identity: ::prost::alloc::string::String,
4908    #[prost(string, tag="3")]
4909    pub method: ::prost::alloc::string::String,
4910    #[prost(string, tag="4")]
4911    pub payload: ::prost::alloc::string::String,
4912    #[prost(uint32, tag="5")]
4913    pub response_timeout_ms: u32,
4914}
4915#[allow(clippy::derive_partial_eq_without_eq)]
4916#[derive(Clone, PartialEq, ::prost::Message)]
4917pub struct PerformRpcResponse {
4918    #[prost(string, tag="1")]
4919    pub payload: ::prost::alloc::string::String,
4920}
4921#[allow(clippy::derive_partial_eq_without_eq)]
4922#[derive(Clone, PartialEq, ::prost::Message)]
4923pub struct CreateIngressRequest {
4924    #[prost(enumeration="IngressInput", tag="1")]
4925    pub input_type: i32,
4926    /// Where to pull media from, only for URL input type
4927    #[prost(string, tag="9")]
4928    pub url: ::prost::alloc::string::String,
4929    /// User provided identifier for the ingress
4930    #[prost(string, tag="2")]
4931    pub name: ::prost::alloc::string::String,
4932    /// room to publish to
4933    #[prost(string, tag="3")]
4934    pub room_name: ::prost::alloc::string::String,
4935    /// publish as participant
4936    #[prost(string, tag="4")]
4937    pub participant_identity: ::prost::alloc::string::String,
4938    /// name of publishing participant (used for display only)
4939    #[prost(string, tag="5")]
4940    pub participant_name: ::prost::alloc::string::String,
4941    /// metadata associated with the publishing participant
4942    #[prost(string, tag="10")]
4943    pub participant_metadata: ::prost::alloc::string::String,
4944    /// \[depreacted \] whether to pass through the incoming media without transcoding, only compatible with some input types. Use `enable_transcoding` instead.
4945    #[deprecated]
4946    #[prost(bool, tag="8")]
4947    pub bypass_transcoding: bool,
4948    /// Whether to transcode the ingested media. Only WHIP supports disabling transcoding currently. WHIP will default to transcoding disabled. Replaces `bypass_transcoding. 
4949    #[prost(bool, optional, tag="11")]
4950    pub enable_transcoding: ::core::option::Option<bool>,
4951    #[prost(message, optional, tag="6")]
4952    pub audio: ::core::option::Option<IngressAudioOptions>,
4953    #[prost(message, optional, tag="7")]
4954    pub video: ::core::option::Option<IngressVideoOptions>,
4955    /// The default value is true and when set to false, the new connection attempts will be rejected
4956    #[prost(bool, optional, tag="12")]
4957    pub enabled: ::core::option::Option<bool>,
4958}
4959#[allow(clippy::derive_partial_eq_without_eq)]
4960#[derive(Clone, PartialEq, ::prost::Message)]
4961pub struct IngressAudioOptions {
4962    #[prost(string, tag="1")]
4963    pub name: ::prost::alloc::string::String,
4964    #[prost(enumeration="TrackSource", tag="2")]
4965    pub source: i32,
4966    #[prost(oneof="ingress_audio_options::EncodingOptions", tags="3, 4")]
4967    pub encoding_options: ::core::option::Option<ingress_audio_options::EncodingOptions>,
4968}
4969/// Nested message and enum types in `IngressAudioOptions`.
4970pub mod ingress_audio_options {
4971    #[allow(clippy::derive_partial_eq_without_eq)]
4972#[derive(Clone, PartialEq, ::prost::Oneof)]
4973    pub enum EncodingOptions {
4974        #[prost(enumeration="super::IngressAudioEncodingPreset", tag="3")]
4975        Preset(i32),
4976        #[prost(message, tag="4")]
4977        Options(super::IngressAudioEncodingOptions),
4978    }
4979}
4980#[allow(clippy::derive_partial_eq_without_eq)]
4981#[derive(Clone, PartialEq, ::prost::Message)]
4982pub struct IngressVideoOptions {
4983    #[prost(string, tag="1")]
4984    pub name: ::prost::alloc::string::String,
4985    #[prost(enumeration="TrackSource", tag="2")]
4986    pub source: i32,
4987    #[prost(oneof="ingress_video_options::EncodingOptions", tags="3, 4")]
4988    pub encoding_options: ::core::option::Option<ingress_video_options::EncodingOptions>,
4989}
4990/// Nested message and enum types in `IngressVideoOptions`.
4991pub mod ingress_video_options {
4992    #[allow(clippy::derive_partial_eq_without_eq)]
4993#[derive(Clone, PartialEq, ::prost::Oneof)]
4994    pub enum EncodingOptions {
4995        #[prost(enumeration="super::IngressVideoEncodingPreset", tag="3")]
4996        Preset(i32),
4997        #[prost(message, tag="4")]
4998        Options(super::IngressVideoEncodingOptions),
4999    }
5000}
5001#[allow(clippy::derive_partial_eq_without_eq)]
5002#[derive(Clone, PartialEq, ::prost::Message)]
5003pub struct IngressAudioEncodingOptions {
5004    /// desired audio codec to publish to room
5005    #[prost(enumeration="AudioCodec", tag="1")]
5006    pub audio_codec: i32,
5007    #[prost(uint32, tag="2")]
5008    pub bitrate: u32,
5009    #[prost(bool, tag="3")]
5010    pub disable_dtx: bool,
5011    #[prost(uint32, tag="4")]
5012    pub channels: u32,
5013}
5014#[allow(clippy::derive_partial_eq_without_eq)]
5015#[derive(Clone, PartialEq, ::prost::Message)]
5016pub struct IngressVideoEncodingOptions {
5017    /// desired codec to publish to room
5018    #[prost(enumeration="VideoCodec", tag="1")]
5019    pub video_codec: i32,
5020    #[prost(double, tag="2")]
5021    pub frame_rate: f64,
5022    /// simulcast layers to publish, when empty, should usually be set to layers at 1/2 and 1/4 of the dimensions
5023    #[prost(message, repeated, tag="3")]
5024    pub layers: ::prost::alloc::vec::Vec<VideoLayer>,
5025}
5026#[allow(clippy::derive_partial_eq_without_eq)]
5027#[derive(Clone, PartialEq, ::prost::Message)]
5028pub struct IngressInfo {
5029    #[prost(string, tag="1")]
5030    pub ingress_id: ::prost::alloc::string::String,
5031    #[prost(string, tag="2")]
5032    pub name: ::prost::alloc::string::String,
5033    #[prost(string, tag="3")]
5034    pub stream_key: ::prost::alloc::string::String,
5035    /// URL to point the encoder to for push (RTMP, WHIP), or location to pull media from for pull (URL)
5036    #[prost(string, tag="4")]
5037    pub url: ::prost::alloc::string::String,
5038    /// for RTMP input, it'll be a rtmp:// URL
5039    /// for FILE input, it'll be a http:// URL
5040    /// for SRT input, it'll be a srt:// URL
5041    #[prost(enumeration="IngressInput", tag="5")]
5042    pub input_type: i32,
5043    #[deprecated]
5044    #[prost(bool, tag="13")]
5045    pub bypass_transcoding: bool,
5046    #[prost(bool, optional, tag="15")]
5047    pub enable_transcoding: ::core::option::Option<bool>,
5048    #[prost(message, optional, tag="6")]
5049    pub audio: ::core::option::Option<IngressAudioOptions>,
5050    #[prost(message, optional, tag="7")]
5051    pub video: ::core::option::Option<IngressVideoOptions>,
5052    #[prost(string, tag="8")]
5053    pub room_name: ::prost::alloc::string::String,
5054    #[prost(string, tag="9")]
5055    pub participant_identity: ::prost::alloc::string::String,
5056    #[prost(string, tag="10")]
5057    pub participant_name: ::prost::alloc::string::String,
5058    #[prost(string, tag="14")]
5059    pub participant_metadata: ::prost::alloc::string::String,
5060    #[prost(bool, tag="11")]
5061    pub reusable: bool,
5062    /// Description of error/stream non compliance and debug info for publisher otherwise (received bitrate, resolution, bandwidth)
5063    #[prost(message, optional, tag="12")]
5064    pub state: ::core::option::Option<IngressState>,
5065    /// The default value is true and when set to false, the new connection attempts will be rejected
5066    #[prost(bool, optional, tag="16")]
5067    pub enabled: ::core::option::Option<bool>,
5068}
5069#[allow(clippy::derive_partial_eq_without_eq)]
5070#[derive(Clone, PartialEq, ::prost::Message)]
5071pub struct IngressState {
5072    #[prost(enumeration="ingress_state::Status", tag="1")]
5073    pub status: i32,
5074    /// Error/non compliance description if any
5075    #[prost(string, tag="2")]
5076    pub error: ::prost::alloc::string::String,
5077    #[prost(message, optional, tag="3")]
5078    pub video: ::core::option::Option<InputVideoState>,
5079    #[prost(message, optional, tag="4")]
5080    pub audio: ::core::option::Option<InputAudioState>,
5081    /// ID of the current/previous room published to
5082    #[prost(string, tag="5")]
5083    pub room_id: ::prost::alloc::string::String,
5084    #[prost(int64, tag="7")]
5085    pub started_at: i64,
5086    #[prost(int64, tag="8")]
5087    pub ended_at: i64,
5088    #[prost(int64, tag="10")]
5089    pub updated_at: i64,
5090    #[prost(string, tag="9")]
5091    pub resource_id: ::prost::alloc::string::String,
5092    #[prost(message, repeated, tag="6")]
5093    pub tracks: ::prost::alloc::vec::Vec<TrackInfo>,
5094}
5095/// Nested message and enum types in `IngressState`.
5096pub mod ingress_state {
5097    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5098    #[repr(i32)]
5099    pub enum Status {
5100        EndpointInactive = 0,
5101        EndpointBuffering = 1,
5102        EndpointPublishing = 2,
5103        EndpointError = 3,
5104        EndpointComplete = 4,
5105    }
5106    impl Status {
5107        /// String value of the enum field names used in the ProtoBuf definition.
5108        ///
5109        /// The values are not transformed in any way and thus are considered stable
5110        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5111        pub fn as_str_name(&self) -> &'static str {
5112            match self {
5113                Status::EndpointInactive => "ENDPOINT_INACTIVE",
5114                Status::EndpointBuffering => "ENDPOINT_BUFFERING",
5115                Status::EndpointPublishing => "ENDPOINT_PUBLISHING",
5116                Status::EndpointError => "ENDPOINT_ERROR",
5117                Status::EndpointComplete => "ENDPOINT_COMPLETE",
5118            }
5119        }
5120        /// Creates an enum from field names used in the ProtoBuf definition.
5121        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5122            match value {
5123                "ENDPOINT_INACTIVE" => Some(Self::EndpointInactive),
5124                "ENDPOINT_BUFFERING" => Some(Self::EndpointBuffering),
5125                "ENDPOINT_PUBLISHING" => Some(Self::EndpointPublishing),
5126                "ENDPOINT_ERROR" => Some(Self::EndpointError),
5127                "ENDPOINT_COMPLETE" => Some(Self::EndpointComplete),
5128                _ => None,
5129            }
5130        }
5131    }
5132}
5133#[allow(clippy::derive_partial_eq_without_eq)]
5134#[derive(Clone, PartialEq, ::prost::Message)]
5135pub struct InputVideoState {
5136    #[prost(string, tag="1")]
5137    pub mime_type: ::prost::alloc::string::String,
5138    #[prost(uint32, tag="2")]
5139    pub average_bitrate: u32,
5140    #[prost(uint32, tag="3")]
5141    pub width: u32,
5142    #[prost(uint32, tag="4")]
5143    pub height: u32,
5144    #[prost(double, tag="5")]
5145    pub framerate: f64,
5146}
5147#[allow(clippy::derive_partial_eq_without_eq)]
5148#[derive(Clone, PartialEq, ::prost::Message)]
5149pub struct InputAudioState {
5150    #[prost(string, tag="1")]
5151    pub mime_type: ::prost::alloc::string::String,
5152    #[prost(uint32, tag="2")]
5153    pub average_bitrate: u32,
5154    #[prost(uint32, tag="3")]
5155    pub channels: u32,
5156    #[prost(uint32, tag="4")]
5157    pub sample_rate: u32,
5158}
5159#[allow(clippy::derive_partial_eq_without_eq)]
5160#[derive(Clone, PartialEq, ::prost::Message)]
5161pub struct UpdateIngressRequest {
5162    #[prost(string, tag="1")]
5163    pub ingress_id: ::prost::alloc::string::String,
5164    #[prost(string, tag="2")]
5165    pub name: ::prost::alloc::string::String,
5166    #[prost(string, tag="3")]
5167    pub room_name: ::prost::alloc::string::String,
5168    #[prost(string, tag="4")]
5169    pub participant_identity: ::prost::alloc::string::String,
5170    #[prost(string, tag="5")]
5171    pub participant_name: ::prost::alloc::string::String,
5172    #[prost(string, tag="9")]
5173    pub participant_metadata: ::prost::alloc::string::String,
5174    #[deprecated]
5175    #[prost(bool, optional, tag="8")]
5176    pub bypass_transcoding: ::core::option::Option<bool>,
5177    #[prost(bool, optional, tag="10")]
5178    pub enable_transcoding: ::core::option::Option<bool>,
5179    #[prost(message, optional, tag="6")]
5180    pub audio: ::core::option::Option<IngressAudioOptions>,
5181    #[prost(message, optional, tag="7")]
5182    pub video: ::core::option::Option<IngressVideoOptions>,
5183    /// The default value is true and when set to false, the new connection attempts will be rejected
5184    #[prost(bool, optional, tag="11")]
5185    pub enabled: ::core::option::Option<bool>,
5186}
5187#[allow(clippy::derive_partial_eq_without_eq)]
5188#[derive(Clone, PartialEq, ::prost::Message)]
5189pub struct ListIngressRequest {
5190    #[prost(message, optional, tag="3")]
5191    pub page_token: ::core::option::Option<TokenPagination>,
5192    /// when blank, lists all ingress endpoints
5193    ///
5194    /// (optional, filter by room name)
5195    #[prost(string, tag="1")]
5196    pub room_name: ::prost::alloc::string::String,
5197    /// (optional, filter by ingress ID)
5198    #[prost(string, tag="2")]
5199    pub ingress_id: ::prost::alloc::string::String,
5200}
5201#[allow(clippy::derive_partial_eq_without_eq)]
5202#[derive(Clone, PartialEq, ::prost::Message)]
5203pub struct ListIngressResponse {
5204    #[prost(message, optional, tag="2")]
5205    pub next_page_token: ::core::option::Option<TokenPagination>,
5206    /// next field id: 3
5207    #[prost(message, repeated, tag="1")]
5208    pub items: ::prost::alloc::vec::Vec<IngressInfo>,
5209}
5210#[allow(clippy::derive_partial_eq_without_eq)]
5211#[derive(Clone, PartialEq, ::prost::Message)]
5212pub struct DeleteIngressRequest {
5213    #[prost(string, tag="1")]
5214    pub ingress_id: ::prost::alloc::string::String,
5215}
5216#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5217#[repr(i32)]
5218pub enum IngressInput {
5219    RtmpInput = 0,
5220    WhipInput = 1,
5221    /// Pull from the provided URL. Only HTTP url are supported, serving either a single media file or a HLS stream
5222    UrlInput = 2,
5223}
5224impl IngressInput {
5225    /// String value of the enum field names used in the ProtoBuf definition.
5226    ///
5227    /// The values are not transformed in any way and thus are considered stable
5228    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5229    pub fn as_str_name(&self) -> &'static str {
5230        match self {
5231            IngressInput::RtmpInput => "RTMP_INPUT",
5232            IngressInput::WhipInput => "WHIP_INPUT",
5233            IngressInput::UrlInput => "URL_INPUT",
5234        }
5235    }
5236    /// Creates an enum from field names used in the ProtoBuf definition.
5237    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5238        match value {
5239            "RTMP_INPUT" => Some(Self::RtmpInput),
5240            "WHIP_INPUT" => Some(Self::WhipInput),
5241            "URL_INPUT" => Some(Self::UrlInput),
5242            _ => None,
5243        }
5244    }
5245}
5246#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5247#[repr(i32)]
5248pub enum IngressAudioEncodingPreset {
5249    /// OPUS, 2 channels, 96kbps
5250    OpusStereo96kbps = 0,
5251    /// OPUS, 1 channel, 64kbps
5252    OpusMono64kbs = 1,
5253}
5254impl IngressAudioEncodingPreset {
5255    /// String value of the enum field names used in the ProtoBuf definition.
5256    ///
5257    /// The values are not transformed in any way and thus are considered stable
5258    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5259    pub fn as_str_name(&self) -> &'static str {
5260        match self {
5261            IngressAudioEncodingPreset::OpusStereo96kbps => "OPUS_STEREO_96KBPS",
5262            IngressAudioEncodingPreset::OpusMono64kbs => "OPUS_MONO_64KBS",
5263        }
5264    }
5265    /// Creates an enum from field names used in the ProtoBuf definition.
5266    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5267        match value {
5268            "OPUS_STEREO_96KBPS" => Some(Self::OpusStereo96kbps),
5269            "OPUS_MONO_64KBS" => Some(Self::OpusMono64kbs),
5270            _ => None,
5271        }
5272    }
5273}
5274#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5275#[repr(i32)]
5276pub enum IngressVideoEncodingPreset {
5277    /// 1280x720,  30fps, 1900kbps main layer, 3 layers total
5278    H264720p30fps3Layers = 0,
5279    /// 1980x1080, 30fps, 3500kbps main layer, 3 layers total
5280    H2641080p30fps3Layers = 1,
5281    ///   960x540,  25fps, 1000kbps  main layer, 2 layers total
5282    H264540p25fps2Layers = 2,
5283    /// 1280x720,  30fps, 1900kbps, no simulcast
5284    H264720p30fps1Layer = 3,
5285    /// 1980x1080, 30fps, 3500kbps, no simulcast
5286    H2641080p30fps1Layer = 4,
5287    /// 1280x720,  30fps, 2500kbps main layer, 3 layers total, higher bitrate for high motion, harder to encode content
5288    H264720p30fps3LayersHighMotion = 5,
5289    /// 1980x1080, 30fps, 4500kbps main layer, 3 layers total, higher bitrate for high motion, harder to encode content
5290    H2641080p30fps3LayersHighMotion = 6,
5291    ///   960x540,  25fps, 1300kbps  main layer, 2 layers total, higher bitrate for high motion, harder to encode content
5292    H264540p25fps2LayersHighMotion = 7,
5293    /// 1280x720,  30fps, 2500kbps, no simulcast, higher bitrate for high motion, harder to encode content
5294    H264720p30fps1LayerHighMotion = 8,
5295    /// 1980x1080, 30fps, 4500kbps, no simulcast, higher bitrate for high motion, harder to encode content
5296    H2641080p30fps1LayerHighMotion = 9,
5297}
5298impl IngressVideoEncodingPreset {
5299    /// String value of the enum field names used in the ProtoBuf definition.
5300    ///
5301    /// The values are not transformed in any way and thus are considered stable
5302    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5303    pub fn as_str_name(&self) -> &'static str {
5304        match self {
5305            IngressVideoEncodingPreset::H264720p30fps3Layers => "H264_720P_30FPS_3_LAYERS",
5306            IngressVideoEncodingPreset::H2641080p30fps3Layers => "H264_1080P_30FPS_3_LAYERS",
5307            IngressVideoEncodingPreset::H264540p25fps2Layers => "H264_540P_25FPS_2_LAYERS",
5308            IngressVideoEncodingPreset::H264720p30fps1Layer => "H264_720P_30FPS_1_LAYER",
5309            IngressVideoEncodingPreset::H2641080p30fps1Layer => "H264_1080P_30FPS_1_LAYER",
5310            IngressVideoEncodingPreset::H264720p30fps3LayersHighMotion => "H264_720P_30FPS_3_LAYERS_HIGH_MOTION",
5311            IngressVideoEncodingPreset::H2641080p30fps3LayersHighMotion => "H264_1080P_30FPS_3_LAYERS_HIGH_MOTION",
5312            IngressVideoEncodingPreset::H264540p25fps2LayersHighMotion => "H264_540P_25FPS_2_LAYERS_HIGH_MOTION",
5313            IngressVideoEncodingPreset::H264720p30fps1LayerHighMotion => "H264_720P_30FPS_1_LAYER_HIGH_MOTION",
5314            IngressVideoEncodingPreset::H2641080p30fps1LayerHighMotion => "H264_1080P_30FPS_1_LAYER_HIGH_MOTION",
5315        }
5316    }
5317    /// Creates an enum from field names used in the ProtoBuf definition.
5318    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5319        match value {
5320            "H264_720P_30FPS_3_LAYERS" => Some(Self::H264720p30fps3Layers),
5321            "H264_1080P_30FPS_3_LAYERS" => Some(Self::H2641080p30fps3Layers),
5322            "H264_540P_25FPS_2_LAYERS" => Some(Self::H264540p25fps2Layers),
5323            "H264_720P_30FPS_1_LAYER" => Some(Self::H264720p30fps1Layer),
5324            "H264_1080P_30FPS_1_LAYER" => Some(Self::H2641080p30fps1Layer),
5325            "H264_720P_30FPS_3_LAYERS_HIGH_MOTION" => Some(Self::H264720p30fps3LayersHighMotion),
5326            "H264_1080P_30FPS_3_LAYERS_HIGH_MOTION" => Some(Self::H2641080p30fps3LayersHighMotion),
5327            "H264_540P_25FPS_2_LAYERS_HIGH_MOTION" => Some(Self::H264540p25fps2LayersHighMotion),
5328            "H264_720P_30FPS_1_LAYER_HIGH_MOTION" => Some(Self::H264720p30fps1LayerHighMotion),
5329            "H264_1080P_30FPS_1_LAYER_HIGH_MOTION" => Some(Self::H2641080p30fps1LayerHighMotion),
5330            _ => None,
5331        }
5332    }
5333}
5334#[allow(clippy::derive_partial_eq_without_eq)]
5335#[derive(Clone, PartialEq, ::prost::Message)]
5336pub struct WebhookEvent {
5337    /// one of room_started, room_finished, participant_joined, participant_left, participant_connection_aborted,
5338    /// track_published, track_unpublished, egress_started, egress_updated, egress_ended,
5339    /// ingress_started, ingress_ended
5340    #[prost(string, tag="1")]
5341    pub event: ::prost::alloc::string::String,
5342    #[prost(message, optional, tag="2")]
5343    pub room: ::core::option::Option<Room>,
5344    /// set when event is participant_* or track_*
5345    #[prost(message, optional, tag="3")]
5346    pub participant: ::core::option::Option<ParticipantInfo>,
5347    /// set when event is egress_*
5348    #[prost(message, optional, tag="9")]
5349    pub egress_info: ::core::option::Option<EgressInfo>,
5350    /// set when event is ingress_*
5351    #[prost(message, optional, tag="10")]
5352    pub ingress_info: ::core::option::Option<IngressInfo>,
5353    /// set when event is track_*
5354    #[prost(message, optional, tag="8")]
5355    pub track: ::core::option::Option<TrackInfo>,
5356    /// unique event uuid
5357    #[prost(string, tag="6")]
5358    pub id: ::prost::alloc::string::String,
5359    /// timestamp in seconds
5360    #[prost(int64, tag="7")]
5361    pub created_at: i64,
5362    #[deprecated]
5363    #[prost(int32, tag="11")]
5364    pub num_dropped: i32,
5365}
5366/// SIPStatus is returned as an error detail in CreateSIPParticipant.
5367#[allow(clippy::derive_partial_eq_without_eq)]
5368#[derive(Clone, PartialEq, ::prost::Message)]
5369pub struct SipStatus {
5370    #[prost(enumeration="SipStatusCode", tag="1")]
5371    pub code: i32,
5372    #[prost(string, tag="2")]
5373    pub status: ::prost::alloc::string::String,
5374}
5375#[allow(clippy::derive_partial_eq_without_eq)]
5376#[derive(Clone, PartialEq, ::prost::Message)]
5377pub struct CreateSipTrunkRequest {
5378    /// CIDR or IPs that traffic is accepted from
5379    /// An empty list means all inbound traffic is accepted.
5380    #[prost(string, repeated, tag="1")]
5381    pub inbound_addresses: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5382    /// IP that SIP INVITE is sent too
5383    #[prost(string, tag="2")]
5384    pub outbound_address: ::prost::alloc::string::String,
5385    /// Number used to make outbound calls
5386    #[prost(string, tag="3")]
5387    pub outbound_number: ::prost::alloc::string::String,
5388    #[deprecated]
5389    #[prost(string, repeated, tag="4")]
5390    pub inbound_numbers_regex: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5391    /// Accepted `To` values. This Trunk will only accept a call made to
5392    /// these numbers. This allows you to have distinct Trunks for different phone
5393    /// numbers at the same provider.
5394    #[prost(string, repeated, tag="9")]
5395    pub inbound_numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5396    /// Username and password used to authenticate inbound and outbound SIP invites
5397    /// May be empty to have no Authentication
5398    #[prost(string, tag="5")]
5399    pub inbound_username: ::prost::alloc::string::String,
5400    #[prost(string, tag="6")]
5401    pub inbound_password: ::prost::alloc::string::String,
5402    #[prost(string, tag="7")]
5403    pub outbound_username: ::prost::alloc::string::String,
5404    #[prost(string, tag="8")]
5405    pub outbound_password: ::prost::alloc::string::String,
5406    /// Optional human-readable name for the Trunk.
5407    #[prost(string, tag="10")]
5408    pub name: ::prost::alloc::string::String,
5409    /// Optional user-defined metadata for the Trunk.
5410    #[prost(string, tag="11")]
5411    pub metadata: ::prost::alloc::string::String,
5412}
5413#[allow(clippy::derive_partial_eq_without_eq)]
5414#[derive(Clone, PartialEq, ::prost::Message)]
5415pub struct ProviderInfo {
5416    #[prost(string, tag="1")]
5417    pub id: ::prost::alloc::string::String,
5418    #[prost(string, tag="2")]
5419    pub name: ::prost::alloc::string::String,
5420    #[prost(enumeration="ProviderType", tag="3")]
5421    pub r#type: i32,
5422    #[prost(bool, tag="4")]
5423    pub prevent_transfer: bool,
5424}
5425#[allow(clippy::derive_partial_eq_without_eq)]
5426#[derive(Clone, PartialEq, ::prost::Message)]
5427pub struct SipTrunkInfo {
5428    #[prost(string, tag="1")]
5429    pub sip_trunk_id: ::prost::alloc::string::String,
5430    #[prost(enumeration="sip_trunk_info::TrunkKind", tag="14")]
5431    pub kind: i32,
5432    /// CIDR or IPs that traffic is accepted from
5433    /// An empty list means all inbound traffic is accepted.
5434    #[prost(string, repeated, tag="2")]
5435    pub inbound_addresses: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5436    /// IP that SIP INVITE is sent too
5437    #[prost(string, tag="3")]
5438    pub outbound_address: ::prost::alloc::string::String,
5439    /// Number used to make outbound calls
5440    #[prost(string, tag="4")]
5441    pub outbound_number: ::prost::alloc::string::String,
5442    /// Transport used for inbound and outbound calls.
5443    #[prost(enumeration="SipTransport", tag="13")]
5444    pub transport: i32,
5445    #[deprecated]
5446    #[prost(string, repeated, tag="5")]
5447    pub inbound_numbers_regex: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5448    /// Accepted `To` values. This Trunk will only accept a call made to
5449    /// these numbers. This allows you to have distinct Trunks for different phone
5450    /// numbers at the same provider.
5451    #[prost(string, repeated, tag="10")]
5452    pub inbound_numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5453    /// Username and password used to authenticate inbound and outbound SIP invites
5454    /// May be empty to have no Authentication
5455    #[prost(string, tag="6")]
5456    pub inbound_username: ::prost::alloc::string::String,
5457    #[prost(string, tag="7")]
5458    pub inbound_password: ::prost::alloc::string::String,
5459    #[prost(string, tag="8")]
5460    pub outbound_username: ::prost::alloc::string::String,
5461    #[prost(string, tag="9")]
5462    pub outbound_password: ::prost::alloc::string::String,
5463    /// Human-readable name for the Trunk.
5464    #[prost(string, tag="11")]
5465    pub name: ::prost::alloc::string::String,
5466    /// User-defined metadata for the Trunk.
5467    #[prost(string, tag="12")]
5468    pub metadata: ::prost::alloc::string::String,
5469}
5470/// Nested message and enum types in `SIPTrunkInfo`.
5471pub mod sip_trunk_info {
5472    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5473    #[repr(i32)]
5474    pub enum TrunkKind {
5475        TrunkLegacy = 0,
5476        TrunkInbound = 1,
5477        TrunkOutbound = 2,
5478    }
5479    impl TrunkKind {
5480        /// String value of the enum field names used in the ProtoBuf definition.
5481        ///
5482        /// The values are not transformed in any way and thus are considered stable
5483        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5484        pub fn as_str_name(&self) -> &'static str {
5485            match self {
5486                TrunkKind::TrunkLegacy => "TRUNK_LEGACY",
5487                TrunkKind::TrunkInbound => "TRUNK_INBOUND",
5488                TrunkKind::TrunkOutbound => "TRUNK_OUTBOUND",
5489            }
5490        }
5491        /// Creates an enum from field names used in the ProtoBuf definition.
5492        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5493            match value {
5494                "TRUNK_LEGACY" => Some(Self::TrunkLegacy),
5495                "TRUNK_INBOUND" => Some(Self::TrunkInbound),
5496                "TRUNK_OUTBOUND" => Some(Self::TrunkOutbound),
5497                _ => None,
5498            }
5499        }
5500    }
5501}
5502#[allow(clippy::derive_partial_eq_without_eq)]
5503#[derive(Clone, PartialEq, ::prost::Message)]
5504pub struct CreateSipInboundTrunkRequest {
5505    /// Trunk ID is ignored
5506    #[prost(message, optional, tag="1")]
5507    pub trunk: ::core::option::Option<SipInboundTrunkInfo>,
5508}
5509#[allow(clippy::derive_partial_eq_without_eq)]
5510#[derive(Clone, PartialEq, ::prost::Message)]
5511pub struct UpdateSipInboundTrunkRequest {
5512    #[prost(string, tag="1")]
5513    pub sip_trunk_id: ::prost::alloc::string::String,
5514    #[prost(oneof="update_sip_inbound_trunk_request::Action", tags="2, 3")]
5515    pub action: ::core::option::Option<update_sip_inbound_trunk_request::Action>,
5516}
5517/// Nested message and enum types in `UpdateSIPInboundTrunkRequest`.
5518pub mod update_sip_inbound_trunk_request {
5519    #[allow(clippy::derive_partial_eq_without_eq)]
5520#[derive(Clone, PartialEq, ::prost::Oneof)]
5521    pub enum Action {
5522        #[prost(message, tag="2")]
5523        Replace(super::SipInboundTrunkInfo),
5524        #[prost(message, tag="3")]
5525        Update(super::SipInboundTrunkUpdate),
5526    }
5527}
5528#[allow(clippy::derive_partial_eq_without_eq)]
5529#[derive(Clone, PartialEq, ::prost::Message)]
5530pub struct SipInboundTrunkInfo {
5531    #[prost(string, tag="1")]
5532    pub sip_trunk_id: ::prost::alloc::string::String,
5533    /// Human-readable name for the Trunk.
5534    #[prost(string, tag="2")]
5535    pub name: ::prost::alloc::string::String,
5536    /// User-defined metadata for the Trunk.
5537    #[prost(string, tag="3")]
5538    pub metadata: ::prost::alloc::string::String,
5539    /// Numbers associated with LiveKit SIP. The Trunk will only accept calls made to these numbers.
5540    /// Creating multiple Trunks with different phone numbers allows having different rules for a single provider.
5541    #[prost(string, repeated, tag="4")]
5542    pub numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5543    /// CIDR or IPs that traffic is accepted from.
5544    /// An empty list means all inbound traffic is accepted.
5545    #[prost(string, repeated, tag="5")]
5546    pub allowed_addresses: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5547    /// Numbers that are allowed to make calls to this Trunk.
5548    /// An empty list means calls from any phone number is accepted.
5549    #[prost(string, repeated, tag="6")]
5550    pub allowed_numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5551    /// Username and password used to authenticate inbound SIP invites.
5552    /// May be empty to have no authentication.
5553    #[prost(string, tag="7")]
5554    pub auth_username: ::prost::alloc::string::String,
5555    #[prost(string, tag="8")]
5556    pub auth_password: ::prost::alloc::string::String,
5557    /// Include these SIP X-* headers in 200 OK responses.
5558    #[prost(map="string, string", tag="9")]
5559    pub headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5560    /// Map SIP X-* headers from INVITE to SIP participant attributes.
5561    #[prost(map="string, string", tag="10")]
5562    pub headers_to_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5563    /// Map LiveKit attributes to SIP X-* headers when sending BYE or REFER requests.
5564    /// Keys are the names of attributes and values are the names of X-* headers they will be mapped to.
5565    #[prost(map="string, string", tag="14")]
5566    pub attributes_to_headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5567    /// Map SIP headers from INVITE to sip.h.* participant attributes automatically.
5568    ///
5569    /// When the names of required headers is known, using headers_to_attributes is strongly recommended.
5570    ///
5571    /// When mapping INVITE headers to response headers with attributes_to_headers map,
5572    /// lowercase header names should be used, for example: sip.h.x-custom-header.
5573    #[prost(enumeration="SipHeaderOptions", tag="15")]
5574    pub include_headers: i32,
5575    /// Max time for the caller to wait for track subscription.
5576    #[prost(message, optional, tag="11")]
5577    pub ringing_timeout: ::core::option::Option<::pbjson_types::Duration>,
5578    /// Max call duration.
5579    #[prost(message, optional, tag="12")]
5580    pub max_call_duration: ::core::option::Option<::pbjson_types::Duration>,
5581    #[prost(bool, tag="13")]
5582    pub krisp_enabled: bool,
5583    #[prost(enumeration="SipMediaEncryption", tag="16")]
5584    pub media_encryption: i32,
5585    #[prost(message, optional, tag="17")]
5586    pub created_at: ::core::option::Option<::pbjson_types::Timestamp>,
5587    #[prost(message, optional, tag="18")]
5588    pub updated_at: ::core::option::Option<::pbjson_types::Timestamp>,
5589}
5590#[allow(clippy::derive_partial_eq_without_eq)]
5591#[derive(Clone, PartialEq, ::prost::Message)]
5592pub struct SipInboundTrunkUpdate {
5593    #[prost(message, optional, tag="1")]
5594    pub numbers: ::core::option::Option<ListUpdate>,
5595    #[prost(message, optional, tag="2")]
5596    pub allowed_addresses: ::core::option::Option<ListUpdate>,
5597    #[prost(message, optional, tag="3")]
5598    pub allowed_numbers: ::core::option::Option<ListUpdate>,
5599    #[prost(string, optional, tag="4")]
5600    pub auth_username: ::core::option::Option<::prost::alloc::string::String>,
5601    #[prost(string, optional, tag="5")]
5602    pub auth_password: ::core::option::Option<::prost::alloc::string::String>,
5603    #[prost(string, optional, tag="6")]
5604    pub name: ::core::option::Option<::prost::alloc::string::String>,
5605    #[prost(string, optional, tag="7")]
5606    pub metadata: ::core::option::Option<::prost::alloc::string::String>,
5607    #[prost(enumeration="SipMediaEncryption", optional, tag="8")]
5608    pub media_encryption: ::core::option::Option<i32>,
5609}
5610#[allow(clippy::derive_partial_eq_without_eq)]
5611#[derive(Clone, PartialEq, ::prost::Message)]
5612pub struct CreateSipOutboundTrunkRequest {
5613    /// Trunk ID is ignored
5614    #[prost(message, optional, tag="1")]
5615    pub trunk: ::core::option::Option<SipOutboundTrunkInfo>,
5616}
5617#[allow(clippy::derive_partial_eq_without_eq)]
5618#[derive(Clone, PartialEq, ::prost::Message)]
5619pub struct UpdateSipOutboundTrunkRequest {
5620    #[prost(string, tag="1")]
5621    pub sip_trunk_id: ::prost::alloc::string::String,
5622    #[prost(oneof="update_sip_outbound_trunk_request::Action", tags="2, 3")]
5623    pub action: ::core::option::Option<update_sip_outbound_trunk_request::Action>,
5624}
5625/// Nested message and enum types in `UpdateSIPOutboundTrunkRequest`.
5626pub mod update_sip_outbound_trunk_request {
5627    #[allow(clippy::derive_partial_eq_without_eq)]
5628#[derive(Clone, PartialEq, ::prost::Oneof)]
5629    pub enum Action {
5630        #[prost(message, tag="2")]
5631        Replace(super::SipOutboundTrunkInfo),
5632        #[prost(message, tag="3")]
5633        Update(super::SipOutboundTrunkUpdate),
5634    }
5635}
5636#[allow(clippy::derive_partial_eq_without_eq)]
5637#[derive(Clone, PartialEq, ::prost::Message)]
5638pub struct SipOutboundTrunkInfo {
5639    #[prost(string, tag="1")]
5640    pub sip_trunk_id: ::prost::alloc::string::String,
5641    /// Human-readable name for the Trunk.
5642    #[prost(string, tag="2")]
5643    pub name: ::prost::alloc::string::String,
5644    /// User-defined metadata for the Trunk.
5645    #[prost(string, tag="3")]
5646    pub metadata: ::prost::alloc::string::String,
5647    /// Hostname or IP that SIP INVITE is sent too.
5648    /// Note that this is not a SIP URI and should not contain the 'sip:' protocol prefix.
5649    #[prost(string, tag="4")]
5650    pub address: ::prost::alloc::string::String,
5651    /// country where the call terminates as ISO 3166-1 alpha-2 (<https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>). This will be used by the livekit infrastructure to route calls.
5652    #[prost(string, tag="14")]
5653    pub destination_country: ::prost::alloc::string::String,
5654    /// SIP Transport used for outbound call.
5655    #[prost(enumeration="SipTransport", tag="5")]
5656    pub transport: i32,
5657    /// Numbers used to make the calls. Random one from this list will be selected.
5658    #[prost(string, repeated, tag="6")]
5659    pub numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5660    /// Username and password used to authenticate with SIP server.
5661    /// May be empty to have no authentication.
5662    #[prost(string, tag="7")]
5663    pub auth_username: ::prost::alloc::string::String,
5664    #[prost(string, tag="8")]
5665    pub auth_password: ::prost::alloc::string::String,
5666    /// Include these SIP X-* headers in INVITE request.
5667    /// These headers are sent as-is and may help identify this call as coming from LiveKit for the other SIP endpoint.
5668    #[prost(map="string, string", tag="9")]
5669    pub headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5670    /// Map SIP X-* headers from 200 OK to SIP participant attributes.
5671    /// Keys are the names of X-* headers and values are the names of attributes they will be mapped to.
5672    #[prost(map="string, string", tag="10")]
5673    pub headers_to_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5674    /// Map LiveKit attributes to SIP X-* headers when sending BYE or REFER requests.
5675    /// Keys are the names of attributes and values are the names of X-* headers they will be mapped to.
5676    #[prost(map="string, string", tag="11")]
5677    pub attributes_to_headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5678    /// Map SIP headers from 200 OK to sip.h.* participant attributes automatically.
5679    ///
5680    /// When the names of required headers is known, using headers_to_attributes is strongly recommended.
5681    ///
5682    /// When mapping 200 OK headers to follow-up request headers with attributes_to_headers map,
5683    /// lowercase header names should be used, for example: sip.h.x-custom-header.
5684    #[prost(enumeration="SipHeaderOptions", tag="12")]
5685    pub include_headers: i32,
5686    #[prost(enumeration="SipMediaEncryption", tag="13")]
5687    pub media_encryption: i32,
5688    /// Optional custom hostname for the 'From' SIP header in outbound INVITEs.
5689    /// When set, outbound calls from this trunk will use this host instead of the default project SIP domain.
5690    /// Enables originating calls from custom domains.
5691    #[prost(string, tag="15")]
5692    pub from_host: ::prost::alloc::string::String,
5693    #[prost(message, optional, tag="16")]
5694    pub created_at: ::core::option::Option<::pbjson_types::Timestamp>,
5695    #[prost(message, optional, tag="17")]
5696    pub updated_at: ::core::option::Option<::pbjson_types::Timestamp>,
5697}
5698#[allow(clippy::derive_partial_eq_without_eq)]
5699#[derive(Clone, PartialEq, ::prost::Message)]
5700pub struct SipOutboundTrunkUpdate {
5701    #[prost(string, optional, tag="1")]
5702    pub address: ::core::option::Option<::prost::alloc::string::String>,
5703    #[prost(enumeration="SipTransport", optional, tag="2")]
5704    pub transport: ::core::option::Option<i32>,
5705    #[prost(string, optional, tag="9")]
5706    pub destination_country: ::core::option::Option<::prost::alloc::string::String>,
5707    #[prost(message, optional, tag="3")]
5708    pub numbers: ::core::option::Option<ListUpdate>,
5709    #[prost(string, optional, tag="4")]
5710    pub auth_username: ::core::option::Option<::prost::alloc::string::String>,
5711    #[prost(string, optional, tag="5")]
5712    pub auth_password: ::core::option::Option<::prost::alloc::string::String>,
5713    #[prost(string, optional, tag="6")]
5714    pub name: ::core::option::Option<::prost::alloc::string::String>,
5715    #[prost(string, optional, tag="7")]
5716    pub metadata: ::core::option::Option<::prost::alloc::string::String>,
5717    #[prost(enumeration="SipMediaEncryption", optional, tag="8")]
5718    pub media_encryption: ::core::option::Option<i32>,
5719    #[prost(string, optional, tag="10")]
5720    pub from_host: ::core::option::Option<::prost::alloc::string::String>,
5721}
5722#[allow(clippy::derive_partial_eq_without_eq)]
5723#[derive(Clone, PartialEq, ::prost::Message)]
5724pub struct GetSipInboundTrunkRequest {
5725    #[prost(string, tag="1")]
5726    pub sip_trunk_id: ::prost::alloc::string::String,
5727}
5728#[allow(clippy::derive_partial_eq_without_eq)]
5729#[derive(Clone, PartialEq, ::prost::Message)]
5730pub struct GetSipInboundTrunkResponse {
5731    #[prost(message, optional, tag="1")]
5732    pub trunk: ::core::option::Option<SipInboundTrunkInfo>,
5733}
5734#[allow(clippy::derive_partial_eq_without_eq)]
5735#[derive(Clone, PartialEq, ::prost::Message)]
5736pub struct GetSipOutboundTrunkRequest {
5737    #[prost(string, tag="1")]
5738    pub sip_trunk_id: ::prost::alloc::string::String,
5739}
5740#[allow(clippy::derive_partial_eq_without_eq)]
5741#[derive(Clone, PartialEq, ::prost::Message)]
5742pub struct GetSipOutboundTrunkResponse {
5743    #[prost(message, optional, tag="1")]
5744    pub trunk: ::core::option::Option<SipOutboundTrunkInfo>,
5745}
5746#[allow(clippy::derive_partial_eq_without_eq)]
5747#[derive(Clone, PartialEq, ::prost::Message)]
5748pub struct ListSipTrunkRequest {
5749    #[prost(message, optional, tag="1")]
5750    pub page: ::core::option::Option<Pagination>,
5751}
5752#[allow(clippy::derive_partial_eq_without_eq)]
5753#[derive(Clone, PartialEq, ::prost::Message)]
5754pub struct ListSipTrunkResponse {
5755    #[prost(message, repeated, tag="1")]
5756    pub items: ::prost::alloc::vec::Vec<SipTrunkInfo>,
5757}
5758/// ListSIPInboundTrunkRequest lists inbound trunks for given filters. If no filters are set, all trunks are listed.
5759#[allow(clippy::derive_partial_eq_without_eq)]
5760#[derive(Clone, PartialEq, ::prost::Message)]
5761pub struct ListSipInboundTrunkRequest {
5762    #[prost(message, optional, tag="3")]
5763    pub page: ::core::option::Option<Pagination>,
5764    /// Trunk IDs to list. If this option is set, the response will contains trunks in the same order.
5765    /// If any of the trunks is missing, a nil item in that position will be sent in the response.
5766    #[prost(string, repeated, tag="1")]
5767    pub trunk_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5768    /// Only list trunks that contain one of the numbers, including wildcard trunks.
5769    #[prost(string, repeated, tag="2")]
5770    pub numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5771}
5772#[allow(clippy::derive_partial_eq_without_eq)]
5773#[derive(Clone, PartialEq, ::prost::Message)]
5774pub struct ListSipInboundTrunkResponse {
5775    #[prost(message, repeated, tag="1")]
5776    pub items: ::prost::alloc::vec::Vec<SipInboundTrunkInfo>,
5777}
5778/// ListSIPOutboundTrunkRequest lists outbound trunks for given filters. If no filters are set, all trunks are listed.
5779#[allow(clippy::derive_partial_eq_without_eq)]
5780#[derive(Clone, PartialEq, ::prost::Message)]
5781pub struct ListSipOutboundTrunkRequest {
5782    #[prost(message, optional, tag="3")]
5783    pub page: ::core::option::Option<Pagination>,
5784    /// Trunk IDs to list. If this option is set, the response will contains trunks in the same order.
5785    /// If any of the trunks is missing, a nil item in that position will be sent in the response.
5786    #[prost(string, repeated, tag="1")]
5787    pub trunk_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5788    /// Only list trunks that contain one of the numbers, including wildcard trunks.
5789    #[prost(string, repeated, tag="2")]
5790    pub numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5791}
5792#[allow(clippy::derive_partial_eq_without_eq)]
5793#[derive(Clone, PartialEq, ::prost::Message)]
5794pub struct ListSipOutboundTrunkResponse {
5795    #[prost(message, repeated, tag="1")]
5796    pub items: ::prost::alloc::vec::Vec<SipOutboundTrunkInfo>,
5797}
5798#[allow(clippy::derive_partial_eq_without_eq)]
5799#[derive(Clone, PartialEq, ::prost::Message)]
5800pub struct DeleteSipTrunkRequest {
5801    #[prost(string, tag="1")]
5802    pub sip_trunk_id: ::prost::alloc::string::String,
5803}
5804#[allow(clippy::derive_partial_eq_without_eq)]
5805#[derive(Clone, PartialEq, ::prost::Message)]
5806pub struct SipDispatchRuleDirect {
5807    /// What room should call be directed into
5808    #[prost(string, tag="1")]
5809    pub room_name: ::prost::alloc::string::String,
5810    /// Optional pin required to enter room
5811    #[prost(string, tag="2")]
5812    pub pin: ::prost::alloc::string::String,
5813}
5814#[allow(clippy::derive_partial_eq_without_eq)]
5815#[derive(Clone, PartialEq, ::prost::Message)]
5816pub struct SipDispatchRuleIndividual {
5817    /// Prefix used on new room name
5818    #[prost(string, tag="1")]
5819    pub room_prefix: ::prost::alloc::string::String,
5820    /// Optional pin required to enter room
5821    #[prost(string, tag="2")]
5822    pub pin: ::prost::alloc::string::String,
5823    /// Optionally append random suffix
5824    #[prost(bool, tag="3")]
5825    pub no_randomness: bool,
5826}
5827#[allow(clippy::derive_partial_eq_without_eq)]
5828#[derive(Clone, PartialEq, ::prost::Message)]
5829pub struct SipDispatchRuleCallee {
5830    /// Prefix used on new room name
5831    #[prost(string, tag="1")]
5832    pub room_prefix: ::prost::alloc::string::String,
5833    /// Optional pin required to enter room
5834    #[prost(string, tag="2")]
5835    pub pin: ::prost::alloc::string::String,
5836    /// Optionally append random suffix
5837    #[prost(bool, tag="3")]
5838    pub randomize: bool,
5839}
5840#[allow(clippy::derive_partial_eq_without_eq)]
5841#[derive(Clone, PartialEq, ::prost::Message)]
5842pub struct SipDispatchRule {
5843    #[prost(oneof="sip_dispatch_rule::Rule", tags="1, 2, 3")]
5844    pub rule: ::core::option::Option<sip_dispatch_rule::Rule>,
5845}
5846/// Nested message and enum types in `SIPDispatchRule`.
5847pub mod sip_dispatch_rule {
5848    #[allow(clippy::derive_partial_eq_without_eq)]
5849#[derive(Clone, PartialEq, ::prost::Oneof)]
5850    pub enum Rule {
5851        /// SIPDispatchRuleDirect is a `SIP Dispatch Rule` that puts a user directly into a room
5852        /// This places users into an existing room. Optionally you can require a pin before a user can
5853        /// enter the room
5854        #[prost(message, tag="1")]
5855        DispatchRuleDirect(super::SipDispatchRuleDirect),
5856        /// SIPDispatchRuleIndividual is a `SIP Dispatch Rule` that creates a new room for each caller.
5857        #[prost(message, tag="2")]
5858        DispatchRuleIndividual(super::SipDispatchRuleIndividual),
5859        /// SIPDispatchRuleCallee is a `SIP Dispatch Rule` that creates a new room for each callee.
5860        #[prost(message, tag="3")]
5861        DispatchRuleCallee(super::SipDispatchRuleCallee),
5862    }
5863}
5864#[allow(clippy::derive_partial_eq_without_eq)]
5865#[derive(Clone, PartialEq, ::prost::Message)]
5866pub struct CreateSipDispatchRuleRequest {
5867    /// Rule ID is ignored
5868    #[prost(message, optional, tag="10")]
5869    pub dispatch_rule: ::core::option::Option<SipDispatchRuleInfo>,
5870    #[deprecated]
5871    #[prost(message, optional, tag="1")]
5872    pub rule: ::core::option::Option<SipDispatchRule>,
5873    /// What trunks are accepted for this dispatch rule
5874    /// If empty all trunks will match this dispatch rule
5875    #[deprecated]
5876    #[prost(string, repeated, tag="2")]
5877    pub trunk_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5878    /// By default the From value (Phone number) is used for participant name/identity and added to attributes.
5879    /// If true, a random value for identity will be used and numbers will be omitted from attributes.
5880    #[deprecated]
5881    #[prost(bool, tag="3")]
5882    pub hide_phone_number: bool,
5883    /// Dispatch Rule will only accept a call made to these numbers (if set).
5884    #[deprecated]
5885    #[prost(string, repeated, tag="6")]
5886    pub inbound_numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5887    /// Optional human-readable name for the Dispatch Rule.
5888    #[deprecated]
5889    #[prost(string, tag="4")]
5890    pub name: ::prost::alloc::string::String,
5891    /// User-defined metadata for the Dispatch Rule.
5892    /// Participants created by this rule will inherit this metadata.
5893    #[deprecated]
5894    #[prost(string, tag="5")]
5895    pub metadata: ::prost::alloc::string::String,
5896    /// User-defined attributes for the Dispatch Rule.
5897    /// Participants created by this rule will inherit these attributes.
5898    #[prost(map="string, string", tag="7")]
5899    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5900    /// Cloud-only, config preset to use
5901    #[deprecated]
5902    #[prost(string, tag="8")]
5903    pub room_preset: ::prost::alloc::string::String,
5904    /// RoomConfiguration to use if the participant initiates the room
5905    #[deprecated]
5906    #[prost(message, optional, tag="9")]
5907    pub room_config: ::core::option::Option<RoomConfiguration>,
5908}
5909#[allow(clippy::derive_partial_eq_without_eq)]
5910#[derive(Clone, PartialEq, ::prost::Message)]
5911pub struct UpdateSipDispatchRuleRequest {
5912    #[prost(string, tag="1")]
5913    pub sip_dispatch_rule_id: ::prost::alloc::string::String,
5914    #[prost(oneof="update_sip_dispatch_rule_request::Action", tags="2, 3")]
5915    pub action: ::core::option::Option<update_sip_dispatch_rule_request::Action>,
5916}
5917/// Nested message and enum types in `UpdateSIPDispatchRuleRequest`.
5918pub mod update_sip_dispatch_rule_request {
5919    #[allow(clippy::derive_partial_eq_without_eq)]
5920#[derive(Clone, PartialEq, ::prost::Oneof)]
5921    pub enum Action {
5922        #[prost(message, tag="2")]
5923        Replace(super::SipDispatchRuleInfo),
5924        #[prost(message, tag="3")]
5925        Update(super::SipDispatchRuleUpdate),
5926    }
5927}
5928#[allow(clippy::derive_partial_eq_without_eq)]
5929#[derive(Clone, PartialEq, ::prost::Message)]
5930pub struct SipDispatchRuleInfo {
5931    #[prost(string, tag="1")]
5932    pub sip_dispatch_rule_id: ::prost::alloc::string::String,
5933    #[prost(message, optional, tag="2")]
5934    pub rule: ::core::option::Option<SipDispatchRule>,
5935    #[prost(string, repeated, tag="3")]
5936    pub trunk_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5937    #[prost(bool, tag="4")]
5938    pub hide_phone_number: bool,
5939    /// Dispatch Rule will only accept a call made from these numbers (if set).
5940    #[prost(string, repeated, tag="7")]
5941    pub inbound_numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5942    /// Dispatch Rule will only accept a call made to these numbers (if set).
5943    #[prost(string, repeated, tag="13")]
5944    pub numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5945    /// Human-readable name for the Dispatch Rule.
5946    #[prost(string, tag="5")]
5947    pub name: ::prost::alloc::string::String,
5948    /// User-defined metadata for the Dispatch Rule.
5949    /// Participants created by this rule will inherit this metadata.
5950    #[prost(string, tag="6")]
5951    pub metadata: ::prost::alloc::string::String,
5952    /// User-defined attributes for the Dispatch Rule.
5953    /// Participants created by this rule will inherit these attributes.
5954    #[prost(map="string, string", tag="8")]
5955    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5956    /// Cloud-only, config preset to use
5957    #[prost(string, tag="9")]
5958    pub room_preset: ::prost::alloc::string::String,
5959    /// RoomConfiguration to use if the participant initiates the room
5960    #[prost(message, optional, tag="10")]
5961    pub room_config: ::core::option::Option<RoomConfiguration>,
5962    #[prost(bool, tag="11")]
5963    pub krisp_enabled: bool,
5964    #[prost(enumeration="SipMediaEncryption", tag="12")]
5965    pub media_encryption: i32,
5966    #[prost(message, optional, tag="14")]
5967    pub created_at: ::core::option::Option<::pbjson_types::Timestamp>,
5968    #[prost(message, optional, tag="15")]
5969    pub updated_at: ::core::option::Option<::pbjson_types::Timestamp>,
5970}
5971#[allow(clippy::derive_partial_eq_without_eq)]
5972#[derive(Clone, PartialEq, ::prost::Message)]
5973pub struct SipDispatchRuleUpdate {
5974    #[prost(message, optional, tag="1")]
5975    pub trunk_ids: ::core::option::Option<ListUpdate>,
5976    #[prost(message, optional, tag="2")]
5977    pub rule: ::core::option::Option<SipDispatchRule>,
5978    #[prost(string, optional, tag="3")]
5979    pub name: ::core::option::Option<::prost::alloc::string::String>,
5980    #[prost(string, optional, tag="4")]
5981    pub metadata: ::core::option::Option<::prost::alloc::string::String>,
5982    #[prost(map="string, string", tag="5")]
5983    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5984    #[prost(enumeration="SipMediaEncryption", optional, tag="6")]
5985    pub media_encryption: ::core::option::Option<i32>,
5986}
5987/// ListSIPDispatchRuleRequest lists dispatch rules for given filters. If no filters are set, all rules are listed.
5988#[allow(clippy::derive_partial_eq_without_eq)]
5989#[derive(Clone, PartialEq, ::prost::Message)]
5990pub struct ListSipDispatchRuleRequest {
5991    #[prost(message, optional, tag="3")]
5992    pub page: ::core::option::Option<Pagination>,
5993    /// Rule IDs to list. If this option is set, the response will contains rules in the same order.
5994    /// If any of the rules is missing, a nil item in that position will be sent in the response.
5995    #[prost(string, repeated, tag="1")]
5996    pub dispatch_rule_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5997    /// Only list rules that contain one of the Trunk IDs, including wildcard rules.
5998    #[prost(string, repeated, tag="2")]
5999    pub trunk_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6000}
6001#[allow(clippy::derive_partial_eq_without_eq)]
6002#[derive(Clone, PartialEq, ::prost::Message)]
6003pub struct ListSipDispatchRuleResponse {
6004    #[prost(message, repeated, tag="1")]
6005    pub items: ::prost::alloc::vec::Vec<SipDispatchRuleInfo>,
6006}
6007#[allow(clippy::derive_partial_eq_without_eq)]
6008#[derive(Clone, PartialEq, ::prost::Message)]
6009pub struct DeleteSipDispatchRuleRequest {
6010    #[prost(string, tag="1")]
6011    pub sip_dispatch_rule_id: ::prost::alloc::string::String,
6012}
6013#[allow(clippy::derive_partial_eq_without_eq)]
6014#[derive(Clone, PartialEq, ::prost::Message)]
6015pub struct SipOutboundConfig {
6016    /// SIP server address
6017    #[prost(string, tag="1")]
6018    pub hostname: ::prost::alloc::string::String,
6019    /// country where the call terminates as ISO 3166-1 alpha-2 (<https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>). This will be used by the livekit infrastructure to route calls.
6020    #[prost(string, tag="7")]
6021    pub destination_country: ::prost::alloc::string::String,
6022    /// SIP Transport used for outbound call.
6023    #[prost(enumeration="SipTransport", tag="2")]
6024    pub transport: i32,
6025    /// Username and password used to authenticate with SIP server.
6026    /// May be empty to have no authentication.
6027    #[prost(string, tag="3")]
6028    pub auth_username: ::prost::alloc::string::String,
6029    #[prost(string, tag="4")]
6030    pub auth_password: ::prost::alloc::string::String,
6031    /// Map SIP X-* headers from 200 OK to SIP participant attributes.
6032    /// Keys are the names of X-* headers and values are the names of attributes they will be mapped to.
6033    #[prost(map="string, string", tag="5")]
6034    pub headers_to_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6035    /// Map LiveKit attributes to SIP X-* headers when sending BYE or REFER requests.
6036    /// Keys are the names of attributes and values are the names of X-* headers they will be mapped to.
6037    #[prost(map="string, string", tag="6")]
6038    pub attributes_to_headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6039    /// Optional custom hostname for the 'From' SIP header. When set, outbound calls use this host instead of the default project SIP domain.
6040    #[prost(string, tag="8")]
6041    pub from_host: ::prost::alloc::string::String,
6042}
6043/// A SIP Participant is a singular SIP session connected to a LiveKit room via
6044/// a SIP Trunk into a SIP DispatchRule
6045#[allow(clippy::derive_partial_eq_without_eq)]
6046#[derive(Clone, PartialEq, ::prost::Message)]
6047pub struct CreateSipParticipantRequest {
6048    /// What SIP Trunk should be used to dial the user
6049    #[prost(string, tag="1")]
6050    pub sip_trunk_id: ::prost::alloc::string::String,
6051    #[prost(message, optional, tag="20")]
6052    pub trunk: ::core::option::Option<SipOutboundConfig>,
6053    /// What number should be dialed via SIP
6054    #[prost(string, tag="2")]
6055    pub sip_call_to: ::prost::alloc::string::String,
6056    /// Optional SIP From number to use. If empty, trunk number is used.
6057    #[prost(string, tag="15")]
6058    pub sip_number: ::prost::alloc::string::String,
6059    /// What LiveKit room should this participant be connected too
6060    #[prost(string, tag="3")]
6061    pub room_name: ::prost::alloc::string::String,
6062    /// Optional identity of the participant in LiveKit room
6063    #[prost(string, tag="4")]
6064    pub participant_identity: ::prost::alloc::string::String,
6065    /// Optional name of the participant in LiveKit room
6066    #[prost(string, tag="7")]
6067    pub participant_name: ::prost::alloc::string::String,
6068    /// Optional user-defined metadata. Will be attached to a created Participant in the room.
6069    #[prost(string, tag="8")]
6070    pub participant_metadata: ::prost::alloc::string::String,
6071    /// Optional user-defined attributes. Will be attached to a created Participant in the room.
6072    #[prost(map="string, string", tag="9")]
6073    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6074    /// Optionally send following DTMF digits (extension codes) when making a call.
6075    /// Character 'w' can be used to add a 0.5 sec delay.
6076    #[prost(string, tag="5")]
6077    pub dtmf: ::prost::alloc::string::String,
6078    /// Optionally play dialtone in the room as an audible indicator for existing participants. The `play_ringtone` option is deprectated but has the same effect.
6079    #[deprecated]
6080    #[prost(bool, tag="6")]
6081    pub play_ringtone: bool,
6082    #[prost(bool, tag="13")]
6083    pub play_dialtone: bool,
6084    /// By default the From value (Phone number) is used for participant name/identity (if not set) and added to attributes.
6085    /// If true, a random value for identity will be used and numbers will be omitted from attributes.
6086    #[prost(bool, tag="10")]
6087    pub hide_phone_number: bool,
6088    /// These headers are sent as-is and may help identify this call as coming from LiveKit for the other SIP endpoint.
6089    #[prost(map="string, string", tag="16")]
6090    pub headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6091    /// Map SIP headers from 200 OK to sip.h.* participant attributes automatically.
6092    ///
6093    /// When the names of required headers is known, using headers_to_attributes is strongly recommended.
6094    ///
6095    /// When mapping 200 OK headers to follow-up request headers with attributes_to_headers map,
6096    /// lowercase header names should be used, for example: sip.h.x-custom-header.
6097    #[prost(enumeration="SipHeaderOptions", tag="17")]
6098    pub include_headers: i32,
6099    /// Max time for the callee to answer the call.
6100    #[prost(message, optional, tag="11")]
6101    pub ringing_timeout: ::core::option::Option<::pbjson_types::Duration>,
6102    /// Max call duration.
6103    #[prost(message, optional, tag="12")]
6104    pub max_call_duration: ::core::option::Option<::pbjson_types::Duration>,
6105    /// Enable voice isolation for the callee.
6106    #[prost(bool, tag="14")]
6107    pub krisp_enabled: bool,
6108    #[prost(enumeration="SipMediaEncryption", tag="18")]
6109    pub media_encryption: i32,
6110    /// Wait for the answer for the call before returning.
6111    #[prost(bool, tag="19")]
6112    pub wait_until_answered: bool,
6113    /// Optional display name for the 'From' SIP header.
6114    ///
6115    /// Cases:
6116    /// 1) Unspecified: Use legacy behavior - display name will be set to be the caller's number.
6117    /// 2) Empty string: Do not send a display name, which will result in a CNAM lookup downstream.
6118    /// 3) Non-empty: Use the specified value as the display name.
6119    #[prost(string, optional, tag="21")]
6120    pub display_name: ::core::option::Option<::prost::alloc::string::String>,
6121    /// NEXT ID: 23
6122    #[prost(message, optional, tag="22")]
6123    pub destination: ::core::option::Option<Destination>,
6124}
6125#[allow(clippy::derive_partial_eq_without_eq)]
6126#[derive(Clone, PartialEq, ::prost::Message)]
6127pub struct SipParticipantInfo {
6128    #[prost(string, tag="1")]
6129    pub participant_id: ::prost::alloc::string::String,
6130    #[prost(string, tag="2")]
6131    pub participant_identity: ::prost::alloc::string::String,
6132    #[prost(string, tag="3")]
6133    pub room_name: ::prost::alloc::string::String,
6134    #[prost(string, tag="4")]
6135    pub sip_call_id: ::prost::alloc::string::String,
6136}
6137#[allow(clippy::derive_partial_eq_without_eq)]
6138#[derive(Clone, PartialEq, ::prost::Message)]
6139pub struct TransferSipParticipantRequest {
6140    #[prost(string, tag="1")]
6141    pub participant_identity: ::prost::alloc::string::String,
6142    #[prost(string, tag="2")]
6143    pub room_name: ::prost::alloc::string::String,
6144    #[prost(string, tag="3")]
6145    pub transfer_to: ::prost::alloc::string::String,
6146    /// Optionally play dialtone to the SIP participant as an audible indicator of being transferred
6147    #[prost(bool, tag="4")]
6148    pub play_dialtone: bool,
6149    /// Add the following headers to the REFER SIP request.
6150    #[prost(map="string, string", tag="5")]
6151    pub headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6152    /// Max time for the transfer destination to answer the call.
6153    #[prost(message, optional, tag="6")]
6154    pub ringing_timeout: ::core::option::Option<::pbjson_types::Duration>,
6155}
6156#[allow(clippy::derive_partial_eq_without_eq)]
6157#[derive(Clone, PartialEq, ::prost::Message)]
6158pub struct SipCallInfo {
6159    #[prost(string, tag="1")]
6160    pub call_id: ::prost::alloc::string::String,
6161    #[prost(string, tag="2")]
6162    pub trunk_id: ::prost::alloc::string::String,
6163    #[prost(string, tag="16")]
6164    pub dispatch_rule_id: ::prost::alloc::string::String,
6165    #[prost(string, tag="17")]
6166    pub region: ::prost::alloc::string::String,
6167    #[prost(string, tag="3")]
6168    pub room_name: ::prost::alloc::string::String,
6169    /// ID of the current/previous room published to
6170    #[prost(string, tag="4")]
6171    pub room_id: ::prost::alloc::string::String,
6172    #[prost(string, tag="5")]
6173    pub participant_identity: ::prost::alloc::string::String,
6174    #[prost(map="string, string", tag="18")]
6175    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6176    #[prost(message, optional, tag="6")]
6177    pub from_uri: ::core::option::Option<SipUri>,
6178    #[prost(message, optional, tag="7")]
6179    pub to_uri: ::core::option::Option<SipUri>,
6180    #[deprecated]
6181    #[prost(int64, tag="9")]
6182    pub created_at: i64,
6183    #[deprecated]
6184    #[prost(int64, tag="10")]
6185    pub started_at: i64,
6186    #[deprecated]
6187    #[prost(int64, tag="11")]
6188    pub ended_at: i64,
6189    #[prost(enumeration="SipFeature", repeated, tag="14")]
6190    pub enabled_features: ::prost::alloc::vec::Vec<i32>,
6191    #[prost(enumeration="SipCallDirection", tag="15")]
6192    pub call_direction: i32,
6193    #[prost(enumeration="SipCallStatus", tag="8")]
6194    pub call_status: i32,
6195    #[prost(int64, tag="22")]
6196    pub created_at_ns: i64,
6197    #[prost(int64, tag="23")]
6198    pub started_at_ns: i64,
6199    #[prost(int64, tag="24")]
6200    pub ended_at_ns: i64,
6201    #[prost(enumeration="DisconnectReason", tag="12")]
6202    pub disconnect_reason: i32,
6203    #[prost(string, tag="13")]
6204    pub error: ::prost::alloc::string::String,
6205    #[prost(message, optional, tag="19")]
6206    pub call_status_code: ::core::option::Option<SipStatus>,
6207    #[prost(string, tag="20")]
6208    pub audio_codec: ::prost::alloc::string::String,
6209    #[prost(string, tag="21")]
6210    pub media_encryption: ::prost::alloc::string::String,
6211    #[prost(string, tag="25")]
6212    pub pcap_file_link: ::prost::alloc::string::String,
6213    #[prost(message, repeated, tag="26")]
6214    pub call_context: ::prost::alloc::vec::Vec<::pbjson_types::Any>,
6215    #[prost(message, optional, tag="27")]
6216    pub provider_info: ::core::option::Option<ProviderInfo>,
6217    #[prost(string, tag="28")]
6218    pub sip_call_id: ::prost::alloc::string::String,
6219}
6220#[allow(clippy::derive_partial_eq_without_eq)]
6221#[derive(Clone, PartialEq, ::prost::Message)]
6222pub struct SipTransferInfo {
6223    #[prost(string, tag="1")]
6224    pub transfer_id: ::prost::alloc::string::String,
6225    #[prost(string, tag="2")]
6226    pub call_id: ::prost::alloc::string::String,
6227    #[prost(string, tag="3")]
6228    pub transfer_to: ::prost::alloc::string::String,
6229    #[prost(int64, tag="4")]
6230    pub transfer_initiated_at_ns: i64,
6231    #[prost(int64, tag="5")]
6232    pub transfer_completed_at_ns: i64,
6233    #[prost(enumeration="SipTransferStatus", tag="6")]
6234    pub transfer_status: i32,
6235    #[prost(string, tag="7")]
6236    pub error: ::prost::alloc::string::String,
6237    #[prost(message, optional, tag="8")]
6238    pub transfer_status_code: ::core::option::Option<SipStatus>,
6239}
6240#[allow(clippy::derive_partial_eq_without_eq)]
6241#[derive(Clone, PartialEq, ::prost::Message)]
6242pub struct SipUri {
6243    #[prost(string, tag="1")]
6244    pub user: ::prost::alloc::string::String,
6245    #[prost(string, tag="2")]
6246    pub host: ::prost::alloc::string::String,
6247    #[prost(string, tag="3")]
6248    pub ip: ::prost::alloc::string::String,
6249    #[prost(uint32, tag="4")]
6250    pub port: u32,
6251    #[prost(enumeration="SipTransport", tag="5")]
6252    pub transport: i32,
6253}
6254#[allow(clippy::derive_partial_eq_without_eq)]
6255#[derive(Clone, PartialEq, ::prost::Message)]
6256pub struct Destination {
6257    #[prost(string, tag="1")]
6258    pub city: ::prost::alloc::string::String,
6259    #[prost(string, tag="2")]
6260    pub country: ::prost::alloc::string::String,
6261    #[prost(string, tag="3")]
6262    pub region: ::prost::alloc::string::String,
6263}
6264#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6265#[repr(i32)]
6266pub enum SipStatusCode {
6267    SipStatusUnknown = 0,
6268    SipStatusTrying = 100,
6269    SipStatusRinging = 180,
6270    SipStatusCallIsForwarded = 181,
6271    SipStatusQueued = 182,
6272    SipStatusSessionProgress = 183,
6273    SipStatusEarlyDialogTerminated = 199,
6274    SipStatusOk = 200,
6275    SipStatusAccepted = 202,
6276    SipStatusNoNotification = 204,
6277    SipStatusMultipleChoices = 300,
6278    SipStatusMovedPermanently = 301,
6279    SipStatusMovedTemporarily = 302,
6280    SipStatusUseProxy = 305,
6281    SipStatusAlternativeService = 380,
6282    SipStatusBadRequest = 400,
6283    SipStatusUnauthorized = 401,
6284    SipStatusPaymentRequired = 402,
6285    SipStatusForbidden = 403,
6286    SipStatusNotfound = 404,
6287    SipStatusMethodNotAllowed = 405,
6288    SipStatusNotAcceptable = 406,
6289    SipStatusProxyAuthRequired = 407,
6290    SipStatusRequestTimeout = 408,
6291    SipStatusConflict = 409,
6292    SipStatusGone = 410,
6293    SipStatusLengthRequired = 411,
6294    SipStatusConditionalRequestFailed = 412,
6295    SipStatusRequestEntityTooLarge = 413,
6296    SipStatusRequestUriTooLong = 414,
6297    SipStatusUnsupportedMediaType = 415,
6298    SipStatusRequestedRangeNotSatisfiable = 416,
6299    SipStatusUnknownResourcePriority = 417,
6300    SipStatusBadExtension = 420,
6301    SipStatusExtensionRequired = 421,
6302    SipStatusSessionIntervalTooSmall = 422,
6303    SipStatusIntervalTooBrief = 423,
6304    SipStatusBadLocationInformation = 424,
6305    SipStatusBadAlertMessage = 425,
6306    SipStatusUseIdentityHeader = 428,
6307    SipStatusProvideReferrerIdentity = 429,
6308    SipStatusFlowFailed = 430,
6309    SipStatusAnonymityDisallowed = 433,
6310    SipStatusBadIdentityInfo = 436,
6311    SipStatusUnsupportedCertificate = 437,
6312    SipStatusInvalidIdentityHeader = 438,
6313    SipStatusFirstHopLacksOutboundSupport = 439,
6314    SipStatusMaxBreadthExceeded = 440,
6315    SipStatusBadInfoPackage = 469,
6316    SipStatusConsentNeeded = 470,
6317    SipStatusTemporarilyUnavailable = 480,
6318    SipStatusCallTransactionDoesNotExists = 481,
6319    SipStatusLoopDetected = 482,
6320    SipStatusTooManyHops = 483,
6321    SipStatusAddressIncomplete = 484,
6322    SipStatusAmbiguous = 485,
6323    SipStatusBusyHere = 486,
6324    SipStatusRequestTerminated = 487,
6325    SipStatusNotAcceptableHere = 488,
6326    SipStatusBadEvent = 489,
6327    SipStatusRequestPending = 491,
6328    SipStatusUndecipherable = 493,
6329    SipStatusSecurityAgreementRequired = 494,
6330    SipStatusInternalServerError = 500,
6331    SipStatusNotImplemented = 501,
6332    SipStatusBadGateway = 502,
6333    SipStatusServiceUnavailable = 503,
6334    SipStatusGatewayTimeout = 504,
6335    SipStatusVersionNotSupported = 505,
6336    SipStatusMessageTooLarge = 513,
6337    SipStatusGlobalBusyEverywhere = 600,
6338    SipStatusGlobalDecline = 603,
6339    SipStatusGlobalDoesNotExistAnywhere = 604,
6340    SipStatusGlobalNotAcceptable = 606,
6341    SipStatusGlobalUnwanted = 607,
6342    SipStatusGlobalRejected = 608,
6343}
6344impl SipStatusCode {
6345    /// String value of the enum field names used in the ProtoBuf definition.
6346    ///
6347    /// The values are not transformed in any way and thus are considered stable
6348    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6349    pub fn as_str_name(&self) -> &'static str {
6350        match self {
6351            SipStatusCode::SipStatusUnknown => "SIP_STATUS_UNKNOWN",
6352            SipStatusCode::SipStatusTrying => "SIP_STATUS_TRYING",
6353            SipStatusCode::SipStatusRinging => "SIP_STATUS_RINGING",
6354            SipStatusCode::SipStatusCallIsForwarded => "SIP_STATUS_CALL_IS_FORWARDED",
6355            SipStatusCode::SipStatusQueued => "SIP_STATUS_QUEUED",
6356            SipStatusCode::SipStatusSessionProgress => "SIP_STATUS_SESSION_PROGRESS",
6357            SipStatusCode::SipStatusEarlyDialogTerminated => "SIP_STATUS_EARLY_DIALOG_TERMINATED",
6358            SipStatusCode::SipStatusOk => "SIP_STATUS_OK",
6359            SipStatusCode::SipStatusAccepted => "SIP_STATUS_ACCEPTED",
6360            SipStatusCode::SipStatusNoNotification => "SIP_STATUS_NO_NOTIFICATION",
6361            SipStatusCode::SipStatusMultipleChoices => "SIP_STATUS_MULTIPLE_CHOICES",
6362            SipStatusCode::SipStatusMovedPermanently => "SIP_STATUS_MOVED_PERMANENTLY",
6363            SipStatusCode::SipStatusMovedTemporarily => "SIP_STATUS_MOVED_TEMPORARILY",
6364            SipStatusCode::SipStatusUseProxy => "SIP_STATUS_USE_PROXY",
6365            SipStatusCode::SipStatusAlternativeService => "SIP_STATUS_ALTERNATIVE_SERVICE",
6366            SipStatusCode::SipStatusBadRequest => "SIP_STATUS_BAD_REQUEST",
6367            SipStatusCode::SipStatusUnauthorized => "SIP_STATUS_UNAUTHORIZED",
6368            SipStatusCode::SipStatusPaymentRequired => "SIP_STATUS_PAYMENT_REQUIRED",
6369            SipStatusCode::SipStatusForbidden => "SIP_STATUS_FORBIDDEN",
6370            SipStatusCode::SipStatusNotfound => "SIP_STATUS_NOTFOUND",
6371            SipStatusCode::SipStatusMethodNotAllowed => "SIP_STATUS_METHOD_NOT_ALLOWED",
6372            SipStatusCode::SipStatusNotAcceptable => "SIP_STATUS_NOT_ACCEPTABLE",
6373            SipStatusCode::SipStatusProxyAuthRequired => "SIP_STATUS_PROXY_AUTH_REQUIRED",
6374            SipStatusCode::SipStatusRequestTimeout => "SIP_STATUS_REQUEST_TIMEOUT",
6375            SipStatusCode::SipStatusConflict => "SIP_STATUS_CONFLICT",
6376            SipStatusCode::SipStatusGone => "SIP_STATUS_GONE",
6377            SipStatusCode::SipStatusLengthRequired => "SIP_STATUS_LENGTH_REQUIRED",
6378            SipStatusCode::SipStatusConditionalRequestFailed => "SIP_STATUS_CONDITIONAL_REQUEST_FAILED",
6379            SipStatusCode::SipStatusRequestEntityTooLarge => "SIP_STATUS_REQUEST_ENTITY_TOO_LARGE",
6380            SipStatusCode::SipStatusRequestUriTooLong => "SIP_STATUS_REQUEST_URI_TOO_LONG",
6381            SipStatusCode::SipStatusUnsupportedMediaType => "SIP_STATUS_UNSUPPORTED_MEDIA_TYPE",
6382            SipStatusCode::SipStatusRequestedRangeNotSatisfiable => "SIP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE",
6383            SipStatusCode::SipStatusUnknownResourcePriority => "SIP_STATUS_UNKNOWN_RESOURCE_PRIORITY",
6384            SipStatusCode::SipStatusBadExtension => "SIP_STATUS_BAD_EXTENSION",
6385            SipStatusCode::SipStatusExtensionRequired => "SIP_STATUS_EXTENSION_REQUIRED",
6386            SipStatusCode::SipStatusSessionIntervalTooSmall => "SIP_STATUS_SESSION_INTERVAL_TOO_SMALL",
6387            SipStatusCode::SipStatusIntervalTooBrief => "SIP_STATUS_INTERVAL_TOO_BRIEF",
6388            SipStatusCode::SipStatusBadLocationInformation => "SIP_STATUS_BAD_LOCATION_INFORMATION",
6389            SipStatusCode::SipStatusBadAlertMessage => "SIP_STATUS_BAD_ALERT_MESSAGE",
6390            SipStatusCode::SipStatusUseIdentityHeader => "SIP_STATUS_USE_IDENTITY_HEADER",
6391            SipStatusCode::SipStatusProvideReferrerIdentity => "SIP_STATUS_PROVIDE_REFERRER_IDENTITY",
6392            SipStatusCode::SipStatusFlowFailed => "SIP_STATUS_FLOW_FAILED",
6393            SipStatusCode::SipStatusAnonymityDisallowed => "SIP_STATUS_ANONYMITY_DISALLOWED",
6394            SipStatusCode::SipStatusBadIdentityInfo => "SIP_STATUS_BAD_IDENTITY_INFO",
6395            SipStatusCode::SipStatusUnsupportedCertificate => "SIP_STATUS_UNSUPPORTED_CERTIFICATE",
6396            SipStatusCode::SipStatusInvalidIdentityHeader => "SIP_STATUS_INVALID_IDENTITY_HEADER",
6397            SipStatusCode::SipStatusFirstHopLacksOutboundSupport => "SIP_STATUS_FIRST_HOP_LACKS_OUTBOUND_SUPPORT",
6398            SipStatusCode::SipStatusMaxBreadthExceeded => "SIP_STATUS_MAX_BREADTH_EXCEEDED",
6399            SipStatusCode::SipStatusBadInfoPackage => "SIP_STATUS_BAD_INFO_PACKAGE",
6400            SipStatusCode::SipStatusConsentNeeded => "SIP_STATUS_CONSENT_NEEDED",
6401            SipStatusCode::SipStatusTemporarilyUnavailable => "SIP_STATUS_TEMPORARILY_UNAVAILABLE",
6402            SipStatusCode::SipStatusCallTransactionDoesNotExists => "SIP_STATUS_CALL_TRANSACTION_DOES_NOT_EXISTS",
6403            SipStatusCode::SipStatusLoopDetected => "SIP_STATUS_LOOP_DETECTED",
6404            SipStatusCode::SipStatusTooManyHops => "SIP_STATUS_TOO_MANY_HOPS",
6405            SipStatusCode::SipStatusAddressIncomplete => "SIP_STATUS_ADDRESS_INCOMPLETE",
6406            SipStatusCode::SipStatusAmbiguous => "SIP_STATUS_AMBIGUOUS",
6407            SipStatusCode::SipStatusBusyHere => "SIP_STATUS_BUSY_HERE",
6408            SipStatusCode::SipStatusRequestTerminated => "SIP_STATUS_REQUEST_TERMINATED",
6409            SipStatusCode::SipStatusNotAcceptableHere => "SIP_STATUS_NOT_ACCEPTABLE_HERE",
6410            SipStatusCode::SipStatusBadEvent => "SIP_STATUS_BAD_EVENT",
6411            SipStatusCode::SipStatusRequestPending => "SIP_STATUS_REQUEST_PENDING",
6412            SipStatusCode::SipStatusUndecipherable => "SIP_STATUS_UNDECIPHERABLE",
6413            SipStatusCode::SipStatusSecurityAgreementRequired => "SIP_STATUS_SECURITY_AGREEMENT_REQUIRED",
6414            SipStatusCode::SipStatusInternalServerError => "SIP_STATUS_INTERNAL_SERVER_ERROR",
6415            SipStatusCode::SipStatusNotImplemented => "SIP_STATUS_NOT_IMPLEMENTED",
6416            SipStatusCode::SipStatusBadGateway => "SIP_STATUS_BAD_GATEWAY",
6417            SipStatusCode::SipStatusServiceUnavailable => "SIP_STATUS_SERVICE_UNAVAILABLE",
6418            SipStatusCode::SipStatusGatewayTimeout => "SIP_STATUS_GATEWAY_TIMEOUT",
6419            SipStatusCode::SipStatusVersionNotSupported => "SIP_STATUS_VERSION_NOT_SUPPORTED",
6420            SipStatusCode::SipStatusMessageTooLarge => "SIP_STATUS_MESSAGE_TOO_LARGE",
6421            SipStatusCode::SipStatusGlobalBusyEverywhere => "SIP_STATUS_GLOBAL_BUSY_EVERYWHERE",
6422            SipStatusCode::SipStatusGlobalDecline => "SIP_STATUS_GLOBAL_DECLINE",
6423            SipStatusCode::SipStatusGlobalDoesNotExistAnywhere => "SIP_STATUS_GLOBAL_DOES_NOT_EXIST_ANYWHERE",
6424            SipStatusCode::SipStatusGlobalNotAcceptable => "SIP_STATUS_GLOBAL_NOT_ACCEPTABLE",
6425            SipStatusCode::SipStatusGlobalUnwanted => "SIP_STATUS_GLOBAL_UNWANTED",
6426            SipStatusCode::SipStatusGlobalRejected => "SIP_STATUS_GLOBAL_REJECTED",
6427        }
6428    }
6429    /// Creates an enum from field names used in the ProtoBuf definition.
6430    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6431        match value {
6432            "SIP_STATUS_UNKNOWN" => Some(Self::SipStatusUnknown),
6433            "SIP_STATUS_TRYING" => Some(Self::SipStatusTrying),
6434            "SIP_STATUS_RINGING" => Some(Self::SipStatusRinging),
6435            "SIP_STATUS_CALL_IS_FORWARDED" => Some(Self::SipStatusCallIsForwarded),
6436            "SIP_STATUS_QUEUED" => Some(Self::SipStatusQueued),
6437            "SIP_STATUS_SESSION_PROGRESS" => Some(Self::SipStatusSessionProgress),
6438            "SIP_STATUS_EARLY_DIALOG_TERMINATED" => Some(Self::SipStatusEarlyDialogTerminated),
6439            "SIP_STATUS_OK" => Some(Self::SipStatusOk),
6440            "SIP_STATUS_ACCEPTED" => Some(Self::SipStatusAccepted),
6441            "SIP_STATUS_NO_NOTIFICATION" => Some(Self::SipStatusNoNotification),
6442            "SIP_STATUS_MULTIPLE_CHOICES" => Some(Self::SipStatusMultipleChoices),
6443            "SIP_STATUS_MOVED_PERMANENTLY" => Some(Self::SipStatusMovedPermanently),
6444            "SIP_STATUS_MOVED_TEMPORARILY" => Some(Self::SipStatusMovedTemporarily),
6445            "SIP_STATUS_USE_PROXY" => Some(Self::SipStatusUseProxy),
6446            "SIP_STATUS_ALTERNATIVE_SERVICE" => Some(Self::SipStatusAlternativeService),
6447            "SIP_STATUS_BAD_REQUEST" => Some(Self::SipStatusBadRequest),
6448            "SIP_STATUS_UNAUTHORIZED" => Some(Self::SipStatusUnauthorized),
6449            "SIP_STATUS_PAYMENT_REQUIRED" => Some(Self::SipStatusPaymentRequired),
6450            "SIP_STATUS_FORBIDDEN" => Some(Self::SipStatusForbidden),
6451            "SIP_STATUS_NOTFOUND" => Some(Self::SipStatusNotfound),
6452            "SIP_STATUS_METHOD_NOT_ALLOWED" => Some(Self::SipStatusMethodNotAllowed),
6453            "SIP_STATUS_NOT_ACCEPTABLE" => Some(Self::SipStatusNotAcceptable),
6454            "SIP_STATUS_PROXY_AUTH_REQUIRED" => Some(Self::SipStatusProxyAuthRequired),
6455            "SIP_STATUS_REQUEST_TIMEOUT" => Some(Self::SipStatusRequestTimeout),
6456            "SIP_STATUS_CONFLICT" => Some(Self::SipStatusConflict),
6457            "SIP_STATUS_GONE" => Some(Self::SipStatusGone),
6458            "SIP_STATUS_LENGTH_REQUIRED" => Some(Self::SipStatusLengthRequired),
6459            "SIP_STATUS_CONDITIONAL_REQUEST_FAILED" => Some(Self::SipStatusConditionalRequestFailed),
6460            "SIP_STATUS_REQUEST_ENTITY_TOO_LARGE" => Some(Self::SipStatusRequestEntityTooLarge),
6461            "SIP_STATUS_REQUEST_URI_TOO_LONG" => Some(Self::SipStatusRequestUriTooLong),
6462            "SIP_STATUS_UNSUPPORTED_MEDIA_TYPE" => Some(Self::SipStatusUnsupportedMediaType),
6463            "SIP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE" => Some(Self::SipStatusRequestedRangeNotSatisfiable),
6464            "SIP_STATUS_UNKNOWN_RESOURCE_PRIORITY" => Some(Self::SipStatusUnknownResourcePriority),
6465            "SIP_STATUS_BAD_EXTENSION" => Some(Self::SipStatusBadExtension),
6466            "SIP_STATUS_EXTENSION_REQUIRED" => Some(Self::SipStatusExtensionRequired),
6467            "SIP_STATUS_SESSION_INTERVAL_TOO_SMALL" => Some(Self::SipStatusSessionIntervalTooSmall),
6468            "SIP_STATUS_INTERVAL_TOO_BRIEF" => Some(Self::SipStatusIntervalTooBrief),
6469            "SIP_STATUS_BAD_LOCATION_INFORMATION" => Some(Self::SipStatusBadLocationInformation),
6470            "SIP_STATUS_BAD_ALERT_MESSAGE" => Some(Self::SipStatusBadAlertMessage),
6471            "SIP_STATUS_USE_IDENTITY_HEADER" => Some(Self::SipStatusUseIdentityHeader),
6472            "SIP_STATUS_PROVIDE_REFERRER_IDENTITY" => Some(Self::SipStatusProvideReferrerIdentity),
6473            "SIP_STATUS_FLOW_FAILED" => Some(Self::SipStatusFlowFailed),
6474            "SIP_STATUS_ANONYMITY_DISALLOWED" => Some(Self::SipStatusAnonymityDisallowed),
6475            "SIP_STATUS_BAD_IDENTITY_INFO" => Some(Self::SipStatusBadIdentityInfo),
6476            "SIP_STATUS_UNSUPPORTED_CERTIFICATE" => Some(Self::SipStatusUnsupportedCertificate),
6477            "SIP_STATUS_INVALID_IDENTITY_HEADER" => Some(Self::SipStatusInvalidIdentityHeader),
6478            "SIP_STATUS_FIRST_HOP_LACKS_OUTBOUND_SUPPORT" => Some(Self::SipStatusFirstHopLacksOutboundSupport),
6479            "SIP_STATUS_MAX_BREADTH_EXCEEDED" => Some(Self::SipStatusMaxBreadthExceeded),
6480            "SIP_STATUS_BAD_INFO_PACKAGE" => Some(Self::SipStatusBadInfoPackage),
6481            "SIP_STATUS_CONSENT_NEEDED" => Some(Self::SipStatusConsentNeeded),
6482            "SIP_STATUS_TEMPORARILY_UNAVAILABLE" => Some(Self::SipStatusTemporarilyUnavailable),
6483            "SIP_STATUS_CALL_TRANSACTION_DOES_NOT_EXISTS" => Some(Self::SipStatusCallTransactionDoesNotExists),
6484            "SIP_STATUS_LOOP_DETECTED" => Some(Self::SipStatusLoopDetected),
6485            "SIP_STATUS_TOO_MANY_HOPS" => Some(Self::SipStatusTooManyHops),
6486            "SIP_STATUS_ADDRESS_INCOMPLETE" => Some(Self::SipStatusAddressIncomplete),
6487            "SIP_STATUS_AMBIGUOUS" => Some(Self::SipStatusAmbiguous),
6488            "SIP_STATUS_BUSY_HERE" => Some(Self::SipStatusBusyHere),
6489            "SIP_STATUS_REQUEST_TERMINATED" => Some(Self::SipStatusRequestTerminated),
6490            "SIP_STATUS_NOT_ACCEPTABLE_HERE" => Some(Self::SipStatusNotAcceptableHere),
6491            "SIP_STATUS_BAD_EVENT" => Some(Self::SipStatusBadEvent),
6492            "SIP_STATUS_REQUEST_PENDING" => Some(Self::SipStatusRequestPending),
6493            "SIP_STATUS_UNDECIPHERABLE" => Some(Self::SipStatusUndecipherable),
6494            "SIP_STATUS_SECURITY_AGREEMENT_REQUIRED" => Some(Self::SipStatusSecurityAgreementRequired),
6495            "SIP_STATUS_INTERNAL_SERVER_ERROR" => Some(Self::SipStatusInternalServerError),
6496            "SIP_STATUS_NOT_IMPLEMENTED" => Some(Self::SipStatusNotImplemented),
6497            "SIP_STATUS_BAD_GATEWAY" => Some(Self::SipStatusBadGateway),
6498            "SIP_STATUS_SERVICE_UNAVAILABLE" => Some(Self::SipStatusServiceUnavailable),
6499            "SIP_STATUS_GATEWAY_TIMEOUT" => Some(Self::SipStatusGatewayTimeout),
6500            "SIP_STATUS_VERSION_NOT_SUPPORTED" => Some(Self::SipStatusVersionNotSupported),
6501            "SIP_STATUS_MESSAGE_TOO_LARGE" => Some(Self::SipStatusMessageTooLarge),
6502            "SIP_STATUS_GLOBAL_BUSY_EVERYWHERE" => Some(Self::SipStatusGlobalBusyEverywhere),
6503            "SIP_STATUS_GLOBAL_DECLINE" => Some(Self::SipStatusGlobalDecline),
6504            "SIP_STATUS_GLOBAL_DOES_NOT_EXIST_ANYWHERE" => Some(Self::SipStatusGlobalDoesNotExistAnywhere),
6505            "SIP_STATUS_GLOBAL_NOT_ACCEPTABLE" => Some(Self::SipStatusGlobalNotAcceptable),
6506            "SIP_STATUS_GLOBAL_UNWANTED" => Some(Self::SipStatusGlobalUnwanted),
6507            "SIP_STATUS_GLOBAL_REJECTED" => Some(Self::SipStatusGlobalRejected),
6508            _ => None,
6509        }
6510    }
6511}
6512#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6513#[repr(i32)]
6514pub enum SipTransport {
6515    Auto = 0,
6516    Udp = 1,
6517    Tcp = 2,
6518    Tls = 3,
6519}
6520impl SipTransport {
6521    /// String value of the enum field names used in the ProtoBuf definition.
6522    ///
6523    /// The values are not transformed in any way and thus are considered stable
6524    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6525    pub fn as_str_name(&self) -> &'static str {
6526        match self {
6527            SipTransport::Auto => "SIP_TRANSPORT_AUTO",
6528            SipTransport::Udp => "SIP_TRANSPORT_UDP",
6529            SipTransport::Tcp => "SIP_TRANSPORT_TCP",
6530            SipTransport::Tls => "SIP_TRANSPORT_TLS",
6531        }
6532    }
6533    /// Creates an enum from field names used in the ProtoBuf definition.
6534    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6535        match value {
6536            "SIP_TRANSPORT_AUTO" => Some(Self::Auto),
6537            "SIP_TRANSPORT_UDP" => Some(Self::Udp),
6538            "SIP_TRANSPORT_TCP" => Some(Self::Tcp),
6539            "SIP_TRANSPORT_TLS" => Some(Self::Tls),
6540            _ => None,
6541        }
6542    }
6543}
6544#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6545#[repr(i32)]
6546pub enum SipHeaderOptions {
6547    /// do not map any headers, except ones mapped explicitly
6548    SipNoHeaders = 0,
6549    /// map all X-* headers to sip.h.x-* attributes
6550    SipXHeaders = 1,
6551    /// map all headers to sip.h.* attributes
6552    SipAllHeaders = 2,
6553}
6554impl SipHeaderOptions {
6555    /// String value of the enum field names used in the ProtoBuf definition.
6556    ///
6557    /// The values are not transformed in any way and thus are considered stable
6558    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6559    pub fn as_str_name(&self) -> &'static str {
6560        match self {
6561            SipHeaderOptions::SipNoHeaders => "SIP_NO_HEADERS",
6562            SipHeaderOptions::SipXHeaders => "SIP_X_HEADERS",
6563            SipHeaderOptions::SipAllHeaders => "SIP_ALL_HEADERS",
6564        }
6565    }
6566    /// Creates an enum from field names used in the ProtoBuf definition.
6567    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6568        match value {
6569            "SIP_NO_HEADERS" => Some(Self::SipNoHeaders),
6570            "SIP_X_HEADERS" => Some(Self::SipXHeaders),
6571            "SIP_ALL_HEADERS" => Some(Self::SipAllHeaders),
6572            _ => None,
6573        }
6574    }
6575}
6576#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6577#[repr(i32)]
6578pub enum SipMediaEncryption {
6579    /// do not enable encryption
6580    SipMediaEncryptDisable = 0,
6581    /// use encryption if available
6582    SipMediaEncryptAllow = 1,
6583    /// require encryption
6584    SipMediaEncryptRequire = 2,
6585}
6586impl SipMediaEncryption {
6587    /// String value of the enum field names used in the ProtoBuf definition.
6588    ///
6589    /// The values are not transformed in any way and thus are considered stable
6590    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6591    pub fn as_str_name(&self) -> &'static str {
6592        match self {
6593            SipMediaEncryption::SipMediaEncryptDisable => "SIP_MEDIA_ENCRYPT_DISABLE",
6594            SipMediaEncryption::SipMediaEncryptAllow => "SIP_MEDIA_ENCRYPT_ALLOW",
6595            SipMediaEncryption::SipMediaEncryptRequire => "SIP_MEDIA_ENCRYPT_REQUIRE",
6596        }
6597    }
6598    /// Creates an enum from field names used in the ProtoBuf definition.
6599    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6600        match value {
6601            "SIP_MEDIA_ENCRYPT_DISABLE" => Some(Self::SipMediaEncryptDisable),
6602            "SIP_MEDIA_ENCRYPT_ALLOW" => Some(Self::SipMediaEncryptAllow),
6603            "SIP_MEDIA_ENCRYPT_REQUIRE" => Some(Self::SipMediaEncryptRequire),
6604            _ => None,
6605        }
6606    }
6607}
6608#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6609#[repr(i32)]
6610pub enum ProviderType {
6611    Unknown = 0,
6612    /// Internally implemented
6613    Internal = 1,
6614    /// Vendor provided
6615    External = 2,
6616}
6617impl ProviderType {
6618    /// String value of the enum field names used in the ProtoBuf definition.
6619    ///
6620    /// The values are not transformed in any way and thus are considered stable
6621    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6622    pub fn as_str_name(&self) -> &'static str {
6623        match self {
6624            ProviderType::Unknown => "PROVIDER_TYPE_UNKNOWN",
6625            ProviderType::Internal => "PROVIDER_TYPE_INTERNAL",
6626            ProviderType::External => "PROVIDER_TYPE_EXTERNAL",
6627        }
6628    }
6629    /// Creates an enum from field names used in the ProtoBuf definition.
6630    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6631        match value {
6632            "PROVIDER_TYPE_UNKNOWN" => Some(Self::Unknown),
6633            "PROVIDER_TYPE_INTERNAL" => Some(Self::Internal),
6634            "PROVIDER_TYPE_EXTERNAL" => Some(Self::External),
6635            _ => None,
6636        }
6637    }
6638}
6639#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6640#[repr(i32)]
6641pub enum SipCallStatus {
6642    /// Incoming call is being handled by the SIP service. The SIP participant hasn't joined a LiveKit room yet
6643    ScsCallIncoming = 0,
6644    /// SIP participant for outgoing call has been created. The SIP outgoing call is being established
6645    ScsParticipantJoined = 1,
6646    /// Call is ongoing. SIP participant is active in the LiveKit room
6647    ScsActive = 2,
6648    /// Call has ended
6649    ScsDisconnected = 3,
6650    /// Call has ended or never succeeded because of an error
6651    ScsError = 4,
6652}
6653impl SipCallStatus {
6654    /// String value of the enum field names used in the ProtoBuf definition.
6655    ///
6656    /// The values are not transformed in any way and thus are considered stable
6657    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6658    pub fn as_str_name(&self) -> &'static str {
6659        match self {
6660            SipCallStatus::ScsCallIncoming => "SCS_CALL_INCOMING",
6661            SipCallStatus::ScsParticipantJoined => "SCS_PARTICIPANT_JOINED",
6662            SipCallStatus::ScsActive => "SCS_ACTIVE",
6663            SipCallStatus::ScsDisconnected => "SCS_DISCONNECTED",
6664            SipCallStatus::ScsError => "SCS_ERROR",
6665        }
6666    }
6667    /// Creates an enum from field names used in the ProtoBuf definition.
6668    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6669        match value {
6670            "SCS_CALL_INCOMING" => Some(Self::ScsCallIncoming),
6671            "SCS_PARTICIPANT_JOINED" => Some(Self::ScsParticipantJoined),
6672            "SCS_ACTIVE" => Some(Self::ScsActive),
6673            "SCS_DISCONNECTED" => Some(Self::ScsDisconnected),
6674            "SCS_ERROR" => Some(Self::ScsError),
6675            _ => None,
6676        }
6677    }
6678}
6679#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6680#[repr(i32)]
6681pub enum SipTransferStatus {
6682    StsTransferOngoing = 0,
6683    StsTransferFailed = 1,
6684    StsTransferSuccessful = 2,
6685}
6686impl SipTransferStatus {
6687    /// String value of the enum field names used in the ProtoBuf definition.
6688    ///
6689    /// The values are not transformed in any way and thus are considered stable
6690    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6691    pub fn as_str_name(&self) -> &'static str {
6692        match self {
6693            SipTransferStatus::StsTransferOngoing => "STS_TRANSFER_ONGOING",
6694            SipTransferStatus::StsTransferFailed => "STS_TRANSFER_FAILED",
6695            SipTransferStatus::StsTransferSuccessful => "STS_TRANSFER_SUCCESSFUL",
6696        }
6697    }
6698    /// Creates an enum from field names used in the ProtoBuf definition.
6699    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6700        match value {
6701            "STS_TRANSFER_ONGOING" => Some(Self::StsTransferOngoing),
6702            "STS_TRANSFER_FAILED" => Some(Self::StsTransferFailed),
6703            "STS_TRANSFER_SUCCESSFUL" => Some(Self::StsTransferSuccessful),
6704            _ => None,
6705        }
6706    }
6707}
6708#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6709#[repr(i32)]
6710pub enum SipFeature {
6711    None = 0,
6712    KrispEnabled = 1,
6713}
6714impl SipFeature {
6715    /// String value of the enum field names used in the ProtoBuf definition.
6716    ///
6717    /// The values are not transformed in any way and thus are considered stable
6718    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6719    pub fn as_str_name(&self) -> &'static str {
6720        match self {
6721            SipFeature::None => "NONE",
6722            SipFeature::KrispEnabled => "KRISP_ENABLED",
6723        }
6724    }
6725    /// Creates an enum from field names used in the ProtoBuf definition.
6726    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6727        match value {
6728            "NONE" => Some(Self::None),
6729            "KRISP_ENABLED" => Some(Self::KrispEnabled),
6730            _ => None,
6731        }
6732    }
6733}
6734#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6735#[repr(i32)]
6736pub enum SipCallDirection {
6737    ScdUnknown = 0,
6738    ScdInbound = 1,
6739    ScdOutbound = 2,
6740}
6741impl SipCallDirection {
6742    /// String value of the enum field names used in the ProtoBuf definition.
6743    ///
6744    /// The values are not transformed in any way and thus are considered stable
6745    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6746    pub fn as_str_name(&self) -> &'static str {
6747        match self {
6748            SipCallDirection::ScdUnknown => "SCD_UNKNOWN",
6749            SipCallDirection::ScdInbound => "SCD_INBOUND",
6750            SipCallDirection::ScdOutbound => "SCD_OUTBOUND",
6751        }
6752    }
6753    /// Creates an enum from field names used in the ProtoBuf definition.
6754    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6755        match value {
6756            "SCD_UNKNOWN" => Some(Self::ScdUnknown),
6757            "SCD_INBOUND" => Some(Self::ScdInbound),
6758            "SCD_OUTBOUND" => Some(Self::ScdOutbound),
6759            _ => None,
6760        }
6761    }
6762}
6763#[allow(clippy::derive_partial_eq_without_eq)]
6764#[derive(Clone, PartialEq, ::prost::Message)]
6765pub struct DialWhatsAppCallRequest {
6766    /// Required - The phone number id of the business that is initiating the call
6767    #[prost(string, tag="1")]
6768    pub whatsapp_phone_number_id: ::prost::alloc::string::String,
6769    /// Required - The number of the user that is supossed to receive the call
6770    #[prost(string, tag="2")]
6771    pub whatsapp_to_phone_number: ::prost::alloc::string::String,
6772    /// Required - The API key of the business that is initiating the call
6773    #[prost(string, tag="3")]
6774    pub whatsapp_api_key: ::prost::alloc::string::String,
6775    /// Required - WhatsApp Cloud API version, eg: 23.0, 24.0, etc.
6776    #[prost(string, tag="12")]
6777    pub whatsapp_cloud_api_version: ::prost::alloc::string::String,
6778    /// Optional - An arbitrary string you can pass in that is useful for tracking and logging purposes.
6779    #[prost(string, tag="4")]
6780    pub whatsapp_biz_opaque_callback_data: ::prost::alloc::string::String,
6781    /// Optional - What LiveKit room should this participant be connected too
6782    #[prost(string, tag="5")]
6783    pub room_name: ::prost::alloc::string::String,
6784    /// Optional - Agents to dispatch the call to
6785    #[prost(message, repeated, tag="6")]
6786    pub agents: ::prost::alloc::vec::Vec<RoomAgentDispatch>,
6787    /// Optional - Identity of the participant in LiveKit room
6788    /// This is used for logging purposes, so it is advised to not put PII in this field.
6789    #[prost(string, tag="7")]
6790    pub participant_identity: ::prost::alloc::string::String,
6791    /// Optional - Name of the participant in LiveKit room
6792    #[prost(string, tag="8")]
6793    pub participant_name: ::prost::alloc::string::String,
6794    /// Optional - User-defined metadata. Will be attached to a created Participant in the room.
6795    #[prost(string, tag="9")]
6796    pub participant_metadata: ::prost::alloc::string::String,
6797    /// Optional - User-defined attributes. Will be attached to a created Participant in the room.
6798    #[prost(map="string, string", tag="10")]
6799    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6800    /// Optional - Country where the call terminates as ISO 3166-1 alpha-2 (<https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>). This will be used by the livekit infrastructure to route calls.
6801    #[prost(string, tag="11")]
6802    pub destination_country: ::prost::alloc::string::String,
6803    /// Max time for the callee to answer the call.
6804    #[prost(message, optional, tag="13")]
6805    pub ringing_timeout: ::core::option::Option<::pbjson_types::Duration>,
6806}
6807#[allow(clippy::derive_partial_eq_without_eq)]
6808#[derive(Clone, PartialEq, ::prost::Message)]
6809pub struct DialWhatsAppCallResponse {
6810    /// Call ID sent by Meta
6811    #[prost(string, tag="1")]
6812    pub whatsapp_call_id: ::prost::alloc::string::String,
6813    /// The name of the LiveKit room that the call is connected to
6814    #[prost(string, tag="2")]
6815    pub room_name: ::prost::alloc::string::String,
6816}
6817#[allow(clippy::derive_partial_eq_without_eq)]
6818#[derive(Clone, PartialEq, ::prost::Message)]
6819pub struct DisconnectWhatsAppCallRequest {
6820    /// Required - Call ID sent by Meta
6821    #[prost(string, tag="1")]
6822    pub whatsapp_call_id: ::prost::alloc::string::String,
6823    /// The API key of the whatsapp business.
6824    /// Required if the DisconnectReason is BUSINESS_INITIATED.
6825    /// Optional for  USER_INITIATED as no API call to WhatsApp is needed.
6826    #[prost(string, tag="2")]
6827    pub whatsapp_api_key: ::prost::alloc::string::String,
6828    /// The reason for disconnecting the call
6829    #[prost(enumeration="disconnect_whats_app_call_request::DisconnectReason", tag="3")]
6830    pub disconnect_reason: i32,
6831}
6832/// Nested message and enum types in `DisconnectWhatsAppCallRequest`.
6833pub mod disconnect_whats_app_call_request {
6834    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6835    #[repr(i32)]
6836    pub enum DisconnectReason {
6837        /// The call is being disconnected by the business
6838        BusinessInitiated = 0,
6839        /// The call is disconnected by the user.
6840        /// This can be tracked as part of call terminate webhook
6841        /// <https://developers.facebook.com/documentation/business-messaging/whatsapp/calling/user-initiated-calls#call-terminate-webhook>
6842        /// Note that this webhook will also be sent when the call is disconnected by the business.
6843        /// Calling the API twice in such cases will result in an error.
6844        UserInitiated = 1,
6845    }
6846    impl DisconnectReason {
6847        /// String value of the enum field names used in the ProtoBuf definition.
6848        ///
6849        /// The values are not transformed in any way and thus are considered stable
6850        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6851        pub fn as_str_name(&self) -> &'static str {
6852            match self {
6853                DisconnectReason::BusinessInitiated => "BUSINESS_INITIATED",
6854                DisconnectReason::UserInitiated => "USER_INITIATED",
6855            }
6856        }
6857        /// Creates an enum from field names used in the ProtoBuf definition.
6858        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6859            match value {
6860                "BUSINESS_INITIATED" => Some(Self::BusinessInitiated),
6861                "USER_INITIATED" => Some(Self::UserInitiated),
6862                _ => None,
6863            }
6864        }
6865    }
6866}
6867#[allow(clippy::derive_partial_eq_without_eq)]
6868#[derive(Clone, PartialEq, ::prost::Message)]
6869pub struct DisconnectWhatsAppCallResponse {
6870}
6871#[allow(clippy::derive_partial_eq_without_eq)]
6872#[derive(Clone, PartialEq, ::prost::Message)]
6873pub struct ConnectWhatsAppCallRequest {
6874    /// Required - Call ID sent by Meta
6875    #[prost(string, tag="1")]
6876    pub whatsapp_call_id: ::prost::alloc::string::String,
6877    /// Required - The call connect webhook comes with SDP from Meta
6878    /// It is the answer SDP for a business initiated call
6879    #[prost(message, optional, tag="2")]
6880    pub sdp: ::core::option::Option<SessionDescription>,
6881}
6882#[allow(clippy::derive_partial_eq_without_eq)]
6883#[derive(Clone, PartialEq, ::prost::Message)]
6884pub struct ConnectWhatsAppCallResponse {
6885}
6886#[allow(clippy::derive_partial_eq_without_eq)]
6887#[derive(Clone, PartialEq, ::prost::Message)]
6888pub struct AcceptWhatsAppCallRequest {
6889    /// Required - The phone number id of the business that is conencting the call
6890    #[prost(string, tag="1")]
6891    pub whatsapp_phone_number_id: ::prost::alloc::string::String,
6892    /// Required - The API key of the business that is connecting the call
6893    #[prost(string, tag="2")]
6894    pub whatsapp_api_key: ::prost::alloc::string::String,
6895    /// Required - WhatsApp Cloud API version, eg: 23.0, 24.0, etc.
6896    #[prost(string, tag="13")]
6897    pub whatsapp_cloud_api_version: ::prost::alloc::string::String,
6898    /// Required - Call ID sent by Meta
6899    #[prost(string, tag="3")]
6900    pub whatsapp_call_id: ::prost::alloc::string::String,
6901    /// Optional - An arbitrary string you can pass in that is useful for tracking and logging purposes.
6902    #[prost(string, tag="4")]
6903    pub whatsapp_biz_opaque_callback_data: ::prost::alloc::string::String,
6904    /// Required - The call accept webhook comes with SDP from Meta
6905    /// It is the for a user initiated call
6906    #[prost(message, optional, tag="5")]
6907    pub sdp: ::core::option::Option<SessionDescription>,
6908    /// Optional - What LiveKit room should this participant be connected too
6909    #[prost(string, tag="6")]
6910    pub room_name: ::prost::alloc::string::String,
6911    /// Optional - Agents to dispatch the call to
6912    #[prost(message, repeated, tag="7")]
6913    pub agents: ::prost::alloc::vec::Vec<RoomAgentDispatch>,
6914    /// Optional - Identity of the participant in LiveKit room
6915    /// This is used for logging purposes, so it is advised to not put PII in this field.
6916    #[prost(string, tag="8")]
6917    pub participant_identity: ::prost::alloc::string::String,
6918    /// Optional - Name of the participant in LiveKit room
6919    #[prost(string, tag="9")]
6920    pub participant_name: ::prost::alloc::string::String,
6921    /// Optional - User-defined metadata. Will be attached to a created Participant in the room.
6922    #[prost(string, tag="10")]
6923    pub participant_metadata: ::prost::alloc::string::String,
6924    /// Optional - User-defined attributes. Will be attached to a created Participant in the room.
6925    #[prost(map="string, string", tag="11")]
6926    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6927    /// Optional - Country where the call terminates as ISO 3166-1 alpha-2 (<https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>). This will be used by the livekit infrastructure to route calls.
6928    #[prost(string, tag="12")]
6929    pub destination_country: ::prost::alloc::string::String,
6930    /// Max time for the callee to answer the call.
6931    #[prost(message, optional, tag="14")]
6932    pub ringing_timeout: ::core::option::Option<::pbjson_types::Duration>,
6933    /// Wait for the answer for the call before returning.
6934    #[prost(bool, tag="15")]
6935    pub wait_until_answered: bool,
6936}
6937#[allow(clippy::derive_partial_eq_without_eq)]
6938#[derive(Clone, PartialEq, ::prost::Message)]
6939pub struct AcceptWhatsAppCallResponse {
6940    /// The name of the LiveKit room that the call is connected to
6941    #[prost(string, tag="1")]
6942    pub room_name: ::prost::alloc::string::String,
6943}
6944#[allow(clippy::derive_partial_eq_without_eq)]
6945#[derive(Clone, PartialEq, ::prost::Message)]
6946pub struct WhatsAppCall {
6947    /// list of call ids that are currently active
6948    #[prost(string, tag="1")]
6949    pub whatsapp_call_id: ::prost::alloc::string::String,
6950    /// Direction of the call
6951    #[prost(enumeration="WhatsAppCallDirection", tag="2")]
6952    pub direction: i32,
6953}
6954#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6955#[repr(i32)]
6956pub enum WhatsAppCallDirection {
6957    WhatsappCallDirectionInbound = 0,
6958    WhatsappCallDirectionOutbound = 2,
6959}
6960impl WhatsAppCallDirection {
6961    /// String value of the enum field names used in the ProtoBuf definition.
6962    ///
6963    /// The values are not transformed in any way and thus are considered stable
6964    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6965    pub fn as_str_name(&self) -> &'static str {
6966        match self {
6967            WhatsAppCallDirection::WhatsappCallDirectionInbound => "WHATSAPP_CALL_DIRECTION_INBOUND",
6968            WhatsAppCallDirection::WhatsappCallDirectionOutbound => "WHATSAPP_CALL_DIRECTION_OUTBOUND",
6969        }
6970    }
6971    /// Creates an enum from field names used in the ProtoBuf definition.
6972    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6973        match value {
6974            "WHATSAPP_CALL_DIRECTION_INBOUND" => Some(Self::WhatsappCallDirectionInbound),
6975            "WHATSAPP_CALL_DIRECTION_OUTBOUND" => Some(Self::WhatsappCallDirectionOutbound),
6976            _ => None,
6977        }
6978    }
6979}
6980#[allow(clippy::derive_partial_eq_without_eq)]
6981#[derive(Clone, PartialEq, ::prost::Message)]
6982pub struct ConnectTwilioCallRequest {
6983    /// The Direction of the call
6984    #[prost(enumeration="connect_twilio_call_request::TwilioCallDirection", tag="1")]
6985    pub twilio_call_direction: i32,
6986    /// What LiveKit room should this call be connected to
6987    #[prost(string, tag="2")]
6988    pub room_name: ::prost::alloc::string::String,
6989    /// Optional agents to dispatch the call to
6990    #[prost(message, repeated, tag="3")]
6991    pub agents: ::prost::alloc::vec::Vec<RoomAgentDispatch>,
6992    /// Optional identity of the participant in LiveKit room
6993    /// This is used for logging purposes, so it is advised to not put PII in this field.
6994    #[prost(string, tag="4")]
6995    pub participant_identity: ::prost::alloc::string::String,
6996    /// Optional name of the participant in LiveKit room
6997    #[prost(string, tag="5")]
6998    pub participant_name: ::prost::alloc::string::String,
6999    /// Optional user-defined metadata. Will be attached to a created Participant in the room.
7000    #[prost(string, tag="6")]
7001    pub participant_metadata: ::prost::alloc::string::String,
7002    /// Optional user-defined attributes. Will be attached to a created Participant in the room.
7003    #[prost(map="string, string", tag="7")]
7004    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
7005    /// Country where the call terminates as ISO 3166-1 alpha-2 (<https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>). This will be used by the livekit infrastructure to route calls.
7006    #[prost(string, tag="8")]
7007    pub destination_country: ::prost::alloc::string::String,
7008}
7009/// Nested message and enum types in `ConnectTwilioCallRequest`.
7010pub mod connect_twilio_call_request {
7011    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7012    #[repr(i32)]
7013    pub enum TwilioCallDirection {
7014        /// Call is inbound to LiveKit from Twilio
7015        Inbound = 0,
7016        /// Call is outbound from LiveKit to Twilio
7017        Outbound = 1,
7018    }
7019    impl TwilioCallDirection {
7020        /// String value of the enum field names used in the ProtoBuf definition.
7021        ///
7022        /// The values are not transformed in any way and thus are considered stable
7023        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7024        pub fn as_str_name(&self) -> &'static str {
7025            match self {
7026                TwilioCallDirection::Inbound => "TWILIO_CALL_DIRECTION_INBOUND",
7027                TwilioCallDirection::Outbound => "TWILIO_CALL_DIRECTION_OUTBOUND",
7028            }
7029        }
7030        /// Creates an enum from field names used in the ProtoBuf definition.
7031        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7032            match value {
7033                "TWILIO_CALL_DIRECTION_INBOUND" => Some(Self::Inbound),
7034                "TWILIO_CALL_DIRECTION_OUTBOUND" => Some(Self::Outbound),
7035                _ => None,
7036            }
7037        }
7038    }
7039}
7040#[allow(clippy::derive_partial_eq_without_eq)]
7041#[derive(Clone, PartialEq, ::prost::Message)]
7042pub struct ConnectTwilioCallResponse {
7043    /// The websocket URL which twilio media stream will connect to
7044    #[prost(string, tag="1")]
7045    pub connect_url: ::prost::alloc::string::String,
7046}
7047#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7048#[repr(i32)]
7049pub enum ConnectorType {
7050    Unspecified = 0,
7051    WhatsApp = 1,
7052    Twilio = 2,
7053}
7054impl ConnectorType {
7055    /// String value of the enum field names used in the ProtoBuf definition.
7056    ///
7057    /// The values are not transformed in any way and thus are considered stable
7058    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7059    pub fn as_str_name(&self) -> &'static str {
7060        match self {
7061            ConnectorType::Unspecified => "Unspecified",
7062            ConnectorType::WhatsApp => "WhatsApp",
7063            ConnectorType::Twilio => "Twilio",
7064        }
7065    }
7066    /// Creates an enum from field names used in the ProtoBuf definition.
7067    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7068        match value {
7069            "Unspecified" => Some(Self::Unspecified),
7070            "WhatsApp" => Some(Self::WhatsApp),
7071            "Twilio" => Some(Self::Twilio),
7072            _ => None,
7073        }
7074    }
7075}
7076include!("livekit.serde.rs");
7077// @@protoc_insertion_point(module)