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