livekit_protocol/
livekit.rs

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