livekit_protocol/
livekit.rs

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