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