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