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