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