cx_api/generated/
com.coralogix.extensions.v1.rs

1// This file is @generated by prost-build.
2#[derive(serde::Serialize, serde::Deserialize)]
3#[serde(rename_all = "snake_case")]
4#[derive(Clone, PartialEq, ::prost::Message)]
5pub struct ExtensionItemBinary {
6    #[prost(enumeration = "extension_item_binary::BinaryType", tag = "1")]
7    pub r#type: i32,
8    #[prost(message, optional, tag = "2")]
9    pub data: ::core::option::Option<::prost::alloc::string::String>,
10    #[prost(message, optional, tag = "3")]
11    pub file_name: ::core::option::Option<::prost::alloc::string::String>,
12}
13/// Nested message and enum types in `ExtensionItemBinary`.
14pub mod extension_item_binary {
15    #[derive(serde::Serialize, serde::Deserialize)]
16    #[serde(rename_all = "snake_case")]
17    #[derive(
18        Clone,
19        Copy,
20        Debug,
21        PartialEq,
22        Eq,
23        Hash,
24        PartialOrd,
25        Ord,
26        ::prost::Enumeration
27    )]
28    #[repr(i32)]
29    pub enum BinaryType {
30        PreviewImage = 0,
31        KibanaDashboardDefinition = 1,
32        GrafanaDashboardDefinition = 2,
33        EnrichmentCsv = 3,
34        CxCustomDashboardDefinition = 4,
35    }
36    impl BinaryType {
37        /// String value of the enum field names used in the ProtoBuf definition.
38        ///
39        /// The values are not transformed in any way and thus are considered stable
40        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
41        pub fn as_str_name(&self) -> &'static str {
42            match self {
43                Self::PreviewImage => "PREVIEW_IMAGE",
44                Self::KibanaDashboardDefinition => "KIBANA_DASHBOARD_DEFINITION",
45                Self::GrafanaDashboardDefinition => "GRAFANA_DASHBOARD_DEFINITION",
46                Self::EnrichmentCsv => "ENRICHMENT_CSV",
47                Self::CxCustomDashboardDefinition => "CX_CUSTOM_DASHBOARD_DEFINITION",
48            }
49        }
50        /// Creates an enum from field names used in the ProtoBuf definition.
51        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
52            match value {
53                "PREVIEW_IMAGE" => Some(Self::PreviewImage),
54                "KIBANA_DASHBOARD_DEFINITION" => Some(Self::KibanaDashboardDefinition),
55                "GRAFANA_DASHBOARD_DEFINITION" => Some(Self::GrafanaDashboardDefinition),
56                "ENRICHMENT_CSV" => Some(Self::EnrichmentCsv),
57                "CX_CUSTOM_DASHBOARD_DEFINITION" => {
58                    Some(Self::CxCustomDashboardDefinition)
59                }
60                _ => None,
61            }
62        }
63    }
64}
65#[derive(serde::Serialize, serde::Deserialize)]
66#[serde(rename_all = "snake_case")]
67#[derive(Clone, PartialEq, ::prost::Message)]
68pub struct ExtensionItem {
69    #[prost(message, optional, tag = "1")]
70    pub id: ::core::option::Option<::prost::alloc::string::String>,
71    #[prost(message, optional, tag = "2")]
72    pub name: ::core::option::Option<::prost::alloc::string::String>,
73    #[prost(message, optional, tag = "3")]
74    pub description: ::core::option::Option<::prost::alloc::string::String>,
75    #[prost(enumeration = "TargetDomain", tag = "4")]
76    pub target_domain: i32,
77    #[prost(message, optional, tag = "5")]
78    pub data: ::core::option::Option<::prost_wkt_types::Struct>,
79    #[prost(message, repeated, tag = "6")]
80    pub binaries: ::prost::alloc::vec::Vec<ExtensionItemBinary>,
81    #[prost(message, optional, tag = "7")]
82    pub is_mandatory: ::core::option::Option<bool>,
83    #[prost(enumeration = "extension_item::PermissionResource", tag = "9")]
84    pub permission_resource: i32,
85    #[prost(message, optional, tag = "10")]
86    pub extended_internal_id: ::core::option::Option<::prost::alloc::string::String>,
87    #[prost(message, optional, tag = "11")]
88    pub unique_id: ::core::option::Option<::prost::alloc::string::String>,
89}
90/// Nested message and enum types in `ExtensionItem`.
91pub mod extension_item {
92    #[derive(serde::Serialize, serde::Deserialize)]
93    #[serde(rename_all = "snake_case")]
94    #[derive(
95        Clone,
96        Copy,
97        Debug,
98        PartialEq,
99        Eq,
100        Hash,
101        PartialOrd,
102        Ord,
103        ::prost::Enumeration
104    )]
105    #[repr(i32)]
106    pub enum PermissionResource {
107        Unknown = 0,
108        Action = 1,
109        Alert = 2,
110        CustomEnrichment = 3,
111        GeoEnrichment = 4,
112        SecurityEnrichment = 5,
113        ResourceCloudMetadataEnrichment = 6,
114        GrafanaDashboard = 7,
115        KibanaDashboard = 8,
116        ParsingRule = 9,
117        SavedView = 10,
118        CxCustomDashboard = 11,
119        MetricsRuleGroup = 12,
120        SpanEventsToMetrics = 13,
121        LogsEventsToMetrics = 14,
122    }
123    impl PermissionResource {
124        /// String value of the enum field names used in the ProtoBuf definition.
125        ///
126        /// The values are not transformed in any way and thus are considered stable
127        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
128        pub fn as_str_name(&self) -> &'static str {
129            match self {
130                Self::Unknown => "UNKNOWN",
131                Self::Action => "ACTION",
132                Self::Alert => "ALERT",
133                Self::CustomEnrichment => "CUSTOM_ENRICHMENT",
134                Self::GeoEnrichment => "GEO_ENRICHMENT",
135                Self::SecurityEnrichment => "SECURITY_ENRICHMENT",
136                Self::ResourceCloudMetadataEnrichment => {
137                    "RESOURCE_CLOUD_METADATA_ENRICHMENT"
138                }
139                Self::GrafanaDashboard => "GRAFANA_DASHBOARD",
140                Self::KibanaDashboard => "KIBANA_DASHBOARD",
141                Self::ParsingRule => "PARSING_RULE",
142                Self::SavedView => "SAVED_VIEW",
143                Self::CxCustomDashboard => "CX_CUSTOM_DASHBOARD",
144                Self::MetricsRuleGroup => "METRICS_RULE_GROUP",
145                Self::SpanEventsToMetrics => "SPAN_EVENTS_TO_METRICS",
146                Self::LogsEventsToMetrics => "LOGS_EVENTS_TO_METRICS",
147            }
148        }
149        /// Creates an enum from field names used in the ProtoBuf definition.
150        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
151            match value {
152                "UNKNOWN" => Some(Self::Unknown),
153                "ACTION" => Some(Self::Action),
154                "ALERT" => Some(Self::Alert),
155                "CUSTOM_ENRICHMENT" => Some(Self::CustomEnrichment),
156                "GEO_ENRICHMENT" => Some(Self::GeoEnrichment),
157                "SECURITY_ENRICHMENT" => Some(Self::SecurityEnrichment),
158                "RESOURCE_CLOUD_METADATA_ENRICHMENT" => {
159                    Some(Self::ResourceCloudMetadataEnrichment)
160                }
161                "GRAFANA_DASHBOARD" => Some(Self::GrafanaDashboard),
162                "KIBANA_DASHBOARD" => Some(Self::KibanaDashboard),
163                "PARSING_RULE" => Some(Self::ParsingRule),
164                "SAVED_VIEW" => Some(Self::SavedView),
165                "CX_CUSTOM_DASHBOARD" => Some(Self::CxCustomDashboard),
166                "METRICS_RULE_GROUP" => Some(Self::MetricsRuleGroup),
167                "SPAN_EVENTS_TO_METRICS" => Some(Self::SpanEventsToMetrics),
168                "LOGS_EVENTS_TO_METRICS" => Some(Self::LogsEventsToMetrics),
169                _ => None,
170            }
171        }
172    }
173}
174#[derive(serde::Serialize, serde::Deserialize)]
175#[serde(rename_all = "snake_case")]
176#[derive(Clone, Copy, PartialEq, ::prost::Message)]
177pub struct ItemCounts {
178    #[prost(message, optional, tag = "1")]
179    pub actions: ::core::option::Option<u32>,
180    #[prost(message, optional, tag = "2")]
181    pub alerts: ::core::option::Option<u32>,
182    #[prost(message, optional, tag = "3")]
183    pub custom_dashboards: ::core::option::Option<u32>,
184    #[prost(message, optional, tag = "4")]
185    pub enrichments: ::core::option::Option<u32>,
186    #[prost(message, optional, tag = "5")]
187    pub events_to_metrics: ::core::option::Option<u32>,
188    #[prost(message, optional, tag = "6")]
189    pub grafana_dashboards: ::core::option::Option<u32>,
190    #[prost(message, optional, tag = "7")]
191    pub kibana_dashboards: ::core::option::Option<u32>,
192    #[prost(message, optional, tag = "8")]
193    pub metrics_rule_group: ::core::option::Option<u32>,
194    #[prost(message, optional, tag = "9")]
195    pub parsing_rules: ::core::option::Option<u32>,
196    #[prost(message, optional, tag = "10")]
197    pub saved_views: ::core::option::Option<u32>,
198}
199#[derive(serde::Serialize, serde::Deserialize)]
200#[serde(rename_all = "snake_case")]
201#[derive(Clone, PartialEq, ::prost::Message)]
202pub struct IntegrationDetail {
203    #[prost(message, optional, tag = "1")]
204    pub name: ::core::option::Option<::prost::alloc::string::String>,
205    #[prost(message, optional, tag = "2")]
206    pub link: ::core::option::Option<::prost::alloc::string::String>,
207}
208#[derive(serde::Serialize, serde::Deserialize)]
209#[serde(rename_all = "snake_case")]
210#[derive(Clone, PartialEq, ::prost::Message)]
211pub struct ExtensionBinary {
212    #[prost(enumeration = "extension_binary::BinaryType", tag = "1")]
213    pub r#type: i32,
214    #[prost(message, optional, tag = "2")]
215    pub data: ::core::option::Option<::prost::alloc::string::String>,
216}
217/// Nested message and enum types in `ExtensionBinary`.
218pub mod extension_binary {
219    #[derive(serde::Serialize, serde::Deserialize)]
220    #[serde(rename_all = "snake_case")]
221    #[derive(
222        Clone,
223        Copy,
224        Debug,
225        PartialEq,
226        Eq,
227        Hash,
228        PartialOrd,
229        Ord,
230        ::prost::Enumeration
231    )]
232    #[repr(i32)]
233    pub enum BinaryType {
234        KibanaIndexPattern = 0,
235    }
236    impl BinaryType {
237        /// String value of the enum field names used in the ProtoBuf definition.
238        ///
239        /// The values are not transformed in any way and thus are considered stable
240        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
241        pub fn as_str_name(&self) -> &'static str {
242            match self {
243                Self::KibanaIndexPattern => "KIBANA_INDEX_PATTERN",
244            }
245        }
246        /// Creates an enum from field names used in the ProtoBuf definition.
247        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
248            match value {
249                "KIBANA_INDEX_PATTERN" => Some(Self::KibanaIndexPattern),
250                _ => None,
251            }
252        }
253    }
254}
255#[derive(serde::Serialize, serde::Deserialize)]
256#[serde(rename_all = "snake_case")]
257#[derive(Clone, PartialEq, ::prost::Message)]
258pub struct ChangelogEntry {
259    #[prost(message, optional, tag = "1")]
260    pub version: ::core::option::Option<::prost::alloc::string::String>,
261    #[prost(message, optional, tag = "2")]
262    pub description_md: ::core::option::Option<::prost::alloc::string::String>,
263}
264#[derive(serde::Serialize, serde::Deserialize)]
265#[serde(rename_all = "snake_case")]
266#[derive(Clone, PartialEq, ::prost::Message)]
267pub struct Deprecation {
268    #[prost(message, optional, tag = "1")]
269    pub reason: ::core::option::Option<::prost::alloc::string::String>,
270    #[prost(message, repeated, tag = "2")]
271    pub replacement_extensions: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
272}
273#[derive(serde::Serialize, serde::Deserialize)]
274#[serde(rename_all = "snake_case")]
275#[derive(Clone, PartialEq, ::prost::Message)]
276pub struct ExtensionRevision {
277    #[prost(message, optional, tag = "1")]
278    pub version: ::core::option::Option<::prost::alloc::string::String>,
279    #[prost(message, optional, tag = "2")]
280    pub description: ::core::option::Option<::prost::alloc::string::String>,
281    #[prost(message, optional, tag = "3")]
282    pub excerpt: ::core::option::Option<::prost::alloc::string::String>,
283    #[prost(message, repeated, tag = "4")]
284    pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
285    #[prost(message, repeated, tag = "5")]
286    pub integration_details: ::prost::alloc::vec::Vec<IntegrationDetail>,
287    #[prost(message, repeated, tag = "6")]
288    pub items: ::prost::alloc::vec::Vec<ExtensionItem>,
289    #[prost(message, repeated, tag = "7")]
290    pub binaries: ::prost::alloc::vec::Vec<ExtensionBinary>,
291    #[prost(message, repeated, tag = "8")]
292    pub permission_denied_items: ::prost::alloc::vec::Vec<ExtensionItem>,
293    #[prost(message, optional, tag = "9")]
294    pub is_testing: ::core::option::Option<bool>,
295}
296#[derive(serde::Serialize, serde::Deserialize)]
297#[serde(rename_all = "snake_case")]
298#[derive(Clone, PartialEq, ::prost::Message)]
299pub struct Extension {
300    #[prost(message, optional, tag = "1")]
301    pub id: ::core::option::Option<::prost::alloc::string::String>,
302    #[prost(message, optional, tag = "2")]
303    pub name: ::core::option::Option<::prost::alloc::string::String>,
304    #[prost(message, optional, tag = "3")]
305    pub image: ::core::option::Option<::prost::alloc::string::String>,
306    #[prost(message, optional, tag = "4")]
307    pub dark_mode_image: ::core::option::Option<::prost::alloc::string::String>,
308    #[prost(message, repeated, tag = "5")]
309    pub revisions: ::prost::alloc::vec::Vec<ExtensionRevision>,
310    #[prost(message, optional, tag = "6")]
311    pub is_hidden: ::core::option::Option<bool>,
312    #[prost(string, repeated, tag = "7")]
313    pub integrations: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
314    #[prost(message, repeated, tag = "8")]
315    pub keywords: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
316    #[prost(message, repeated, tag = "9")]
317    pub permission_denied_revisions: ::prost::alloc::vec::Vec<ExtensionRevision>,
318    #[prost(message, repeated, tag = "10")]
319    pub changelog: ::prost::alloc::vec::Vec<ChangelogEntry>,
320    #[prost(message, optional, tag = "11")]
321    pub deprecation: ::core::option::Option<Deprecation>,
322}
323/// Extension details for ingestion
324#[derive(serde::Serialize, serde::Deserialize)]
325#[serde(rename_all = "snake_case")]
326#[derive(Clone, PartialEq, ::prost::Message)]
327pub struct ExtensionData {
328    #[prost(message, optional, tag = "1")]
329    pub id: ::core::option::Option<::prost::alloc::string::String>,
330    #[prost(message, optional, tag = "2")]
331    pub name: ::core::option::Option<::prost::alloc::string::String>,
332    #[prost(message, optional, tag = "3")]
333    pub description: ::core::option::Option<::prost::alloc::string::String>,
334    #[prost(message, optional, tag = "4")]
335    pub excerpt: ::core::option::Option<::prost::alloc::string::String>,
336    #[prost(message, optional, tag = "5")]
337    pub image: ::core::option::Option<::prost::alloc::string::String>,
338    #[prost(message, optional, tag = "6")]
339    pub dark_mode_image: ::core::option::Option<::prost::alloc::string::String>,
340    #[prost(message, repeated, tag = "7")]
341    pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
342    #[prost(message, optional, tag = "8")]
343    pub version: ::core::option::Option<::prost::alloc::string::String>,
344    #[prost(message, repeated, tag = "9")]
345    pub items: ::prost::alloc::vec::Vec<ExtensionItemData>,
346    #[prost(message, repeated, tag = "10")]
347    pub integration_details: ::prost::alloc::vec::Vec<IntegrationDetail>,
348    #[prost(message, optional, tag = "11")]
349    pub is_hidden: ::core::option::Option<bool>,
350    #[prost(message, repeated, tag = "12")]
351    pub binaries: ::prost::alloc::vec::Vec<ExtensionBinary>,
352    #[prost(string, repeated, tag = "13")]
353    pub integrations: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
354    #[prost(message, repeated, tag = "14")]
355    pub keywords: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
356    #[prost(message, repeated, tag = "15")]
357    pub changelog: ::prost::alloc::vec::Vec<ChangelogEntry>,
358    #[prost(message, optional, tag = "16")]
359    pub deprecation: ::core::option::Option<Deprecation>,
360}
361#[derive(serde::Serialize, serde::Deserialize)]
362#[serde(rename_all = "snake_case")]
363#[derive(Clone, PartialEq, ::prost::Message)]
364pub struct ExtensionItemData {
365    #[prost(message, optional, tag = "1")]
366    pub name: ::core::option::Option<::prost::alloc::string::String>,
367    #[prost(message, optional, tag = "2")]
368    pub description: ::core::option::Option<::prost::alloc::string::String>,
369    #[prost(enumeration = "TargetDomain", tag = "3")]
370    pub target_domain: i32,
371    #[prost(message, optional, tag = "4")]
372    pub data: ::core::option::Option<::prost_wkt_types::Struct>,
373    #[prost(message, repeated, tag = "5")]
374    pub binaries: ::prost::alloc::vec::Vec<ExtensionItemBinary>,
375    #[prost(message, optional, tag = "6")]
376    pub is_mandatory: ::core::option::Option<bool>,
377    #[prost(message, optional, tag = "7")]
378    pub internal_id: ::core::option::Option<i32>,
379    #[prost(message, optional, tag = "8")]
380    pub unique_id: ::core::option::Option<::prost::alloc::string::String>,
381    #[prost(enumeration = "extension_item::PermissionResource", tag = "9")]
382    pub permission_resource: i32,
383}
384#[derive(serde::Serialize, serde::Deserialize)]
385#[serde(rename_all = "snake_case")]
386#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
387#[repr(i32)]
388pub enum TargetDomain {
389    Action = 0,
390    Alert = 1,
391    Enrichment = 2,
392    GrafanaDashboard = 3,
393    KibanaDashboard = 4,
394    ParsingRule = 6,
395    SavedView = 7,
396    CxCustomDashboard = 8,
397    MetricsRuleGroup = 9,
398    EventsToMetrics = 10,
399    AlertV3 = 11,
400}
401impl TargetDomain {
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            Self::Action => "ACTION",
409            Self::Alert => "ALERT",
410            Self::Enrichment => "ENRICHMENT",
411            Self::GrafanaDashboard => "GRAFANA_DASHBOARD",
412            Self::KibanaDashboard => "KIBANA_DASHBOARD",
413            Self::ParsingRule => "PARSING_RULE",
414            Self::SavedView => "SAVED_VIEW",
415            Self::CxCustomDashboard => "CX_CUSTOM_DASHBOARD",
416            Self::MetricsRuleGroup => "METRICS_RULE_GROUP",
417            Self::EventsToMetrics => "EVENTS_TO_METRICS",
418            Self::AlertV3 => "ALERT_V3",
419        }
420    }
421    /// Creates an enum from field names used in the ProtoBuf definition.
422    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
423        match value {
424            "ACTION" => Some(Self::Action),
425            "ALERT" => Some(Self::Alert),
426            "ENRICHMENT" => Some(Self::Enrichment),
427            "GRAFANA_DASHBOARD" => Some(Self::GrafanaDashboard),
428            "KIBANA_DASHBOARD" => Some(Self::KibanaDashboard),
429            "PARSING_RULE" => Some(Self::ParsingRule),
430            "SAVED_VIEW" => Some(Self::SavedView),
431            "CX_CUSTOM_DASHBOARD" => Some(Self::CxCustomDashboard),
432            "METRICS_RULE_GROUP" => Some(Self::MetricsRuleGroup),
433            "EVENTS_TO_METRICS" => Some(Self::EventsToMetrics),
434            "ALERT_V3" => Some(Self::AlertV3),
435            _ => None,
436        }
437    }
438}
439#[derive(serde::Serialize, serde::Deserialize)]
440#[serde(rename_all = "snake_case")]
441#[derive(Clone, PartialEq, ::prost::Message)]
442pub struct GetAllExtensionsRequest {
443    #[prost(message, optional, tag = "1")]
444    pub include_hidden_extensions: ::core::option::Option<bool>,
445    #[prost(message, optional, tag = "2")]
446    pub filter: ::core::option::Option<get_all_extensions_request::Filter>,
447}
448/// Nested message and enum types in `GetAllExtensionsRequest`.
449pub mod get_all_extensions_request {
450    #[derive(serde::Serialize, serde::Deserialize)]
451    #[serde(rename_all = "snake_case")]
452    #[derive(Clone, PartialEq, ::prost::Message)]
453    pub struct Filter {
454        #[prost(string, repeated, tag = "1")]
455        pub integrations: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
456    }
457}
458#[derive(serde::Serialize, serde::Deserialize)]
459#[serde(rename_all = "snake_case")]
460#[derive(Clone, PartialEq, ::prost::Message)]
461pub struct GetAllExtensionsResponse {
462    #[prost(message, repeated, tag = "1")]
463    pub extensions: ::prost::alloc::vec::Vec<get_all_extensions_response::Extension>,
464}
465/// Nested message and enum types in `GetAllExtensionsResponse`.
466pub mod get_all_extensions_response {
467    #[derive(serde::Serialize, serde::Deserialize)]
468    #[serde(rename_all = "snake_case")]
469    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
470    pub struct RevisionSummary {
471        #[prost(message, optional, tag = "1")]
472        pub item_counts: ::core::option::Option<super::ItemCounts>,
473        #[prost(message, optional, tag = "2")]
474        pub is_new: ::core::option::Option<bool>,
475    }
476    #[derive(serde::Serialize, serde::Deserialize)]
477    #[serde(rename_all = "snake_case")]
478    #[derive(Clone, PartialEq, ::prost::Message)]
479    pub struct Revision {
480        #[prost(message, optional, tag = "1")]
481        pub version: ::core::option::Option<::prost::alloc::string::String>,
482        #[prost(message, optional, tag = "2")]
483        pub description: ::core::option::Option<::prost::alloc::string::String>,
484        #[prost(message, optional, tag = "3")]
485        pub excerpt: ::core::option::Option<::prost::alloc::string::String>,
486        #[prost(message, repeated, tag = "4")]
487        pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
488        #[prost(message, repeated, tag = "5")]
489        pub integration_details: ::prost::alloc::vec::Vec<super::IntegrationDetail>,
490        #[prost(message, optional, tag = "6")]
491        pub summary: ::core::option::Option<RevisionSummary>,
492    }
493    #[derive(serde::Serialize, serde::Deserialize)]
494    #[serde(rename_all = "snake_case")]
495    #[derive(Clone, PartialEq, ::prost::Message)]
496    pub struct Extension {
497        #[prost(message, optional, tag = "1")]
498        pub id: ::core::option::Option<::prost::alloc::string::String>,
499        #[prost(message, optional, tag = "2")]
500        pub name: ::core::option::Option<::prost::alloc::string::String>,
501        #[prost(message, optional, tag = "3")]
502        pub image: ::core::option::Option<::prost::alloc::string::String>,
503        #[prost(message, optional, tag = "4")]
504        pub dark_mode_image: ::core::option::Option<::prost::alloc::string::String>,
505        #[prost(message, repeated, tag = "5")]
506        pub revisions: ::prost::alloc::vec::Vec<Revision>,
507        #[prost(message, optional, tag = "6")]
508        pub is_hidden: ::core::option::Option<bool>,
509        #[prost(string, repeated, tag = "7")]
510        pub integrations: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
511        #[prost(string, repeated, tag = "8")]
512        pub keywords: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
513        #[prost(message, optional, tag = "9")]
514        pub deprecation: ::core::option::Option<super::Deprecation>,
515    }
516}
517#[derive(serde::Serialize, serde::Deserialize)]
518#[serde(rename_all = "snake_case")]
519#[derive(Clone, PartialEq, ::prost::Message)]
520pub struct GetExtensionRequest {
521    #[prost(message, optional, tag = "1")]
522    pub id: ::core::option::Option<::prost::alloc::string::String>,
523    /// On the frontend, we don't need the dashboard binaries.
524    /// But we need them for deployment in the extensions-service - so it's kind of a temporary argument,
525    /// As soon all the deployment logic is moved to the extensions-api, it can be removed.
526    #[prost(message, optional, tag = "2")]
527    pub include_dashboard_binaries: ::core::option::Option<bool>,
528    #[prost(message, optional, tag = "3")]
529    pub include_testing_revision: ::core::option::Option<bool>,
530}
531#[derive(serde::Serialize, serde::Deserialize)]
532#[serde(rename_all = "snake_case")]
533#[derive(Clone, PartialEq, ::prost::Message)]
534pub struct GetExtensionResponse {
535    #[prost(message, optional, tag = "1")]
536    pub extension: ::core::option::Option<Extension>,
537}
538/// Generated client implementations.
539pub mod extension_service_client {
540    #![allow(
541        unused_variables,
542        dead_code,
543        missing_docs,
544        clippy::wildcard_imports,
545        clippy::let_unit_value,
546    )]
547    use tonic::codegen::*;
548    use tonic::codegen::http::Uri;
549    #[derive(Debug, Clone)]
550    pub struct ExtensionServiceClient<T> {
551        inner: tonic::client::Grpc<T>,
552    }
553    impl ExtensionServiceClient<tonic::transport::Channel> {
554        /// Attempt to create a new client by connecting to a given endpoint.
555        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
556        where
557            D: TryInto<tonic::transport::Endpoint>,
558            D::Error: Into<StdError>,
559        {
560            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
561            Ok(Self::new(conn))
562        }
563    }
564    impl<T> ExtensionServiceClient<T>
565    where
566        T: tonic::client::GrpcService<tonic::body::BoxBody>,
567        T::Error: Into<StdError>,
568        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
569        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
570    {
571        pub fn new(inner: T) -> Self {
572            let inner = tonic::client::Grpc::new(inner);
573            Self { inner }
574        }
575        pub fn with_origin(inner: T, origin: Uri) -> Self {
576            let inner = tonic::client::Grpc::with_origin(inner, origin);
577            Self { inner }
578        }
579        pub fn with_interceptor<F>(
580            inner: T,
581            interceptor: F,
582        ) -> ExtensionServiceClient<InterceptedService<T, F>>
583        where
584            F: tonic::service::Interceptor,
585            T::ResponseBody: Default,
586            T: tonic::codegen::Service<
587                http::Request<tonic::body::BoxBody>,
588                Response = http::Response<
589                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
590                >,
591            >,
592            <T as tonic::codegen::Service<
593                http::Request<tonic::body::BoxBody>,
594            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
595        {
596            ExtensionServiceClient::new(InterceptedService::new(inner, interceptor))
597        }
598        /// Compress requests with the given encoding.
599        ///
600        /// This requires the server to support it otherwise it might respond with an
601        /// error.
602        #[must_use]
603        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
604            self.inner = self.inner.send_compressed(encoding);
605            self
606        }
607        /// Enable decompressing responses.
608        #[must_use]
609        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
610            self.inner = self.inner.accept_compressed(encoding);
611            self
612        }
613        /// Limits the maximum size of a decoded message.
614        ///
615        /// Default: `4MB`
616        #[must_use]
617        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
618            self.inner = self.inner.max_decoding_message_size(limit);
619            self
620        }
621        /// Limits the maximum size of an encoded message.
622        ///
623        /// Default: `usize::MAX`
624        #[must_use]
625        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
626            self.inner = self.inner.max_encoding_message_size(limit);
627            self
628        }
629        pub async fn get_all_extensions(
630            &mut self,
631            request: impl tonic::IntoRequest<super::GetAllExtensionsRequest>,
632        ) -> std::result::Result<
633            tonic::Response<super::GetAllExtensionsResponse>,
634            tonic::Status,
635        > {
636            self.inner
637                .ready()
638                .await
639                .map_err(|e| {
640                    tonic::Status::unknown(
641                        format!("Service was not ready: {}", e.into()),
642                    )
643                })?;
644            let codec = tonic::codec::ProstCodec::default();
645            let path = http::uri::PathAndQuery::from_static(
646                "/com.coralogix.extensions.v1.ExtensionService/GetAllExtensions",
647            );
648            let mut req = request.into_request();
649            req.extensions_mut()
650                .insert(
651                    GrpcMethod::new(
652                        "com.coralogix.extensions.v1.ExtensionService",
653                        "GetAllExtensions",
654                    ),
655                );
656            self.inner.unary(req, path, codec).await
657        }
658        pub async fn get_extension(
659            &mut self,
660            request: impl tonic::IntoRequest<super::GetExtensionRequest>,
661        ) -> std::result::Result<
662            tonic::Response<super::GetExtensionResponse>,
663            tonic::Status,
664        > {
665            self.inner
666                .ready()
667                .await
668                .map_err(|e| {
669                    tonic::Status::unknown(
670                        format!("Service was not ready: {}", e.into()),
671                    )
672                })?;
673            let codec = tonic::codec::ProstCodec::default();
674            let path = http::uri::PathAndQuery::from_static(
675                "/com.coralogix.extensions.v1.ExtensionService/GetExtension",
676            );
677            let mut req = request.into_request();
678            req.extensions_mut()
679                .insert(
680                    GrpcMethod::new(
681                        "com.coralogix.extensions.v1.ExtensionService",
682                        "GetExtension",
683                    ),
684                );
685            self.inner.unary(req, path, codec).await
686        }
687    }
688}
689#[derive(serde::Serialize, serde::Deserialize)]
690#[serde(rename_all = "snake_case")]
691#[derive(Clone, Copy, PartialEq, ::prost::Message)]
692pub struct GetDeployedExtensionsRequest {}
693#[derive(serde::Serialize, serde::Deserialize)]
694#[serde(rename_all = "snake_case")]
695#[derive(Clone, PartialEq, ::prost::Message)]
696pub struct GetDeployedExtensionsResponse {
697    #[prost(message, repeated, tag = "1")]
698    pub deployed_extensions: ::prost::alloc::vec::Vec<
699        get_deployed_extensions_response::DeployedExtension,
700    >,
701}
702/// Nested message and enum types in `GetDeployedExtensionsResponse`.
703pub mod get_deployed_extensions_response {
704    #[derive(serde::Serialize, serde::Deserialize)]
705    #[serde(rename_all = "snake_case")]
706    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
707    pub struct DeployedExtensionSummary {
708        #[prost(message, optional, tag = "1")]
709        pub deployed_item_counts: ::core::option::Option<super::ItemCounts>,
710    }
711    #[derive(serde::Serialize, serde::Deserialize)]
712    #[serde(rename_all = "snake_case")]
713    #[derive(Clone, PartialEq, ::prost::Message)]
714    pub struct DeployedExtension {
715        #[prost(message, optional, tag = "1")]
716        pub id: ::core::option::Option<::prost::alloc::string::String>,
717        #[prost(message, optional, tag = "2")]
718        pub version: ::core::option::Option<::prost::alloc::string::String>,
719        #[prost(message, repeated, tag = "3")]
720        pub applications: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
721        #[prost(message, repeated, tag = "4")]
722        pub subsystems: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
723        #[prost(message, repeated, tag = "5")]
724        pub item_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
725        #[prost(message, optional, tag = "6")]
726        pub summary: ::core::option::Option<DeployedExtensionSummary>,
727    }
728}
729#[derive(serde::Serialize, serde::Deserialize)]
730#[serde(rename_all = "snake_case")]
731#[derive(Clone, PartialEq, ::prost::Message)]
732pub struct ExtensionDeployment {
733    #[prost(message, optional, tag = "1")]
734    pub id: ::core::option::Option<::prost::alloc::string::String>,
735    #[prost(message, optional, tag = "2")]
736    pub version: ::core::option::Option<::prost::alloc::string::String>,
737    #[prost(message, repeated, tag = "3")]
738    pub item_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
739    #[prost(message, repeated, tag = "4")]
740    pub applications: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
741    #[prost(message, repeated, tag = "5")]
742    pub subsystems: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
743}
744#[derive(serde::Serialize, serde::Deserialize)]
745#[serde(rename_all = "snake_case")]
746#[derive(Clone, PartialEq, ::prost::Message)]
747pub struct DeployExtensionRequest {
748    #[prost(message, optional, tag = "1")]
749    pub id: ::core::option::Option<::prost::alloc::string::String>,
750    #[prost(message, optional, tag = "2")]
751    pub version: ::core::option::Option<::prost::alloc::string::String>,
752    #[prost(message, repeated, tag = "3")]
753    pub item_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
754    #[prost(message, repeated, tag = "4")]
755    pub applications: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
756    #[prost(message, repeated, tag = "5")]
757    pub subsystems: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
758    #[prost(message, optional, tag = "6")]
759    pub extension_deployment: ::core::option::Option<ExtensionDeployment>,
760}
761#[derive(serde::Serialize, serde::Deserialize)]
762#[serde(rename_all = "snake_case")]
763#[derive(Clone, PartialEq, ::prost::Message)]
764pub struct DeployExtensionResponse {
765    #[prost(message, optional, tag = "1")]
766    pub extension_deployment: ::core::option::Option<ExtensionDeployment>,
767}
768#[derive(serde::Serialize, serde::Deserialize)]
769#[serde(rename_all = "snake_case")]
770#[derive(Clone, PartialEq, ::prost::Message)]
771pub struct UpdateExtensionRequest {
772    #[prost(message, optional, tag = "1")]
773    pub id: ::core::option::Option<::prost::alloc::string::String>,
774    #[prost(message, optional, tag = "2")]
775    pub version: ::core::option::Option<::prost::alloc::string::String>,
776    #[prost(message, repeated, tag = "3")]
777    pub item_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
778    #[prost(message, repeated, tag = "4")]
779    pub applications: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
780    #[prost(message, repeated, tag = "5")]
781    pub subsystems: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
782    #[prost(message, optional, tag = "6")]
783    pub extension_deployment: ::core::option::Option<ExtensionDeployment>,
784}
785#[derive(serde::Serialize, serde::Deserialize)]
786#[serde(rename_all = "snake_case")]
787#[derive(Clone, PartialEq, ::prost::Message)]
788pub struct UpdateExtensionResponse {
789    #[prost(message, optional, tag = "1")]
790    pub extension_deployment: ::core::option::Option<ExtensionDeployment>,
791}
792#[derive(serde::Serialize, serde::Deserialize)]
793#[serde(rename_all = "snake_case")]
794#[derive(Clone, PartialEq, ::prost::Message)]
795pub struct UndeployExtensionRequest {
796    #[prost(message, optional, tag = "1")]
797    pub id: ::core::option::Option<::prost::alloc::string::String>,
798    #[prost(message, repeated, tag = "2")]
799    pub kept_extension_items: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
800}
801#[derive(serde::Serialize, serde::Deserialize)]
802#[serde(rename_all = "snake_case")]
803#[derive(Clone, PartialEq, ::prost::Message)]
804pub struct UndeployExtensionResponse {
805    #[prost(message, repeated, tag = "1")]
806    pub failed_items: ::prost::alloc::vec::Vec<undeploy_extension_response::FailedItem>,
807    #[prost(message, optional, tag = "2")]
808    pub extension_deployment: ::core::option::Option<ExtensionDeployment>,
809}
810/// Nested message and enum types in `UndeployExtensionResponse`.
811pub mod undeploy_extension_response {
812    #[derive(serde::Serialize, serde::Deserialize)]
813    #[serde(rename_all = "snake_case")]
814    #[derive(Clone, PartialEq, ::prost::Message)]
815    pub struct FailedItem {
816        #[prost(message, optional, tag = "1")]
817        pub item_id: ::core::option::Option<::prost::alloc::string::String>,
818        #[prost(message, optional, tag = "2")]
819        pub remote_id: ::core::option::Option<::prost::alloc::string::String>,
820        #[prost(message, optional, tag = "3")]
821        pub reason: ::core::option::Option<::prost::alloc::string::String>,
822    }
823}
824/// Generated client implementations.
825pub mod extension_deployment_service_client {
826    #![allow(
827        unused_variables,
828        dead_code,
829        missing_docs,
830        clippy::wildcard_imports,
831        clippy::let_unit_value,
832    )]
833    use tonic::codegen::*;
834    use tonic::codegen::http::Uri;
835    #[derive(Debug, Clone)]
836    pub struct ExtensionDeploymentServiceClient<T> {
837        inner: tonic::client::Grpc<T>,
838    }
839    impl ExtensionDeploymentServiceClient<tonic::transport::Channel> {
840        /// Attempt to create a new client by connecting to a given endpoint.
841        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
842        where
843            D: TryInto<tonic::transport::Endpoint>,
844            D::Error: Into<StdError>,
845        {
846            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
847            Ok(Self::new(conn))
848        }
849    }
850    impl<T> ExtensionDeploymentServiceClient<T>
851    where
852        T: tonic::client::GrpcService<tonic::body::BoxBody>,
853        T::Error: Into<StdError>,
854        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
855        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
856    {
857        pub fn new(inner: T) -> Self {
858            let inner = tonic::client::Grpc::new(inner);
859            Self { inner }
860        }
861        pub fn with_origin(inner: T, origin: Uri) -> Self {
862            let inner = tonic::client::Grpc::with_origin(inner, origin);
863            Self { inner }
864        }
865        pub fn with_interceptor<F>(
866            inner: T,
867            interceptor: F,
868        ) -> ExtensionDeploymentServiceClient<InterceptedService<T, F>>
869        where
870            F: tonic::service::Interceptor,
871            T::ResponseBody: Default,
872            T: tonic::codegen::Service<
873                http::Request<tonic::body::BoxBody>,
874                Response = http::Response<
875                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
876                >,
877            >,
878            <T as tonic::codegen::Service<
879                http::Request<tonic::body::BoxBody>,
880            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
881        {
882            ExtensionDeploymentServiceClient::new(
883                InterceptedService::new(inner, interceptor),
884            )
885        }
886        /// Compress requests with the given encoding.
887        ///
888        /// This requires the server to support it otherwise it might respond with an
889        /// error.
890        #[must_use]
891        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
892            self.inner = self.inner.send_compressed(encoding);
893            self
894        }
895        /// Enable decompressing responses.
896        #[must_use]
897        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
898            self.inner = self.inner.accept_compressed(encoding);
899            self
900        }
901        /// Limits the maximum size of a decoded message.
902        ///
903        /// Default: `4MB`
904        #[must_use]
905        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
906            self.inner = self.inner.max_decoding_message_size(limit);
907            self
908        }
909        /// Limits the maximum size of an encoded message.
910        ///
911        /// Default: `usize::MAX`
912        #[must_use]
913        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
914            self.inner = self.inner.max_encoding_message_size(limit);
915            self
916        }
917        pub async fn get_deployed_extensions(
918            &mut self,
919            request: impl tonic::IntoRequest<super::GetDeployedExtensionsRequest>,
920        ) -> std::result::Result<
921            tonic::Response<super::GetDeployedExtensionsResponse>,
922            tonic::Status,
923        > {
924            self.inner
925                .ready()
926                .await
927                .map_err(|e| {
928                    tonic::Status::unknown(
929                        format!("Service was not ready: {}", e.into()),
930                    )
931                })?;
932            let codec = tonic::codec::ProstCodec::default();
933            let path = http::uri::PathAndQuery::from_static(
934                "/com.coralogix.extensions.v1.ExtensionDeploymentService/GetDeployedExtensions",
935            );
936            let mut req = request.into_request();
937            req.extensions_mut()
938                .insert(
939                    GrpcMethod::new(
940                        "com.coralogix.extensions.v1.ExtensionDeploymentService",
941                        "GetDeployedExtensions",
942                    ),
943                );
944            self.inner.unary(req, path, codec).await
945        }
946        pub async fn deploy_extension(
947            &mut self,
948            request: impl tonic::IntoRequest<super::DeployExtensionRequest>,
949        ) -> std::result::Result<
950            tonic::Response<super::DeployExtensionResponse>,
951            tonic::Status,
952        > {
953            self.inner
954                .ready()
955                .await
956                .map_err(|e| {
957                    tonic::Status::unknown(
958                        format!("Service was not ready: {}", e.into()),
959                    )
960                })?;
961            let codec = tonic::codec::ProstCodec::default();
962            let path = http::uri::PathAndQuery::from_static(
963                "/com.coralogix.extensions.v1.ExtensionDeploymentService/DeployExtension",
964            );
965            let mut req = request.into_request();
966            req.extensions_mut()
967                .insert(
968                    GrpcMethod::new(
969                        "com.coralogix.extensions.v1.ExtensionDeploymentService",
970                        "DeployExtension",
971                    ),
972                );
973            self.inner.unary(req, path, codec).await
974        }
975        pub async fn update_extension(
976            &mut self,
977            request: impl tonic::IntoRequest<super::UpdateExtensionRequest>,
978        ) -> std::result::Result<
979            tonic::Response<super::UpdateExtensionResponse>,
980            tonic::Status,
981        > {
982            self.inner
983                .ready()
984                .await
985                .map_err(|e| {
986                    tonic::Status::unknown(
987                        format!("Service was not ready: {}", e.into()),
988                    )
989                })?;
990            let codec = tonic::codec::ProstCodec::default();
991            let path = http::uri::PathAndQuery::from_static(
992                "/com.coralogix.extensions.v1.ExtensionDeploymentService/UpdateExtension",
993            );
994            let mut req = request.into_request();
995            req.extensions_mut()
996                .insert(
997                    GrpcMethod::new(
998                        "com.coralogix.extensions.v1.ExtensionDeploymentService",
999                        "UpdateExtension",
1000                    ),
1001                );
1002            self.inner.unary(req, path, codec).await
1003        }
1004        pub async fn undeploy_extension(
1005            &mut self,
1006            request: impl tonic::IntoRequest<super::UndeployExtensionRequest>,
1007        ) -> std::result::Result<
1008            tonic::Response<super::UndeployExtensionResponse>,
1009            tonic::Status,
1010        > {
1011            self.inner
1012                .ready()
1013                .await
1014                .map_err(|e| {
1015                    tonic::Status::unknown(
1016                        format!("Service was not ready: {}", e.into()),
1017                    )
1018                })?;
1019            let codec = tonic::codec::ProstCodec::default();
1020            let path = http::uri::PathAndQuery::from_static(
1021                "/com.coralogix.extensions.v1.ExtensionDeploymentService/UndeployExtension",
1022            );
1023            let mut req = request.into_request();
1024            req.extensions_mut()
1025                .insert(
1026                    GrpcMethod::new(
1027                        "com.coralogix.extensions.v1.ExtensionDeploymentService",
1028                        "UndeployExtension",
1029                    ),
1030                );
1031            self.inner.unary(req, path, codec).await
1032        }
1033    }
1034}
1035#[derive(serde::Serialize, serde::Deserialize)]
1036#[serde(rename_all = "snake_case")]
1037#[derive(Clone, PartialEq, ::prost::Message)]
1038pub struct InitializeTestingRevisionRequest {
1039    #[prost(message, optional, tag = "1")]
1040    pub extension_data: ::core::option::Option<ExtensionData>,
1041}
1042#[derive(serde::Serialize, serde::Deserialize)]
1043#[serde(rename_all = "snake_case")]
1044#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1045pub struct InitializeTestingRevisionResponse {}
1046#[derive(serde::Serialize, serde::Deserialize)]
1047#[serde(rename_all = "snake_case")]
1048#[derive(Clone, PartialEq, ::prost::Message)]
1049pub struct CleanupTestingRevisionRequest {
1050    #[prost(message, optional, tag = "1")]
1051    pub id: ::core::option::Option<::prost::alloc::string::String>,
1052}
1053#[derive(serde::Serialize, serde::Deserialize)]
1054#[serde(rename_all = "snake_case")]
1055#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1056pub struct CleanupTestingRevisionResponse {}
1057#[derive(serde::Serialize, serde::Deserialize)]
1058#[serde(rename_all = "snake_case")]
1059#[derive(Clone, PartialEq, ::prost::Message)]
1060pub struct TestExtensionRevisionRequest {
1061    #[prost(message, optional, tag = "1")]
1062    pub extension_data: ::core::option::Option<ExtensionData>,
1063    #[prost(message, optional, tag = "2")]
1064    pub cleanup_after_test: ::core::option::Option<bool>,
1065}
1066#[derive(serde::Serialize, serde::Deserialize)]
1067#[serde(rename_all = "snake_case")]
1068#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1069pub struct TestExtensionRevisionResponse {}
1070/// Generated client implementations.
1071pub mod extension_testing_service_client {
1072    #![allow(
1073        unused_variables,
1074        dead_code,
1075        missing_docs,
1076        clippy::wildcard_imports,
1077        clippy::let_unit_value,
1078    )]
1079    use tonic::codegen::*;
1080    use tonic::codegen::http::Uri;
1081    #[derive(Debug, Clone)]
1082    pub struct ExtensionTestingServiceClient<T> {
1083        inner: tonic::client::Grpc<T>,
1084    }
1085    impl ExtensionTestingServiceClient<tonic::transport::Channel> {
1086        /// Attempt to create a new client by connecting to a given endpoint.
1087        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
1088        where
1089            D: TryInto<tonic::transport::Endpoint>,
1090            D::Error: Into<StdError>,
1091        {
1092            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
1093            Ok(Self::new(conn))
1094        }
1095    }
1096    impl<T> ExtensionTestingServiceClient<T>
1097    where
1098        T: tonic::client::GrpcService<tonic::body::BoxBody>,
1099        T::Error: Into<StdError>,
1100        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
1101        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
1102    {
1103        pub fn new(inner: T) -> Self {
1104            let inner = tonic::client::Grpc::new(inner);
1105            Self { inner }
1106        }
1107        pub fn with_origin(inner: T, origin: Uri) -> Self {
1108            let inner = tonic::client::Grpc::with_origin(inner, origin);
1109            Self { inner }
1110        }
1111        pub fn with_interceptor<F>(
1112            inner: T,
1113            interceptor: F,
1114        ) -> ExtensionTestingServiceClient<InterceptedService<T, F>>
1115        where
1116            F: tonic::service::Interceptor,
1117            T::ResponseBody: Default,
1118            T: tonic::codegen::Service<
1119                http::Request<tonic::body::BoxBody>,
1120                Response = http::Response<
1121                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
1122                >,
1123            >,
1124            <T as tonic::codegen::Service<
1125                http::Request<tonic::body::BoxBody>,
1126            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
1127        {
1128            ExtensionTestingServiceClient::new(
1129                InterceptedService::new(inner, interceptor),
1130            )
1131        }
1132        /// Compress requests with the given encoding.
1133        ///
1134        /// This requires the server to support it otherwise it might respond with an
1135        /// error.
1136        #[must_use]
1137        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
1138            self.inner = self.inner.send_compressed(encoding);
1139            self
1140        }
1141        /// Enable decompressing responses.
1142        #[must_use]
1143        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
1144            self.inner = self.inner.accept_compressed(encoding);
1145            self
1146        }
1147        /// Limits the maximum size of a decoded message.
1148        ///
1149        /// Default: `4MB`
1150        #[must_use]
1151        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
1152            self.inner = self.inner.max_decoding_message_size(limit);
1153            self
1154        }
1155        /// Limits the maximum size of an encoded message.
1156        ///
1157        /// Default: `usize::MAX`
1158        #[must_use]
1159        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
1160            self.inner = self.inner.max_encoding_message_size(limit);
1161            self
1162        }
1163        pub async fn initialize_testing_revision(
1164            &mut self,
1165            request: impl tonic::IntoRequest<super::InitializeTestingRevisionRequest>,
1166        ) -> std::result::Result<
1167            tonic::Response<super::InitializeTestingRevisionResponse>,
1168            tonic::Status,
1169        > {
1170            self.inner
1171                .ready()
1172                .await
1173                .map_err(|e| {
1174                    tonic::Status::unknown(
1175                        format!("Service was not ready: {}", e.into()),
1176                    )
1177                })?;
1178            let codec = tonic::codec::ProstCodec::default();
1179            let path = http::uri::PathAndQuery::from_static(
1180                "/com.coralogix.extensions.v1.ExtensionTestingService/InitializeTestingRevision",
1181            );
1182            let mut req = request.into_request();
1183            req.extensions_mut()
1184                .insert(
1185                    GrpcMethod::new(
1186                        "com.coralogix.extensions.v1.ExtensionTestingService",
1187                        "InitializeTestingRevision",
1188                    ),
1189                );
1190            self.inner.unary(req, path, codec).await
1191        }
1192        pub async fn cleanup_testing_revision(
1193            &mut self,
1194            request: impl tonic::IntoRequest<super::CleanupTestingRevisionRequest>,
1195        ) -> std::result::Result<
1196            tonic::Response<super::CleanupTestingRevisionResponse>,
1197            tonic::Status,
1198        > {
1199            self.inner
1200                .ready()
1201                .await
1202                .map_err(|e| {
1203                    tonic::Status::unknown(
1204                        format!("Service was not ready: {}", e.into()),
1205                    )
1206                })?;
1207            let codec = tonic::codec::ProstCodec::default();
1208            let path = http::uri::PathAndQuery::from_static(
1209                "/com.coralogix.extensions.v1.ExtensionTestingService/CleanupTestingRevision",
1210            );
1211            let mut req = request.into_request();
1212            req.extensions_mut()
1213                .insert(
1214                    GrpcMethod::new(
1215                        "com.coralogix.extensions.v1.ExtensionTestingService",
1216                        "CleanupTestingRevision",
1217                    ),
1218                );
1219            self.inner.unary(req, path, codec).await
1220        }
1221        pub async fn test_extension_revision(
1222            &mut self,
1223            request: impl tonic::IntoRequest<super::TestExtensionRevisionRequest>,
1224        ) -> std::result::Result<
1225            tonic::Response<super::TestExtensionRevisionResponse>,
1226            tonic::Status,
1227        > {
1228            self.inner
1229                .ready()
1230                .await
1231                .map_err(|e| {
1232                    tonic::Status::unknown(
1233                        format!("Service was not ready: {}", e.into()),
1234                    )
1235                })?;
1236            let codec = tonic::codec::ProstCodec::default();
1237            let path = http::uri::PathAndQuery::from_static(
1238                "/com.coralogix.extensions.v1.ExtensionTestingService/TestExtensionRevision",
1239            );
1240            let mut req = request.into_request();
1241            req.extensions_mut()
1242                .insert(
1243                    GrpcMethod::new(
1244                        "com.coralogix.extensions.v1.ExtensionTestingService",
1245                        "TestExtensionRevision",
1246                    ),
1247                );
1248            self.inner.unary(req, path, codec).await
1249        }
1250    }
1251}