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