Skip to main content

livekit_protocol/
livekit.rs

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