sentry_protos/
sentry_protos.snuba.v1.rs

1// This file is @generated by prost-build.
2#[derive(Clone, PartialEq, ::prost::Message)]
3pub struct AttributeKey {
4    #[prost(enumeration = "attribute_key::Type", tag = "1")]
5    pub r#type: i32,
6    /// the name of the trace item attribute, everything that sentry sends by default is prefixed with
7    /// `sentry.` to allow users to send attributes of the same name.
8    /// Exampe: `sentry.duration`, `sentry.span_id` etc
9    #[prost(string, tag = "2")]
10    pub name: ::prost::alloc::string::String,
11}
12/// Nested message and enum types in `AttributeKey`.
13pub mod attribute_key {
14    /// this mostly reflects what types are able to be ingested, see eap_spans consumer for ingest details
15    #[derive(
16        Clone,
17        Copy,
18        Debug,
19        PartialEq,
20        Eq,
21        Hash,
22        PartialOrd,
23        Ord,
24        ::prost::Enumeration
25    )]
26    #[repr(i32)]
27    pub enum Type {
28        /// protobuf requirement, do not send this
29        Unspecified = 0,
30        String = 1,
31        Boolean = 2,
32        /// deprecated, use TYPE_DOUBLE instead
33        Float = 3,
34        /// note: all numbers are stored as float64, so massive integers can be rounded. USE STRING FOR IDS.
35        Int = 4,
36        Double = 5,
37        Array = 6,
38    }
39    impl Type {
40        /// String value of the enum field names used in the ProtoBuf definition.
41        ///
42        /// The values are not transformed in any way and thus are considered stable
43        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
44        pub fn as_str_name(&self) -> &'static str {
45            match self {
46                Type::Unspecified => "TYPE_UNSPECIFIED",
47                Type::String => "TYPE_STRING",
48                Type::Boolean => "TYPE_BOOLEAN",
49                Type::Float => "TYPE_FLOAT",
50                Type::Int => "TYPE_INT",
51                Type::Double => "TYPE_DOUBLE",
52                Type::Array => "TYPE_ARRAY",
53            }
54        }
55        /// Creates an enum from field names used in the ProtoBuf definition.
56        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
57            match value {
58                "TYPE_UNSPECIFIED" => Some(Self::Unspecified),
59                "TYPE_STRING" => Some(Self::String),
60                "TYPE_BOOLEAN" => Some(Self::Boolean),
61                "TYPE_FLOAT" => Some(Self::Float),
62                "TYPE_INT" => Some(Self::Int),
63                "TYPE_DOUBLE" => Some(Self::Double),
64                "TYPE_ARRAY" => Some(Self::Array),
65                _ => None,
66            }
67        }
68    }
69}
70/// custom mappings of column values
71///
72/// for example, `project_name` is changeable by the user and not stored in EAP,
73/// but sorting by it may be desired. So something like this might be done:
74///
75/// ORDER BY sentry.project_name
76/// VirtualColumnContext(
77///    from_column_name="sentry.project_id",
78///    to_column_name="sentry.project_name",
79///    value_map={"1": "sentry", "2": "snuba"},
80/// )
81///
82/// in this example `sentry.project_name` is a virtual column created by mapping
83/// values from the real column `sentry.project_id` to new values. project_id of 1
84/// gets mapped to project_name="sentry" etc.
85#[derive(Clone, PartialEq, ::prost::Message)]
86pub struct VirtualColumnContext {
87    #[prost(string, tag = "1")]
88    pub from_column_name: ::prost::alloc::string::String,
89    #[prost(string, tag = "2")]
90    pub to_column_name: ::prost::alloc::string::String,
91    #[prost(map = "string, string", tag = "3")]
92    pub value_map: ::std::collections::HashMap<
93        ::prost::alloc::string::String,
94        ::prost::alloc::string::String,
95    >,
96    #[prost(string, tag = "4")]
97    pub default_value: ::prost::alloc::string::String,
98}
99#[derive(Clone, PartialEq, ::prost::Message)]
100pub struct StrArray {
101    #[prost(string, repeated, tag = "1")]
102    pub values: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
103}
104#[derive(Clone, PartialEq, ::prost::Message)]
105pub struct IntArray {
106    #[prost(int64, repeated, tag = "1")]
107    pub values: ::prost::alloc::vec::Vec<i64>,
108}
109#[derive(Clone, PartialEq, ::prost::Message)]
110pub struct FloatArray {
111    #[prost(float, repeated, tag = "1")]
112    pub values: ::prost::alloc::vec::Vec<f32>,
113}
114#[derive(Clone, PartialEq, ::prost::Message)]
115pub struct DoubleArray {
116    #[prost(double, repeated, tag = "1")]
117    pub values: ::prost::alloc::vec::Vec<f64>,
118}
119#[derive(Clone, PartialEq, ::prost::Message)]
120pub struct Array {
121    #[prost(message, repeated, tag = "1")]
122    pub values: ::prost::alloc::vec::Vec<AttributeValue>,
123}
124#[derive(Clone, PartialEq, ::prost::Message)]
125pub struct AttributeValue {
126    /// true if the value is null
127    #[prost(bool, tag = "11")]
128    pub is_null: bool,
129    #[prost(
130        oneof = "attribute_value::Value",
131        tags = "1, 2, 4, 9, 12, 3, 8, 10, 7, 6, 5"
132    )]
133    pub value: ::core::option::Option<attribute_value::Value>,
134}
135/// Nested message and enum types in `AttributeValue`.
136pub mod attribute_value {
137    #[derive(Clone, PartialEq, ::prost::Oneof)]
138    pub enum Value {
139        #[prost(bool, tag = "1")]
140        ValBool(bool),
141        #[prost(string, tag = "2")]
142        ValStr(::prost::alloc::string::String),
143        #[prost(int64, tag = "4")]
144        ValInt(i64),
145        #[prost(double, tag = "9")]
146        ValDouble(f64),
147        #[prost(message, tag = "12")]
148        ValArray(super::Array),
149        /// Deprecated fields
150        #[prost(float, tag = "3")]
151        ValFloat(f32),
152        #[prost(message, tag = "8")]
153        ValFloatArray(super::FloatArray),
154        #[prost(message, tag = "10")]
155        ValDoubleArray(super::DoubleArray),
156        #[prost(message, tag = "7")]
157        ValIntArray(super::IntArray),
158        #[prost(message, tag = "6")]
159        ValStrArray(super::StrArray),
160        #[prost(bool, tag = "5")]
161        ValNull(bool),
162    }
163}
164#[derive(Clone, PartialEq, ::prost::Message)]
165pub struct AttributeAggregation {
166    #[prost(enumeration = "Function", tag = "1")]
167    pub aggregate: i32,
168    #[prost(message, optional, tag = "2")]
169    pub key: ::core::option::Option<AttributeKey>,
170    #[prost(string, tag = "3")]
171    pub label: ::prost::alloc::string::String,
172    #[prost(enumeration = "ExtrapolationMode", tag = "4")]
173    pub extrapolation_mode: i32,
174}
175#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
176#[repr(i32)]
177pub enum Function {
178    Unspecified = 0,
179    Sum = 1,
180    /// deprecated, use FUNCTION_AVG instead
181    Average = 2,
182    Count = 3,
183    P50 = 4,
184    P75 = 12,
185    P90 = 5,
186    P95 = 6,
187    P99 = 7,
188    Avg = 8,
189    Max = 9,
190    Min = 10,
191    Uniq = 11,
192    Any = 13,
193}
194impl Function {
195    /// String value of the enum field names used in the ProtoBuf definition.
196    ///
197    /// The values are not transformed in any way and thus are considered stable
198    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
199    pub fn as_str_name(&self) -> &'static str {
200        match self {
201            Function::Unspecified => "FUNCTION_UNSPECIFIED",
202            Function::Sum => "FUNCTION_SUM",
203            Function::Average => "FUNCTION_AVERAGE",
204            Function::Count => "FUNCTION_COUNT",
205            Function::P50 => "FUNCTION_P50",
206            Function::P75 => "FUNCTION_P75",
207            Function::P90 => "FUNCTION_P90",
208            Function::P95 => "FUNCTION_P95",
209            Function::P99 => "FUNCTION_P99",
210            Function::Avg => "FUNCTION_AVG",
211            Function::Max => "FUNCTION_MAX",
212            Function::Min => "FUNCTION_MIN",
213            Function::Uniq => "FUNCTION_UNIQ",
214            Function::Any => "FUNCTION_ANY",
215        }
216    }
217    /// Creates an enum from field names used in the ProtoBuf definition.
218    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
219        match value {
220            "FUNCTION_UNSPECIFIED" => Some(Self::Unspecified),
221            "FUNCTION_SUM" => Some(Self::Sum),
222            "FUNCTION_AVERAGE" => Some(Self::Average),
223            "FUNCTION_COUNT" => Some(Self::Count),
224            "FUNCTION_P50" => Some(Self::P50),
225            "FUNCTION_P75" => Some(Self::P75),
226            "FUNCTION_P90" => Some(Self::P90),
227            "FUNCTION_P95" => Some(Self::P95),
228            "FUNCTION_P99" => Some(Self::P99),
229            "FUNCTION_AVG" => Some(Self::Avg),
230            "FUNCTION_MAX" => Some(Self::Max),
231            "FUNCTION_MIN" => Some(Self::Min),
232            "FUNCTION_UNIQ" => Some(Self::Uniq),
233            "FUNCTION_ANY" => Some(Self::Any),
234            _ => None,
235        }
236    }
237}
238#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
239#[repr(i32)]
240pub enum ExtrapolationMode {
241    Unspecified = 0,
242    None = 1,
243    SampleWeighted = 2,
244    ClientOnly = 3,
245    ServerOnly = 4,
246}
247impl ExtrapolationMode {
248    /// String value of the enum field names used in the ProtoBuf definition.
249    ///
250    /// The values are not transformed in any way and thus are considered stable
251    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
252    pub fn as_str_name(&self) -> &'static str {
253        match self {
254            ExtrapolationMode::Unspecified => "EXTRAPOLATION_MODE_UNSPECIFIED",
255            ExtrapolationMode::None => "EXTRAPOLATION_MODE_NONE",
256            ExtrapolationMode::SampleWeighted => "EXTRAPOLATION_MODE_SAMPLE_WEIGHTED",
257            ExtrapolationMode::ClientOnly => "EXTRAPOLATION_MODE_CLIENT_ONLY",
258            ExtrapolationMode::ServerOnly => "EXTRAPOLATION_MODE_SERVER_ONLY",
259        }
260    }
261    /// Creates an enum from field names used in the ProtoBuf definition.
262    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
263        match value {
264            "EXTRAPOLATION_MODE_UNSPECIFIED" => Some(Self::Unspecified),
265            "EXTRAPOLATION_MODE_NONE" => Some(Self::None),
266            "EXTRAPOLATION_MODE_SAMPLE_WEIGHTED" => Some(Self::SampleWeighted),
267            "EXTRAPOLATION_MODE_CLIENT_ONLY" => Some(Self::ClientOnly),
268            "EXTRAPOLATION_MODE_SERVER_ONLY" => Some(Self::ServerOnly),
269            _ => None,
270        }
271    }
272}
273#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
274#[repr(i32)]
275pub enum Reliability {
276    Unspecified = 0,
277    Low = 1,
278    High = 2,
279}
280impl Reliability {
281    /// String value of the enum field names used in the ProtoBuf definition.
282    ///
283    /// The values are not transformed in any way and thus are considered stable
284    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
285    pub fn as_str_name(&self) -> &'static str {
286        match self {
287            Reliability::Unspecified => "RELIABILITY_UNSPECIFIED",
288            Reliability::Low => "RELIABILITY_LOW",
289            Reliability::High => "RELIABILITY_HIGH",
290        }
291    }
292    /// Creates an enum from field names used in the ProtoBuf definition.
293    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
294        match value {
295            "RELIABILITY_UNSPECIFIED" => Some(Self::Unspecified),
296            "RELIABILITY_LOW" => Some(Self::Low),
297            "RELIABILITY_HIGH" => Some(Self::High),
298            _ => None,
299        }
300    }
301}
302#[derive(Clone, PartialEq, ::prost::Message)]
303pub struct AndFilter {
304    #[prost(message, repeated, tag = "1")]
305    pub filters: ::prost::alloc::vec::Vec<TraceItemFilter>,
306}
307#[derive(Clone, PartialEq, ::prost::Message)]
308pub struct OrFilter {
309    #[prost(message, repeated, tag = "1")]
310    pub filters: ::prost::alloc::vec::Vec<TraceItemFilter>,
311}
312#[derive(Clone, PartialEq, ::prost::Message)]
313pub struct NotFilter {
314    #[prost(message, repeated, tag = "1")]
315    pub filters: ::prost::alloc::vec::Vec<TraceItemFilter>,
316}
317#[derive(Clone, PartialEq, ::prost::Message)]
318pub struct ComparisonFilter {
319    #[prost(message, optional, tag = "1")]
320    pub key: ::core::option::Option<AttributeKey>,
321    #[prost(enumeration = "comparison_filter::Op", tag = "2")]
322    pub op: i32,
323    #[prost(message, optional, tag = "3")]
324    pub value: ::core::option::Option<AttributeValue>,
325    /// optional, if set will ignore case for string comparisons
326    #[prost(bool, tag = "4")]
327    pub ignore_case: bool,
328}
329/// Nested message and enum types in `ComparisonFilter`.
330pub mod comparison_filter {
331    #[derive(
332        Clone,
333        Copy,
334        Debug,
335        PartialEq,
336        Eq,
337        Hash,
338        PartialOrd,
339        Ord,
340        ::prost::Enumeration
341    )]
342    #[repr(i32)]
343    pub enum Op {
344        Unspecified = 0,
345        LessThan = 1,
346        GreaterThan = 2,
347        LessThanOrEquals = 3,
348        GreaterThanOrEquals = 4,
349        Equals = 5,
350        NotEquals = 6,
351        /// string only
352        Like = 7,
353        /// string only
354        NotLike = 8,
355        /// array only
356        In = 9,
357        /// array only
358        NotIn = 10,
359    }
360    impl Op {
361        /// String value of the enum field names used in the ProtoBuf definition.
362        ///
363        /// The values are not transformed in any way and thus are considered stable
364        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
365        pub fn as_str_name(&self) -> &'static str {
366            match self {
367                Op::Unspecified => "OP_UNSPECIFIED",
368                Op::LessThan => "OP_LESS_THAN",
369                Op::GreaterThan => "OP_GREATER_THAN",
370                Op::LessThanOrEquals => "OP_LESS_THAN_OR_EQUALS",
371                Op::GreaterThanOrEquals => "OP_GREATER_THAN_OR_EQUALS",
372                Op::Equals => "OP_EQUALS",
373                Op::NotEquals => "OP_NOT_EQUALS",
374                Op::Like => "OP_LIKE",
375                Op::NotLike => "OP_NOT_LIKE",
376                Op::In => "OP_IN",
377                Op::NotIn => "OP_NOT_IN",
378            }
379        }
380        /// Creates an enum from field names used in the ProtoBuf definition.
381        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
382            match value {
383                "OP_UNSPECIFIED" => Some(Self::Unspecified),
384                "OP_LESS_THAN" => Some(Self::LessThan),
385                "OP_GREATER_THAN" => Some(Self::GreaterThan),
386                "OP_LESS_THAN_OR_EQUALS" => Some(Self::LessThanOrEquals),
387                "OP_GREATER_THAN_OR_EQUALS" => Some(Self::GreaterThanOrEquals),
388                "OP_EQUALS" => Some(Self::Equals),
389                "OP_NOT_EQUALS" => Some(Self::NotEquals),
390                "OP_LIKE" => Some(Self::Like),
391                "OP_NOT_LIKE" => Some(Self::NotLike),
392                "OP_IN" => Some(Self::In),
393                "OP_NOT_IN" => Some(Self::NotIn),
394                _ => None,
395            }
396        }
397    }
398}
399#[derive(Clone, PartialEq, ::prost::Message)]
400pub struct ExistsFilter {
401    #[prost(message, optional, tag = "1")]
402    pub key: ::core::option::Option<AttributeKey>,
403}
404/// a condition used to filter for matching "trace items"
405///
406/// ex: "exists span.duration" would mean
407/// "only give me trace items that have the attribute 'span.duration'"
408///
409/// ( traces contain trace items,
410///    eg. trace items are: span, replay, error, etc,
411///    trace items contain attributes like 'span.duration' )
412#[derive(Clone, PartialEq, ::prost::Message)]
413pub struct TraceItemFilter {
414    #[prost(oneof = "trace_item_filter::Value", tags = "1, 2, 3, 4, 5")]
415    pub value: ::core::option::Option<trace_item_filter::Value>,
416}
417/// Nested message and enum types in `TraceItemFilter`.
418pub mod trace_item_filter {
419    #[derive(Clone, PartialEq, ::prost::Oneof)]
420    pub enum Value {
421        #[prost(message, tag = "1")]
422        AndFilter(super::AndFilter),
423        #[prost(message, tag = "2")]
424        OrFilter(super::OrFilter),
425        #[prost(message, tag = "3")]
426        NotFilter(super::NotFilter),
427        #[prost(message, tag = "4")]
428        ComparisonFilter(super::ComparisonFilter),
429        #[prost(message, tag = "5")]
430        ExistsFilter(super::ExistsFilter),
431    }
432}
433#[derive(Clone, PartialEq, ::prost::Message)]
434pub struct AttributeConditionalAggregation {
435    #[prost(enumeration = "Function", tag = "1")]
436    pub aggregate: i32,
437    #[prost(message, optional, tag = "2")]
438    pub key: ::core::option::Option<AttributeKey>,
439    #[prost(string, tag = "3")]
440    pub label: ::prost::alloc::string::String,
441    #[prost(enumeration = "ExtrapolationMode", tag = "4")]
442    pub extrapolation_mode: i32,
443    #[prost(message, optional, tag = "5")]
444    pub filter: ::core::option::Option<TraceItemFilter>,
445}
446#[derive(Clone, Copy, PartialEq, ::prost::Message)]
447pub struct DownsampledStorageConfig {
448    #[prost(enumeration = "downsampled_storage_config::Mode", tag = "1")]
449    pub mode: i32,
450}
451/// Nested message and enum types in `DownsampledStorageConfig`.
452pub mod downsampled_storage_config {
453    #[derive(
454        Clone,
455        Copy,
456        Debug,
457        PartialEq,
458        Eq,
459        Hash,
460        PartialOrd,
461        Ord,
462        ::prost::Enumeration
463    )]
464    #[repr(i32)]
465    pub enum Mode {
466        Unspecified = 0,
467        /// deprecated, treated as NORMAL mode
468        Preflight = 1,
469        /// deprecated, treated as NORMAL mode
470        BestEffort = 2,
471        /// NORMAL queries are served faster and should not time out
472        /// EAP will route to whatever tier it needs to in order to facilitate this
473        /// The return payload from EAP will inform the client if there is a higher fidelity tier to scan
474        Normal = 3,
475        /// HIGHEST_ACCURACY queries go straight to tier 1
476        HighestAccuracy = 4,
477        /// queries go to tier 1 but may have their time range truncated based on data volume
478        HighestAccuracyFlextime = 5,
479        /// queries behave the same as NORMAL by default but are opted in
480        /// to lose precision if the cluster is overloaded
481        LowPriority = 6,
482    }
483    impl Mode {
484        /// String value of the enum field names used in the ProtoBuf definition.
485        ///
486        /// The values are not transformed in any way and thus are considered stable
487        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
488        pub fn as_str_name(&self) -> &'static str {
489            match self {
490                Mode::Unspecified => "MODE_UNSPECIFIED",
491                Mode::Preflight => "MODE_PREFLIGHT",
492                Mode::BestEffort => "MODE_BEST_EFFORT",
493                Mode::Normal => "MODE_NORMAL",
494                Mode::HighestAccuracy => "MODE_HIGHEST_ACCURACY",
495                Mode::HighestAccuracyFlextime => "MODE_HIGHEST_ACCURACY_FLEXTIME",
496                Mode::LowPriority => "MODE_LOW_PRIORITY",
497            }
498        }
499        /// Creates an enum from field names used in the ProtoBuf definition.
500        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
501            match value {
502                "MODE_UNSPECIFIED" => Some(Self::Unspecified),
503                "MODE_PREFLIGHT" => Some(Self::Preflight),
504                "MODE_BEST_EFFORT" => Some(Self::BestEffort),
505                "MODE_NORMAL" => Some(Self::Normal),
506                "MODE_HIGHEST_ACCURACY" => Some(Self::HighestAccuracy),
507                "MODE_HIGHEST_ACCURACY_FLEXTIME" => Some(Self::HighestAccuracyFlextime),
508                "MODE_LOW_PRIORITY" => Some(Self::LowPriority),
509                _ => None,
510            }
511        }
512    }
513}
514#[derive(Clone, Copy, PartialEq, ::prost::Message)]
515pub struct DownsampledStorageMeta {
516    /// deprecated, only use can_go_to_higher_accuracy_tier
517    #[prost(enumeration = "downsampled_storage_meta::SelectedTier", tag = "1")]
518    pub tier: i32,
519    /// how many rows did the estimator think this query would scan
520    /// 0 means the estimator was not run
521    /// deprecated, only use can_go_to_higher_accuracy_tier
522    #[prost(uint64, tag = "2")]
523    pub estimated_num_rows: u64,
524    /// if there exists a higher accuracy tier that this query could route to
525    /// note that if this query goes to a higher accuracy tier, it could potentially time out
526    #[prost(bool, tag = "3")]
527    pub can_go_to_higher_accuracy_tier: bool,
528}
529/// Nested message and enum types in `DownsampledStorageMeta`.
530pub mod downsampled_storage_meta {
531    #[derive(
532        Clone,
533        Copy,
534        Debug,
535        PartialEq,
536        Eq,
537        Hash,
538        PartialOrd,
539        Ord,
540        ::prost::Enumeration
541    )]
542    #[repr(i32)]
543    pub enum SelectedTier {
544        Unspecified = 0,
545        SelectedTier1 = 1,
546        SelectedTier8 = 2,
547        SelectedTier64 = 3,
548        SelectedTier512 = 4,
549    }
550    impl SelectedTier {
551        /// String value of the enum field names used in the ProtoBuf definition.
552        ///
553        /// The values are not transformed in any way and thus are considered stable
554        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
555        pub fn as_str_name(&self) -> &'static str {
556            match self {
557                SelectedTier::Unspecified => "SELECTED_TIER_UNSPECIFIED",
558                SelectedTier::SelectedTier1 => "SELECTED_TIER_1",
559                SelectedTier::SelectedTier8 => "SELECTED_TIER_8",
560                SelectedTier::SelectedTier64 => "SELECTED_TIER_64",
561                SelectedTier::SelectedTier512 => "SELECTED_TIER_512",
562            }
563        }
564        /// Creates an enum from field names used in the ProtoBuf definition.
565        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
566            match value {
567                "SELECTED_TIER_UNSPECIFIED" => Some(Self::Unspecified),
568                "SELECTED_TIER_1" => Some(Self::SelectedTier1),
569                "SELECTED_TIER_8" => Some(Self::SelectedTier8),
570                "SELECTED_TIER_64" => Some(Self::SelectedTier64),
571                "SELECTED_TIER_512" => Some(Self::SelectedTier512),
572                _ => None,
573            }
574        }
575    }
576}
577#[derive(Clone, Copy, PartialEq, ::prost::Message)]
578pub struct Literal {
579    #[prost(oneof = "literal::Value", tags = "1")]
580    pub value: ::core::option::Option<literal::Value>,
581}
582/// Nested message and enum types in `Literal`.
583pub mod literal {
584    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
585    pub enum Value {
586        #[prost(double, tag = "1")]
587        ValDouble(f64),
588    }
589}
590#[derive(Clone, PartialEq, ::prost::Message)]
591pub struct RequestMeta {
592    /// id of the organization we are querying data for
593    #[prost(uint64, tag = "1")]
594    pub organization_id: u64,
595    /// used for logging and metrics, ex: "snuba_admin", "eap", "replays", etc
596    #[prost(string, tag = "2")]
597    pub cogs_category: ::prost::alloc::string::String,
598    /// identifier for where the request is coming from
599    /// ex: "api.profiling.landing-chart", "api.replay.details-page"
600    #[prost(string, tag = "3")]
601    pub referrer: ::prost::alloc::string::String,
602    /// ids of the projects we are querying data for
603    #[prost(uint64, repeated, tag = "4")]
604    pub project_ids: ::prost::alloc::vec::Vec<u64>,
605    /// start timestamp we want to query data for
606    #[prost(message, optional, tag = "5")]
607    pub start_timestamp: ::core::option::Option<::prost_types::Timestamp>,
608    /// end timestamp we want to query data for
609    #[prost(message, optional, tag = "6")]
610    pub end_timestamp: ::core::option::Option<::prost_types::Timestamp>,
611    /// DEPRECATED (not implemented) - use trace_item_type instead
612    #[deprecated]
613    #[prost(enumeration = "TraceItemName", tag = "7")]
614    pub trace_item_name: i32,
615    /// the type of the trace item you are querying
616    #[prost(enumeration = "TraceItemType", tag = "8")]
617    pub trace_item_type: i32,
618    /// whether to include debug information in the response
619    #[prost(bool, tag = "10")]
620    pub debug: bool,
621    /// a unique identifier for the request, user doesnt need to set this
622    #[prost(string, tag = "11")]
623    pub request_id: ::prost::alloc::string::String,
624    /// how to query the downsampled storages
625    #[prost(message, optional, tag = "12")]
626    pub downsampled_storage_config: ::core::option::Option<DownsampledStorageConfig>,
627}
628#[derive(Clone, PartialEq, ::prost::Message)]
629pub struct ResponseMeta {
630    /// id of the request that this response relates to
631    #[prost(string, tag = "1")]
632    pub request_id: ::prost::alloc::string::String,
633    /// Optional field that is included only if debug is true
634    #[prost(message, repeated, tag = "2")]
635    pub query_info: ::prost::alloc::vec::Vec<QueryInfo>,
636    /// metadata of how the query interacted wit the downsampled storages
637    #[prost(message, optional, tag = "3")]
638    pub downsampled_storage_meta: ::core::option::Option<DownsampledStorageMeta>,
639}
640#[derive(Clone, PartialEq, ::prost::Message)]
641pub struct TraceItemFilterWithType {
642    #[prost(enumeration = "TraceItemType", tag = "1")]
643    pub item_type: i32,
644    #[prost(message, optional, tag = "2")]
645    pub filter: ::core::option::Option<TraceItemFilter>,
646}
647#[derive(Clone, PartialEq, ::prost::Message)]
648pub struct PageToken {
649    #[prost(oneof = "page_token::Value", tags = "1, 2, 3")]
650    pub value: ::core::option::Option<page_token::Value>,
651}
652/// Nested message and enum types in `PageToken`.
653pub mod page_token {
654    #[derive(Clone, PartialEq, ::prost::Oneof)]
655    pub enum Value {
656        /// standard limit/offset pagination
657        #[prost(uint64, tag = "1")]
658        Offset(u64),
659        /// the server may also encode other information indirectly through this filter offset. The client
660        /// is not expected and HIGHLY DISCOURAGED from inspecting or modifying the contents of this filter offset
661        #[prost(message, tag = "2")]
662        FilterOffset(super::TraceItemFilter),
663        /// Signifies the end of the pagination sequence. The time window is fully exhausted of results.
664        /// if this is not set, there may still be results. If this IS set, there is definitely no more results
665        #[prost(bool, tag = "3")]
666        EndPagination(bool),
667    }
668}
669#[derive(Clone, PartialEq, ::prost::Message)]
670pub struct QueryStats {
671    #[prost(int64, tag = "1")]
672    pub rows_read: i64,
673    #[prost(int64, tag = "2")]
674    pub columns_read: i64,
675    #[prost(int32, tag = "4")]
676    pub blocks: i32,
677    #[prost(int64, tag = "5")]
678    pub progress_bytes: i64,
679    #[prost(int32, tag = "8")]
680    pub max_threads: i32,
681    #[prost(message, optional, tag = "11")]
682    pub timing_marks: ::core::option::Option<TimingMarks>,
683}
684#[derive(Clone, PartialEq, ::prost::Message)]
685pub struct QueryMetadata {
686    #[prost(string, tag = "1")]
687    pub sql: ::prost::alloc::string::String,
688    #[prost(string, tag = "2")]
689    pub status: ::prost::alloc::string::String,
690    #[prost(string, tag = "3")]
691    pub clickhouse_table: ::prost::alloc::string::String,
692    #[prost(bool, tag = "4")]
693    pub r#final: bool,
694    #[prost(string, tag = "6")]
695    pub query_id: ::prost::alloc::string::String,
696    #[prost(bool, tag = "7")]
697    pub consistent: bool,
698    #[prost(bool, tag = "9")]
699    pub cache_hit: bool,
700    #[prost(string, tag = "10")]
701    pub cluster_name: ::prost::alloc::string::String,
702}
703#[derive(Clone, PartialEq, ::prost::Message)]
704pub struct TimingMarks {
705    #[prost(int64, tag = "1")]
706    pub duration_ms: i64,
707    #[prost(map = "string, int64", tag = "2")]
708    pub marks_ms: ::std::collections::HashMap<::prost::alloc::string::String, i64>,
709    #[prost(map = "string, string", tag = "3")]
710    pub tags: ::std::collections::HashMap<
711        ::prost::alloc::string::String,
712        ::prost::alloc::string::String,
713    >,
714    #[prost(int64, tag = "4")]
715    pub timestamp: i64,
716}
717#[derive(Clone, PartialEq, ::prost::Message)]
718pub struct QueryInfo {
719    #[prost(message, optional, tag = "1")]
720    pub stats: ::core::option::Option<QueryStats>,
721    #[prost(message, optional, tag = "2")]
722    pub metadata: ::core::option::Option<QueryMetadata>,
723    #[prost(string, tag = "3")]
724    pub trace_logs: ::prost::alloc::string::String,
725}
726/// DEPRECATED: use TraceItemType instead
727#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
728#[repr(i32)]
729pub enum TraceItemName {
730    Unspecified = 0,
731    EapSpans = 1,
732    EapErrors = 2,
733}
734impl TraceItemName {
735    /// String value of the enum field names used in the ProtoBuf definition.
736    ///
737    /// The values are not transformed in any way and thus are considered stable
738    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
739    pub fn as_str_name(&self) -> &'static str {
740        match self {
741            TraceItemName::Unspecified => "TRACE_ITEM_NAME_UNSPECIFIED",
742            TraceItemName::EapSpans => "TRACE_ITEM_NAME_EAP_SPANS",
743            TraceItemName::EapErrors => "TRACE_ITEM_NAME_EAP_ERRORS",
744        }
745    }
746    /// Creates an enum from field names used in the ProtoBuf definition.
747    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
748        match value {
749            "TRACE_ITEM_NAME_UNSPECIFIED" => Some(Self::Unspecified),
750            "TRACE_ITEM_NAME_EAP_SPANS" => Some(Self::EapSpans),
751            "TRACE_ITEM_NAME_EAP_ERRORS" => Some(Self::EapErrors),
752            _ => None,
753        }
754    }
755}
756#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
757#[repr(i32)]
758pub enum TraceItemType {
759    Unspecified = 0,
760    Span = 1,
761    Error = 2,
762    Log = 3,
763    UptimeCheck = 4,
764    UptimeResult = 5,
765    Replay = 6,
766    Occurrence = 7,
767    Metric = 8,
768    ProfileFunction = 9,
769    Attachment = 10,
770    Preprod = 11,
771}
772impl TraceItemType {
773    /// String value of the enum field names used in the ProtoBuf definition.
774    ///
775    /// The values are not transformed in any way and thus are considered stable
776    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
777    pub fn as_str_name(&self) -> &'static str {
778        match self {
779            TraceItemType::Unspecified => "TRACE_ITEM_TYPE_UNSPECIFIED",
780            TraceItemType::Span => "TRACE_ITEM_TYPE_SPAN",
781            TraceItemType::Error => "TRACE_ITEM_TYPE_ERROR",
782            TraceItemType::Log => "TRACE_ITEM_TYPE_LOG",
783            TraceItemType::UptimeCheck => "TRACE_ITEM_TYPE_UPTIME_CHECK",
784            TraceItemType::UptimeResult => "TRACE_ITEM_TYPE_UPTIME_RESULT",
785            TraceItemType::Replay => "TRACE_ITEM_TYPE_REPLAY",
786            TraceItemType::Occurrence => "TRACE_ITEM_TYPE_OCCURRENCE",
787            TraceItemType::Metric => "TRACE_ITEM_TYPE_METRIC",
788            TraceItemType::ProfileFunction => "TRACE_ITEM_TYPE_PROFILE_FUNCTION",
789            TraceItemType::Attachment => "TRACE_ITEM_TYPE_ATTACHMENT",
790            TraceItemType::Preprod => "TRACE_ITEM_TYPE_PREPROD",
791        }
792    }
793    /// Creates an enum from field names used in the ProtoBuf definition.
794    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
795        match value {
796            "TRACE_ITEM_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
797            "TRACE_ITEM_TYPE_SPAN" => Some(Self::Span),
798            "TRACE_ITEM_TYPE_ERROR" => Some(Self::Error),
799            "TRACE_ITEM_TYPE_LOG" => Some(Self::Log),
800            "TRACE_ITEM_TYPE_UPTIME_CHECK" => Some(Self::UptimeCheck),
801            "TRACE_ITEM_TYPE_UPTIME_RESULT" => Some(Self::UptimeResult),
802            "TRACE_ITEM_TYPE_REPLAY" => Some(Self::Replay),
803            "TRACE_ITEM_TYPE_OCCURRENCE" => Some(Self::Occurrence),
804            "TRACE_ITEM_TYPE_METRIC" => Some(Self::Metric),
805            "TRACE_ITEM_TYPE_PROFILE_FUNCTION" => Some(Self::ProfileFunction),
806            "TRACE_ITEM_TYPE_ATTACHMENT" => Some(Self::Attachment),
807            "TRACE_ITEM_TYPE_PREPROD" => Some(Self::Preprod),
808            _ => None,
809        }
810    }
811}
812/// This is a request to the TimeSeries endpoint,
813/// it is used to do a timeseries aggregation of a given attribute
814/// across traces.
815///
816/// ex: avg(span.duration) group by db.system
817/// this (conceptually) will return a 2d graph where y-axis is avg(span.duration),
818/// x-axis is time, and there is a separate line/function on the graph for each db.system value
819#[derive(Clone, PartialEq, ::prost::Message)]
820pub struct TimeSeriesRequest {
821    /// metadata about the request
822    /// used to filter time range, organization, project, etc.
823    #[prost(message, optional, tag = "1")]
824    pub meta: ::core::option::Option<RequestMeta>,
825    /// filters out spans (TraceItems) that dont meet the criteria
826    /// ex: avg(span.duration) where span.environment = 'production'
827    #[prost(message, optional, tag = "2")]
828    pub filter: ::core::option::Option<TraceItemFilter>,
829    /// deprecated, please use expressions instead
830    #[deprecated]
831    #[prost(message, repeated, tag = "3")]
832    pub aggregations: ::prost::alloc::vec::Vec<AttributeAggregation>,
833    /// the actual aggregation to compute ex: avg(span.duration) or avg(span.duration) / sum(span.duration)
834    #[prost(message, repeated, tag = "6")]
835    pub expressions: ::prost::alloc::vec::Vec<Expression>,
836    /// the level of detail in the timeseries graph,
837    /// low granularity is very detailed, high is less detail.
838    /// ex: if granularity is 1s you will have a data point every 1s,
839    ///      if its 1m you have a data point every 1m
840    /// tip: for performance, if the query is is over a large time period you should
841    ///   have high granularity
842    #[prost(uint64, tag = "4")]
843    pub granularity_secs: u64,
844    /// attribute key to group by
845    /// ex: span.environment might give 3 timeseries lines,
846    ///      one for prod, one for dev etc
847    #[prost(message, repeated, tag = "5")]
848    pub group_by: ::prost::alloc::vec::Vec<AttributeKey>,
849    /// A list of filters applied to each item type provided. These filters will be applied on a trace level to find traces
850    /// that contain each of the provided items with matching conditions. The overall request will then only apply on those traces.
851    /// If specified, the endpoint will only consider traces that match all the filters.
852    /// ex: Find the number of spans in traces containing a span with op = 'db' that also contain errors with message = 'timeout'
853    #[prost(message, repeated, tag = "7")]
854    pub trace_filters: ::prost::alloc::vec::Vec<TraceItemFilterWithType>,
855}
856#[derive(Clone, PartialEq, ::prost::Message)]
857pub struct Expression {
858    #[prost(string, tag = "3")]
859    pub label: ::prost::alloc::string::String,
860    #[prost(oneof = "expression::Expression", tags = "1, 2, 4, 5")]
861    pub expression: ::core::option::Option<expression::Expression>,
862}
863/// Nested message and enum types in `Expression`.
864pub mod expression {
865    #[derive(Clone, PartialEq, ::prost::Message)]
866    pub struct BinaryFormula {
867        #[prost(enumeration = "binary_formula::Op", tag = "1")]
868        pub op: i32,
869        #[prost(message, optional, boxed, tag = "2")]
870        pub left: ::core::option::Option<::prost::alloc::boxed::Box<super::Expression>>,
871        #[prost(message, optional, boxed, tag = "3")]
872        pub right: ::core::option::Option<::prost::alloc::boxed::Box<super::Expression>>,
873        /// optional, if the formula evalutates to null this value is returned
874        /// formula can evaluate to null if an attribute is missing for example
875        #[prost(oneof = "binary_formula::DefaultValue", tags = "4, 5")]
876        pub default_value: ::core::option::Option<binary_formula::DefaultValue>,
877    }
878    /// Nested message and enum types in `BinaryFormula`.
879    pub mod binary_formula {
880        #[derive(
881            Clone,
882            Copy,
883            Debug,
884            PartialEq,
885            Eq,
886            Hash,
887            PartialOrd,
888            Ord,
889            ::prost::Enumeration
890        )]
891        #[repr(i32)]
892        pub enum Op {
893            Unspecified = 0,
894            Divide = 1,
895            Multiply = 2,
896            Add = 3,
897            Subtract = 4,
898        }
899        impl Op {
900            /// String value of the enum field names used in the ProtoBuf definition.
901            ///
902            /// The values are not transformed in any way and thus are considered stable
903            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
904            pub fn as_str_name(&self) -> &'static str {
905                match self {
906                    Op::Unspecified => "OP_UNSPECIFIED",
907                    Op::Divide => "OP_DIVIDE",
908                    Op::Multiply => "OP_MULTIPLY",
909                    Op::Add => "OP_ADD",
910                    Op::Subtract => "OP_SUBTRACT",
911                }
912            }
913            /// Creates an enum from field names used in the ProtoBuf definition.
914            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
915                match value {
916                    "OP_UNSPECIFIED" => Some(Self::Unspecified),
917                    "OP_DIVIDE" => Some(Self::Divide),
918                    "OP_MULTIPLY" => Some(Self::Multiply),
919                    "OP_ADD" => Some(Self::Add),
920                    "OP_SUBTRACT" => Some(Self::Subtract),
921                    _ => None,
922                }
923            }
924        }
925        /// optional, if the formula evalutates to null this value is returned
926        /// formula can evaluate to null if an attribute is missing for example
927        #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
928        pub enum DefaultValue {
929            #[prost(double, tag = "4")]
930            DefaultValueDouble(f64),
931            #[prost(int64, tag = "5")]
932            DefaultValueInt64(i64),
933        }
934    }
935    #[derive(Clone, PartialEq, ::prost::Oneof)]
936    pub enum Expression {
937        #[prost(message, tag = "1")]
938        Aggregation(super::AttributeAggregation),
939        #[prost(message, tag = "2")]
940        Formula(::prost::alloc::boxed::Box<BinaryFormula>),
941        #[prost(message, tag = "4")]
942        ConditionalAggregation(super::AttributeConditionalAggregation),
943        #[prost(message, tag = "5")]
944        Literal(super::Literal),
945    }
946}
947#[derive(Clone, Copy, PartialEq, ::prost::Message)]
948pub struct DataPoint {
949    #[prost(float, tag = "1")]
950    pub data: f32,
951    /// false if this datapoint is empty, true otherwise.
952    /// optional, if not set assume true.
953    /// used for sparse time series
954    #[prost(bool, tag = "2")]
955    pub data_present: bool,
956    /// only set for extrapolated data points, 0 otherwise
957    /// the extrapolated avg sampling rate for this data point
958    #[prost(float, tag = "3")]
959    pub avg_sampling_rate: f32,
960    /// deprecated
961    #[deprecated]
962    #[prost(bool, tag = "4")]
963    pub is_reliable: bool,
964    /// the reliability of the data value based on math based on confidence intervals and sample size
965    #[prost(enumeration = "Reliability", tag = "5")]
966    pub reliability: i32,
967    /// the sample count for this data point
968    #[prost(int64, tag = "6")]
969    pub sample_count: i64,
970}
971#[derive(Clone, PartialEq, ::prost::Message)]
972pub struct TimeSeries {
973    #[prost(string, tag = "1")]
974    pub label: ::prost::alloc::string::String,
975    /// the names and values of the attribute keys which
976    /// were in the group by
977    #[prost(map = "string, string", tag = "2")]
978    pub group_by_attributes: ::std::collections::HashMap<
979        ::prost::alloc::string::String,
980        ::prost::alloc::string::String,
981    >,
982    /// time bucket for each data point in the timeseries
983    #[prost(message, repeated, tag = "3")]
984    pub buckets: ::prost::alloc::vec::Vec<::prost_types::Timestamp>,
985    #[prost(message, repeated, tag = "4")]
986    pub data_points: ::prost::alloc::vec::Vec<DataPoint>,
987    /// number of events used to calculate this timeseries
988    #[prost(uint64, tag = "5")]
989    pub num_events: u64,
990    /// deprecated
991    #[deprecated]
992    #[prost(float, tag = "6")]
993    pub avg_sampling_rate: f32,
994}
995/// This is the response from the TimeSeries endpoint,
996/// it is the counterpart of TimeSeriesRequest
997#[derive(Clone, PartialEq, ::prost::Message)]
998pub struct TimeSeriesResponse {
999    #[prost(message, repeated, tag = "1")]
1000    pub result_timeseries: ::prost::alloc::vec::Vec<TimeSeries>,
1001    #[prost(message, optional, tag = "5")]
1002    pub meta: ::core::option::Option<ResponseMeta>,
1003}
1004#[derive(Clone, PartialEq, ::prost::Message)]
1005pub struct CreateSubscriptionRequest {
1006    #[prost(message, optional, tag = "1")]
1007    pub time_series_request: ::core::option::Option<TimeSeriesRequest>,
1008    #[prost(uint32, tag = "2")]
1009    pub time_window_secs: u32,
1010    #[prost(uint32, tag = "3")]
1011    pub resolution_secs: u32,
1012}
1013#[derive(Clone, PartialEq, ::prost::Message)]
1014pub struct CreateSubscriptionResponse {
1015    #[prost(string, tag = "1")]
1016    pub subscription_id: ::prost::alloc::string::String,
1017}
1018/// DeleteTraceItemsRequest either
1019///    1. initiates a delete of all items in provided trace_ids
1020///    2. deletes all items matching a set of TraceItemFilterWithType\[s\]
1021/// Behavior is unspecified if both trace_ids and filters are provided.
1022///
1023/// It should also remove downsampled copies of anything it deletes.
1024/// The response will be an acknowledgement of a request, but not
1025/// a guarantee that the delete has been fulfilled.
1026#[derive(Clone, PartialEq, ::prost::Message)]
1027pub struct DeleteTraceItemsRequest {
1028    #[prost(message, optional, tag = "1")]
1029    pub meta: ::core::option::Option<RequestMeta>,
1030    #[prost(string, repeated, tag = "2")]
1031    pub trace_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1032    #[prost(message, repeated, tag = "3")]
1033    pub filters: ::prost::alloc::vec::Vec<TraceItemFilterWithType>,
1034}
1035/// DeleteTraceItemsResponse notifies acceptance of the delete and returns
1036/// a count of items matched by the request at query time. This count
1037/// could change by the time the delete is executed.
1038#[derive(Clone, PartialEq, ::prost::Message)]
1039pub struct DeleteTraceItemsResponse {
1040    #[prost(message, optional, tag = "1")]
1041    pub meta: ::core::option::Option<ResponseMeta>,
1042    #[prost(uint32, tag = "2")]
1043    pub matching_items_count: u32,
1044}
1045#[derive(Clone, PartialEq, ::prost::Message)]
1046pub struct TracePageToken {
1047    /// This class exists to avoid circular imports with the PageToken class
1048    /// The next version of the proto will have a PageToken class that can be used
1049    /// for all endpoints, and this class can be removed.
1050    #[prost(oneof = "trace_page_token::Value", tags = "1, 2, 3")]
1051    pub value: ::core::option::Option<trace_page_token::Value>,
1052}
1053/// Nested message and enum types in `TracePageToken`.
1054pub mod trace_page_token {
1055    /// This class exists to avoid circular imports with the PageToken class
1056    /// The next version of the proto will have a PageToken class that can be used
1057    /// for all endpoints, and this class can be removed.
1058    #[derive(Clone, PartialEq, ::prost::Oneof)]
1059    pub enum Value {
1060        #[prost(uint64, tag = "1")]
1061        Offset(u64),
1062        /// Instead of using offset (which requires all the scanning and ordering),
1063        /// the server sends back a filter clause to be added on to the filter conditions
1064        /// which skips the previous results altogether, avoiding extra scanning and sorting
1065        #[prost(message, tag = "2")]
1066        EventFilter(super::EventFilter),
1067        #[prost(message, tag = "3")]
1068        TraceFilter(super::TraceFilter),
1069    }
1070}
1071#[derive(Clone, PartialEq, ::prost::Message)]
1072pub struct FindTracesRequest {
1073    #[prost(message, optional, tag = "1")]
1074    pub meta: ::core::option::Option<RequestMeta>,
1075    #[prost(message, optional, tag = "2")]
1076    pub filter: ::core::option::Option<TraceFilter>,
1077    #[prost(message, optional, tag = "3")]
1078    pub page_token: ::core::option::Option<TracePageToken>,
1079    #[prost(enumeration = "TraceOrderBy", tag = "4")]
1080    pub order_by: i32,
1081}
1082#[derive(Clone, PartialEq, ::prost::Message)]
1083pub struct TraceResponse {
1084    #[prost(string, tag = "1")]
1085    pub trace_id: ::prost::alloc::string::String,
1086    #[prost(message, optional, tag = "5")]
1087    pub start_timestamp: ::core::option::Option<::prost_types::Timestamp>,
1088    #[prost(message, optional, tag = "6")]
1089    pub end_timestamp: ::core::option::Option<::prost_types::Timestamp>,
1090}
1091#[derive(Clone, PartialEq, ::prost::Message)]
1092pub struct FindTracesResponse {
1093    #[prost(message, repeated, tag = "1")]
1094    pub traces: ::prost::alloc::vec::Vec<TraceResponse>,
1095    #[prost(message, optional, tag = "2")]
1096    pub page_token: ::core::option::Option<TracePageToken>,
1097}
1098#[derive(Clone, PartialEq, ::prost::Message)]
1099pub struct EventFilter {
1100    #[prost(enumeration = "TraceItemName", tag = "1")]
1101    pub trace_item_name: i32,
1102    #[prost(message, optional, tag = "2")]
1103    pub filter: ::core::option::Option<TraceItemFilter>,
1104}
1105#[derive(Clone, PartialEq, ::prost::Message)]
1106pub struct AndTraceFilter {
1107    #[prost(message, repeated, tag = "1")]
1108    pub filters: ::prost::alloc::vec::Vec<TraceFilter>,
1109}
1110#[derive(Clone, PartialEq, ::prost::Message)]
1111pub struct OrTraceFilter {
1112    #[prost(message, repeated, tag = "1")]
1113    pub filters: ::prost::alloc::vec::Vec<TraceFilter>,
1114}
1115#[derive(Clone, PartialEq, ::prost::Message)]
1116pub struct NotTraceFilter {
1117    #[prost(message, repeated, tag = "1")]
1118    pub filters: ::prost::alloc::vec::Vec<TraceFilter>,
1119}
1120/// Represents a set of conditions for finding particular events
1121/// in a trace. Each EventFilter is meant to find one particular
1122/// type of event. Those can then be combined to find traces that
1123/// contain different combinations of events.
1124#[derive(Clone, PartialEq, ::prost::Message)]
1125pub struct TraceFilter {
1126    #[prost(oneof = "trace_filter::Filter", tags = "1, 2, 3, 4")]
1127    pub filter: ::core::option::Option<trace_filter::Filter>,
1128}
1129/// Nested message and enum types in `TraceFilter`.
1130pub mod trace_filter {
1131    #[derive(Clone, PartialEq, ::prost::Oneof)]
1132    pub enum Filter {
1133        #[prost(message, tag = "1")]
1134        AndFilter(super::AndTraceFilter),
1135        #[prost(message, tag = "2")]
1136        OrFilter(super::OrTraceFilter),
1137        #[prost(message, tag = "3")]
1138        NotFilter(super::NotTraceFilter),
1139        #[prost(message, tag = "4")]
1140        EventFilter(super::EventFilter),
1141    }
1142}
1143#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1144#[repr(i32)]
1145pub enum TraceOrderBy {
1146    Unspecified = 0,
1147    EndTime = 1,
1148    TraceDuration = 2,
1149}
1150impl TraceOrderBy {
1151    /// String value of the enum field names used in the ProtoBuf definition.
1152    ///
1153    /// The values are not transformed in any way and thus are considered stable
1154    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1155    pub fn as_str_name(&self) -> &'static str {
1156        match self {
1157            TraceOrderBy::Unspecified => "TRACE_ORDER_BY_UNSPECIFIED",
1158            TraceOrderBy::EndTime => "TRACE_ORDER_BY_END_TIME",
1159            TraceOrderBy::TraceDuration => "TRACE_ORDER_BY_TRACE_DURATION",
1160        }
1161    }
1162    /// Creates an enum from field names used in the ProtoBuf definition.
1163    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1164        match value {
1165            "TRACE_ORDER_BY_UNSPECIFIED" => Some(Self::Unspecified),
1166            "TRACE_ORDER_BY_END_TIME" => Some(Self::EndTime),
1167            "TRACE_ORDER_BY_TRACE_DURATION" => Some(Self::TraceDuration),
1168            _ => None,
1169        }
1170    }
1171}
1172/// GetTraceRequest lets you query a trace by trace_id, returning all its items.
1173///
1174/// Each item will return every attributes by default or you can pass a list of
1175/// attributes to return for each item type.
1176#[derive(Clone, PartialEq, ::prost::Message)]
1177pub struct GetTraceRequest {
1178    #[prost(message, optional, tag = "1")]
1179    pub meta: ::core::option::Option<RequestMeta>,
1180    #[prost(string, tag = "2")]
1181    pub trace_id: ::prost::alloc::string::String,
1182    /// A list of items and their attributes to return in the response.
1183    #[prost(message, repeated, tag = "3")]
1184    pub items: ::prost::alloc::vec::Vec<get_trace_request::TraceItem>,
1185    /// Optional page token for pagination. If provided, returns the next page of results.
1186    #[prost(message, optional, tag = "4")]
1187    pub page_token: ::core::option::Option<PageToken>,
1188    /// Optional limit on the number of items to return per page. If not specified,
1189    /// a default limit will be applied by the server.
1190    #[prost(uint32, tag = "5")]
1191    pub limit: u32,
1192}
1193/// Nested message and enum types in `GetTraceRequest`.
1194pub mod get_trace_request {
1195    #[derive(Clone, PartialEq, ::prost::Message)]
1196    pub struct TraceItem {
1197        /// DEPRECATED: use item_type instead
1198        #[deprecated]
1199        #[prost(enumeration = "super::TraceItemName", tag = "1")]
1200        pub r#type: i32,
1201        /// If attributes is empty, all attributes will be returned for this type.
1202        #[prost(message, repeated, tag = "2")]
1203        pub attributes: ::prost::alloc::vec::Vec<super::AttributeKey>,
1204        #[prost(enumeration = "super::TraceItemType", tag = "3")]
1205        pub item_type: i32,
1206    }
1207}
1208/// GetTraceResponse returns a trace and all its items.
1209#[derive(Clone, PartialEq, ::prost::Message)]
1210pub struct GetTraceResponse {
1211    #[prost(string, tag = "1")]
1212    pub trace_id: ::prost::alloc::string::String,
1213    #[prost(message, optional, tag = "2")]
1214    pub meta: ::core::option::Option<ResponseMeta>,
1215    #[prost(message, repeated, tag = "3")]
1216    pub item_groups: ::prost::alloc::vec::Vec<get_trace_response::ItemGroup>,
1217    /// Page token for the next page of results.
1218    #[prost(message, optional, tag = "4")]
1219    pub page_token: ::core::option::Option<PageToken>,
1220}
1221/// Nested message and enum types in `GetTraceResponse`.
1222pub mod get_trace_response {
1223    #[derive(Clone, PartialEq, ::prost::Message)]
1224    pub struct Item {
1225        #[prost(string, tag = "1")]
1226        pub id: ::prost::alloc::string::String,
1227        #[prost(message, optional, tag = "2")]
1228        pub timestamp: ::core::option::Option<::prost_types::Timestamp>,
1229        #[prost(message, repeated, tag = "3")]
1230        pub attributes: ::prost::alloc::vec::Vec<item::Attribute>,
1231    }
1232    /// Nested message and enum types in `Item`.
1233    pub mod item {
1234        #[derive(Clone, PartialEq, ::prost::Message)]
1235        pub struct Attribute {
1236            #[prost(message, optional, tag = "1")]
1237            pub key: ::core::option::Option<super::super::AttributeKey>,
1238            #[prost(message, optional, tag = "2")]
1239            pub value: ::core::option::Option<super::super::AttributeValue>,
1240        }
1241    }
1242    /// ItemGroup is a list of items of a specific type.
1243    #[derive(Clone, PartialEq, ::prost::Message)]
1244    pub struct ItemGroup {
1245        /// DEPRECATED: use item_type instead
1246        #[deprecated]
1247        #[prost(enumeration = "super::TraceItemName", tag = "1")]
1248        pub r#type: i32,
1249        #[prost(message, repeated, tag = "2")]
1250        pub items: ::prost::alloc::vec::Vec<Item>,
1251        #[prost(enumeration = "super::TraceItemType", tag = "3")]
1252        pub item_type: i32,
1253    }
1254}
1255/// TraceAttribute represents the attribute of a trace.
1256#[derive(Clone, PartialEq, ::prost::Message)]
1257pub struct TraceAttribute {
1258    #[prost(enumeration = "trace_attribute::Key", tag = "1")]
1259    pub key: i32,
1260    #[prost(message, optional, tag = "2")]
1261    pub value: ::core::option::Option<AttributeValue>,
1262    /// AttributeKey.Type will specify the type of the attribute we return.
1263    /// It does not need to be sent when requesting an attribute.
1264    #[prost(enumeration = "attribute_key::Type", tag = "3")]
1265    pub r#type: i32,
1266}
1267/// Nested message and enum types in `TraceAttribute`.
1268pub mod trace_attribute {
1269    /// Key lists the available trace attribute keys you can query.
1270    #[derive(
1271        Clone,
1272        Copy,
1273        Debug,
1274        PartialEq,
1275        Eq,
1276        Hash,
1277        PartialOrd,
1278        Ord,
1279        ::prost::Enumeration
1280    )]
1281    #[repr(i32)]
1282    pub enum Key {
1283        Unspecified = 0,
1284        TraceId = 1,
1285        /// KEY_START_TIMESTAMP will return the earliest timestamp seen in the trace.
1286        StartTimestamp = 2,
1287        /// KEY_ROOT_SPAN_NAME will return the name of the root (segment) span of
1288        /// the trace.
1289        RootSpanName = 3,
1290        /// KEY_TOTAL_ITEM_COUNT will return the count of all the items in a trace,
1291        /// regardless of the conditions applied.
1292        TotalItemCount = 4,
1293        /// KEY_FILTERED_ITEM_COUNT will return the count of items where the filters
1294        /// apply.
1295        /// For example, in a trace with 5 items (1 http.server span, 4 db spans),
1296        /// if we query for traces with span.op == "db", this will return 4.
1297        FilteredItemCount = 5,
1298        /// KEY_ROOT_SPAN_DURATION_MS will return the duration of the root span in
1299        /// milliseconds.
1300        RootSpanDurationMs = 6,
1301        /// KEY_ROOT_SPAN_PROJECT_ID returns the project ID associated with the root
1302        /// span.
1303        RootSpanProjectId = 7,
1304        /// KEY_EARLIEST_SPAN_NAME returns the name of the earliest span of a trace,
1305        /// regardless if it's a root span or not
1306        EarliestSpanName = 8,
1307        /// KEY_EARLIEST_FRONTEND_SPAN returns the name of the earliest span emitted
1308        /// by the frontend (for example, span op being `pageload` or `navigation`).
1309        EarliestFrontendSpan = 9,
1310        /// KEY_END_TIMESTAMP will return the latest timestamp seen in the trace.
1311        EndTimestamp = 10,
1312        /// KEY_EARLIEST_SPAN_PROJECT_ID returns the project ID associated with the earliest span.
1313        EarliestSpanProjectId = 11,
1314        /// KEY_EARLIEST_SPAN_DURATION_MS will return the duration of the earliest span in milliseconds.
1315        EarliestSpanDurationMs = 12,
1316        /// KEY_EARLIEST_FRONTEND_SPAN_PROJECT_ID returns the project ID associated with the earliest frontend span.
1317        EarliestFrontendSpanProjectId = 13,
1318        /// KEY_EARLIEST_FRONTEND_SPAN_DURATION_MS will return the duration of the earliest frontend span in milliseconds.
1319        EarliestFrontendSpanDurationMs = 14,
1320    }
1321    impl Key {
1322        /// String value of the enum field names used in the ProtoBuf definition.
1323        ///
1324        /// The values are not transformed in any way and thus are considered stable
1325        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1326        pub fn as_str_name(&self) -> &'static str {
1327            match self {
1328                Key::Unspecified => "KEY_UNSPECIFIED",
1329                Key::TraceId => "KEY_TRACE_ID",
1330                Key::StartTimestamp => "KEY_START_TIMESTAMP",
1331                Key::RootSpanName => "KEY_ROOT_SPAN_NAME",
1332                Key::TotalItemCount => "KEY_TOTAL_ITEM_COUNT",
1333                Key::FilteredItemCount => "KEY_FILTERED_ITEM_COUNT",
1334                Key::RootSpanDurationMs => "KEY_ROOT_SPAN_DURATION_MS",
1335                Key::RootSpanProjectId => "KEY_ROOT_SPAN_PROJECT_ID",
1336                Key::EarliestSpanName => "KEY_EARLIEST_SPAN_NAME",
1337                Key::EarliestFrontendSpan => "KEY_EARLIEST_FRONTEND_SPAN",
1338                Key::EndTimestamp => "KEY_END_TIMESTAMP",
1339                Key::EarliestSpanProjectId => "KEY_EARLIEST_SPAN_PROJECT_ID",
1340                Key::EarliestSpanDurationMs => "KEY_EARLIEST_SPAN_DURATION_MS",
1341                Key::EarliestFrontendSpanProjectId => {
1342                    "KEY_EARLIEST_FRONTEND_SPAN_PROJECT_ID"
1343                }
1344                Key::EarliestFrontendSpanDurationMs => {
1345                    "KEY_EARLIEST_FRONTEND_SPAN_DURATION_MS"
1346                }
1347            }
1348        }
1349        /// Creates an enum from field names used in the ProtoBuf definition.
1350        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1351            match value {
1352                "KEY_UNSPECIFIED" => Some(Self::Unspecified),
1353                "KEY_TRACE_ID" => Some(Self::TraceId),
1354                "KEY_START_TIMESTAMP" => Some(Self::StartTimestamp),
1355                "KEY_ROOT_SPAN_NAME" => Some(Self::RootSpanName),
1356                "KEY_TOTAL_ITEM_COUNT" => Some(Self::TotalItemCount),
1357                "KEY_FILTERED_ITEM_COUNT" => Some(Self::FilteredItemCount),
1358                "KEY_ROOT_SPAN_DURATION_MS" => Some(Self::RootSpanDurationMs),
1359                "KEY_ROOT_SPAN_PROJECT_ID" => Some(Self::RootSpanProjectId),
1360                "KEY_EARLIEST_SPAN_NAME" => Some(Self::EarliestSpanName),
1361                "KEY_EARLIEST_FRONTEND_SPAN" => Some(Self::EarliestFrontendSpan),
1362                "KEY_END_TIMESTAMP" => Some(Self::EndTimestamp),
1363                "KEY_EARLIEST_SPAN_PROJECT_ID" => Some(Self::EarliestSpanProjectId),
1364                "KEY_EARLIEST_SPAN_DURATION_MS" => Some(Self::EarliestSpanDurationMs),
1365                "KEY_EARLIEST_FRONTEND_SPAN_PROJECT_ID" => {
1366                    Some(Self::EarliestFrontendSpanProjectId)
1367                }
1368                "KEY_EARLIEST_FRONTEND_SPAN_DURATION_MS" => {
1369                    Some(Self::EarliestFrontendSpanDurationMs)
1370                }
1371                _ => None,
1372            }
1373        }
1374    }
1375}
1376/// GetTracesRequest lets you query traces with various attributes.
1377#[derive(Clone, PartialEq, ::prost::Message)]
1378pub struct GetTracesRequest {
1379    #[prost(message, optional, tag = "1")]
1380    pub meta: ::core::option::Option<RequestMeta>,
1381    #[prost(message, optional, tag = "2")]
1382    pub page_token: ::core::option::Option<PageToken>,
1383    #[prost(uint32, tag = "3")]
1384    pub limit: u32,
1385    /// List of filters on items of the trace we'll use when querying.
1386    #[prost(message, repeated, tag = "4")]
1387    pub filters: ::prost::alloc::vec::Vec<get_traces_request::TraceFilter>,
1388    /// List of attributes we'd like to order by.
1389    #[prost(message, repeated, tag = "5")]
1390    pub order_by: ::prost::alloc::vec::Vec<get_traces_request::OrderBy>,
1391    /// List of attributes we want to query.
1392    #[prost(message, repeated, tag = "6")]
1393    pub attributes: ::prost::alloc::vec::Vec<TraceAttribute>,
1394}
1395/// Nested message and enum types in `GetTracesRequest`.
1396pub mod get_traces_request {
1397    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1398    pub struct OrderBy {
1399        #[prost(enumeration = "super::trace_attribute::Key", tag = "1")]
1400        pub key: i32,
1401        #[prost(bool, tag = "2")]
1402        pub descending: bool,
1403    }
1404    /// TraceFilter specifies conditions to apply on the items contained in a trace.
1405    #[derive(Clone, PartialEq, ::prost::Message)]
1406    pub struct TraceFilter {
1407        /// DEPRECATED: use item_type
1408        #[deprecated]
1409        #[prost(enumeration = "super::TraceItemName", tag = "1")]
1410        pub item_name: i32,
1411        #[prost(message, optional, tag = "2")]
1412        pub filter: ::core::option::Option<super::TraceItemFilter>,
1413        /// the item type we will apply the filter condition on.
1414        #[prost(enumeration = "super::TraceItemType", tag = "3")]
1415        pub item_type: i32,
1416    }
1417}
1418/// GetTracesResponse contains a list of traces returned by the request.
1419#[derive(Clone, PartialEq, ::prost::Message)]
1420pub struct GetTracesResponse {
1421    #[prost(message, optional, tag = "1")]
1422    pub page_token: ::core::option::Option<PageToken>,
1423    #[prost(message, optional, tag = "2")]
1424    pub meta: ::core::option::Option<ResponseMeta>,
1425    /// List of traces matching conditions.
1426    #[prost(message, repeated, tag = "3")]
1427    pub traces: ::prost::alloc::vec::Vec<get_traces_response::Trace>,
1428}
1429/// Nested message and enum types in `GetTracesResponse`.
1430pub mod get_traces_response {
1431    #[derive(Clone, PartialEq, ::prost::Message)]
1432    pub struct Trace {
1433        /// List of attributes queried.
1434        #[prost(message, repeated, tag = "1")]
1435        pub attributes: ::prost::alloc::vec::Vec<super::TraceAttribute>,
1436    }
1437}
1438/// TraceItemAttributeNamesRequest is a request to the TraceItemAttributeNames endpoint,
1439/// it returns the names of all queryable "TraceItemAttributes" that exist in the given projects,
1440/// date range, and other filters.
1441///
1442/// TraceItem are things like: span, error, log, replay
1443/// TraceItemAttributes could be things like: sentry.duration,user_id cart_total, etc.
1444#[derive(Clone, PartialEq, ::prost::Message)]
1445pub struct TraceItemAttributeNamesRequest {
1446    /// metadata about the request
1447    /// this is where you specify organization, project, time range etc.
1448    #[prost(message, optional, tag = "1")]
1449    pub meta: ::core::option::Option<RequestMeta>,
1450    /// maximum number of attributes to return
1451    #[prost(uint32, tag = "2")]
1452    pub limit: u32,
1453    /// offset is deprecated, please use `page_token` instead
1454    #[deprecated]
1455    #[prost(uint32, tag = "3")]
1456    pub offset: u32,
1457    /// The type of the attributes to return, must be specified,
1458    /// only TYPE_STRING and TYPE_FLOAT are supported, anything else will return empty response
1459    #[prost(enumeration = "attribute_key::Type", tag = "5")]
1460    pub r#type: i32,
1461    /// optionalfilter to only return attribute names that match the given substring
1462    #[prost(string, tag = "6")]
1463    pub value_substring_match: ::prost::alloc::string::String,
1464    /// optional, used for pagination, the next page token will be returned in the response
1465    #[prost(message, optional, tag = "7")]
1466    pub page_token: ::core::option::Option<PageToken>,
1467    /// A filter to only get relevant attribute keys
1468    /// including this makes sure that only attribute keys are returned
1469    /// which *intersect* with the ones specified in the filter.
1470    /// This is a BEST-EFFORT operation. If no co-occurring keys are found within
1471    /// 1 second, the endpoint returns without taking the intersecing attributes into account
1472    #[prost(message, optional, tag = "8")]
1473    pub intersecting_attributes_filter: ::core::option::Option<TraceItemFilter>,
1474}
1475/// TraceItemAttributeNamesResponse is the response returned by the TraceItemAttributeNames endpoint.
1476/// It is the counterpart to TraceItemAttributeNamesRequest.
1477#[derive(Clone, PartialEq, ::prost::Message)]
1478pub struct TraceItemAttributeNamesResponse {
1479    /// all attributes that matched the filters in the request
1480    #[prost(message, repeated, tag = "1")]
1481    pub attributes: ::prost::alloc::vec::Vec<
1482        trace_item_attribute_names_response::Attribute,
1483    >,
1484    /// page token for the next page of results
1485    #[prost(message, optional, tag = "2")]
1486    pub page_token: ::core::option::Option<PageToken>,
1487    /// metadata about the response
1488    #[prost(message, optional, tag = "3")]
1489    pub meta: ::core::option::Option<ResponseMeta>,
1490}
1491/// Nested message and enum types in `TraceItemAttributeNamesResponse`.
1492pub mod trace_item_attribute_names_response {
1493    #[derive(Clone, PartialEq, ::prost::Message)]
1494    pub struct Attribute {
1495        #[prost(string, tag = "1")]
1496        pub name: ::prost::alloc::string::String,
1497        #[prost(enumeration = "super::attribute_key::Type", tag = "2")]
1498        pub r#type: i32,
1499    }
1500}
1501/// TraceItemAttributeValuesRequest is a request to the TraceItemAttributeValues endpoint,
1502/// it returns the set of all possible values for the given attribute key, across the given
1503/// organization, project_id, timerange etc (specified in meta).
1504///
1505/// This endpoint only supports string values, it does not make sense
1506/// to get all the possible values of a numerical attribute
1507#[derive(Clone, PartialEq, ::prost::Message)]
1508pub struct TraceItemAttributeValuesRequest {
1509    /// metadata about the request
1510    /// this is where you specify organization, project, time range etc.
1511    #[prost(message, optional, tag = "1")]
1512    pub meta: ::core::option::Option<RequestMeta>,
1513    /// attribute you want the values of
1514    #[prost(message, optional, tag = "2")]
1515    pub key: ::core::option::Option<AttributeKey>,
1516    /// deprecated, please use the `key` field instead
1517    #[deprecated]
1518    #[prost(string, tag = "3")]
1519    pub name: ::prost::alloc::string::String,
1520    /// a substring of the value being searched for,
1521    /// only values matching this substring will be returned.
1522    /// only strict substring supported, no regex
1523    #[prost(string, tag = "4")]
1524    pub value_substring_match: ::prost::alloc::string::String,
1525    /// max number of values to return
1526    #[prost(uint32, tag = "5")]
1527    pub limit: u32,
1528    /// optional, used for pagination, the next page token will be returned in the response
1529    #[prost(message, optional, tag = "6")]
1530    pub page_token: ::core::option::Option<PageToken>,
1531}
1532/// TraceItemAttributeValuesResponse is a response from the TraceItemAttributeValues endpoint
1533/// it is the counterpart to TraceItemAttributesRequest
1534#[derive(Clone, PartialEq, ::prost::Message)]
1535pub struct TraceItemAttributeValuesResponse {
1536    /// all the values that matched the criteria specified in the request
1537    #[prost(string, repeated, tag = "1")]
1538    pub values: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1539    /// page token for the next page of results
1540    #[prost(message, optional, tag = "6")]
1541    pub page_token: ::core::option::Option<PageToken>,
1542    /// metadata about the response
1543    #[prost(message, optional, tag = "7")]
1544    pub meta: ::core::option::Option<ResponseMeta>,
1545}
1546/// This is a request to the TraceItemDetails endpoint,
1547/// it is used to query for TraceItems (ex. spans or logs)
1548/// it returns all of the information for a specific trace item.
1549#[derive(Clone, PartialEq, ::prost::Message)]
1550pub struct TraceItemDetailsRequest {
1551    #[prost(message, optional, tag = "1")]
1552    pub meta: ::core::option::Option<RequestMeta>,
1553    /// required: the ID (hex string) of the item you are looking for
1554    #[prost(string, tag = "2")]
1555    pub item_id: ::prost::alloc::string::String,
1556    /// required: the trace ID of the item.
1557    #[prost(string, tag = "4")]
1558    pub trace_id: ::prost::alloc::string::String,
1559    #[prost(message, optional, tag = "3")]
1560    pub filter: ::core::option::Option<TraceItemFilter>,
1561}
1562#[derive(Clone, PartialEq, ::prost::Message)]
1563pub struct TraceItemDetailsAttribute {
1564    #[prost(string, tag = "1")]
1565    pub name: ::prost::alloc::string::String,
1566    #[prost(message, optional, tag = "2")]
1567    pub value: ::core::option::Option<AttributeValue>,
1568}
1569/// this is a response from the TraceItemDetails endpoint
1570#[derive(Clone, PartialEq, ::prost::Message)]
1571pub struct TraceItemDetailsResponse {
1572    #[prost(string, tag = "1")]
1573    pub item_id: ::prost::alloc::string::String,
1574    #[prost(message, optional, tag = "2")]
1575    pub timestamp: ::core::option::Option<::prost_types::Timestamp>,
1576    #[prost(message, repeated, tag = "3")]
1577    pub attributes: ::prost::alloc::vec::Vec<TraceItemDetailsAttribute>,
1578    #[prost(message, optional, tag = "4")]
1579    pub meta: ::core::option::Option<ResponseMeta>,
1580}
1581#[derive(Clone, PartialEq, ::prost::Message)]
1582pub struct AttributeDistributionsRequest {
1583    /// max_buckets and limit wouldn't apply to other stats types (like totals)
1584    #[prost(uint32, tag = "1")]
1585    pub max_buckets: u32,
1586    #[prost(uint32, tag = "2")]
1587    pub max_attributes: u32,
1588    /// if specified, only the attributes in the allow list will be returned
1589    #[prost(message, repeated, tag = "3")]
1590    pub attributes: ::prost::alloc::vec::Vec<AttributeKey>,
1591}
1592///
1593/// This is a request for a heatmap, the x-axis is every distinct value of x_attribute,
1594/// the y-axis is the numerical_y_attribute divided into num_y_buckets buckets. A
1595/// single x,y coordinate has the count of trace-items that fit into that bucket.
1596///
1597/// Example Request:
1598/// x_attribute = "span.op"
1599/// numerical_y_attribute = "eap.duration"
1600/// num_y_buckets = 4
1601///
1602/// Example Response:
1603/// span.op = "db.query"
1604/// - duration 0-100ms: 10
1605/// - duration 100-200ms: 30
1606/// - duration 200-300ms: 20
1607/// - duration 300-400ms: 0
1608///
1609/// span.op = "http.server"
1610/// ...
1611#[derive(Clone, PartialEq, ::prost::Message)]
1612pub struct HeatmapRequest {
1613    #[prost(message, optional, tag = "1")]
1614    pub x_attribute: ::core::option::Option<AttributeKey>,
1615    #[prost(message, optional, tag = "2")]
1616    pub y_attribute: ::core::option::Option<AttributeKey>,
1617    /// these are only used if the attribute is numeric and needs to be bucketed
1618    #[prost(uint32, optional, tag = "3")]
1619    pub num_y_buckets: ::core::option::Option<u32>,
1620    #[prost(uint32, optional, tag = "4")]
1621    pub num_x_buckets: ::core::option::Option<u32>,
1622}
1623#[derive(Clone, PartialEq, ::prost::Message)]
1624pub struct StatsType {
1625    #[prost(oneof = "stats_type::Type", tags = "1, 2")]
1626    pub r#type: ::core::option::Option<stats_type::Type>,
1627}
1628/// Nested message and enum types in `StatsType`.
1629pub mod stats_type {
1630    #[derive(Clone, PartialEq, ::prost::Oneof)]
1631    pub enum Type {
1632        #[prost(message, tag = "1")]
1633        AttributeDistributions(super::AttributeDistributionsRequest),
1634        #[prost(message, tag = "2")]
1635        Heatmap(super::HeatmapRequest),
1636    }
1637}
1638#[derive(Clone, PartialEq, ::prost::Message)]
1639pub struct TraceItemStatsRequest {
1640    #[prost(message, optional, tag = "1")]
1641    pub meta: ::core::option::Option<RequestMeta>,
1642    /// same filter applies to all stats types requested
1643    #[prost(message, optional, tag = "2")]
1644    pub filter: ::core::option::Option<TraceItemFilter>,
1645    #[prost(message, repeated, tag = "3")]
1646    pub stats_types: ::prost::alloc::vec::Vec<StatsType>,
1647}
1648#[derive(Clone, PartialEq, ::prost::Message)]
1649pub struct AttributeDistribution {
1650    #[prost(string, tag = "1")]
1651    pub attribute_name: ::prost::alloc::string::String,
1652    #[prost(message, repeated, tag = "2")]
1653    pub buckets: ::prost::alloc::vec::Vec<attribute_distribution::Bucket>,
1654}
1655/// Nested message and enum types in `AttributeDistribution`.
1656pub mod attribute_distribution {
1657    #[derive(Clone, PartialEq, ::prost::Message)]
1658    pub struct Bucket {
1659        #[prost(string, tag = "1")]
1660        pub label: ::prost::alloc::string::String,
1661        #[prost(float, tag = "2")]
1662        pub value: f32,
1663        #[prost(message, optional, tag = "3")]
1664        pub last_seen: ::core::option::Option<::prost_types::Timestamp>,
1665    }
1666}
1667#[derive(Clone, PartialEq, ::prost::Message)]
1668pub struct AttributeDistributions {
1669    #[prost(message, repeated, tag = "1")]
1670    pub attributes: ::prost::alloc::vec::Vec<AttributeDistribution>,
1671}
1672#[derive(Clone, PartialEq, ::prost::Message)]
1673pub struct MatrixColumn {
1674    #[prost(message, optional, tag = "1")]
1675    pub x_label: ::core::option::Option<AttributeValue>,
1676    #[prost(float, repeated, tag = "2")]
1677    pub values: ::prost::alloc::vec::Vec<f32>,
1678}
1679///
1680/// This is a heatmap, example heatmap:
1681/// x_attribute = "span.op"
1682/// y_attribute = "duration"
1683/// y_buckets = \[0-100, 100-200, 200-300, 300-400\]
1684/// data = [
1685/// "db_query": \[10, 20, 30, 40\],
1686/// "http_server": \[50, 60, 70, 80\],
1687/// ]
1688///
1689/// this means there are 20 trace-items with span.op = "db.query" and duration 100-200ms,
1690/// etc.
1691#[derive(Clone, PartialEq, ::prost::Message)]
1692pub struct Heatmap {
1693    #[prost(message, optional, tag = "1")]
1694    pub x_attribute: ::core::option::Option<AttributeKey>,
1695    #[prost(message, optional, tag = "2")]
1696    pub y_attribute: ::core::option::Option<AttributeKey>,
1697    #[prost(message, repeated, tag = "3")]
1698    pub y_buckets: ::prost::alloc::vec::Vec<AttributeValue>,
1699    /// the `values` array in each MatrixColumn and `y_buckets` are associative arrays
1700    #[prost(message, repeated, tag = "4")]
1701    pub data: ::prost::alloc::vec::Vec<MatrixColumn>,
1702}
1703#[derive(Clone, PartialEq, ::prost::Message)]
1704pub struct TraceItemStatsResult {
1705    #[prost(oneof = "trace_item_stats_result::Result", tags = "1, 2")]
1706    pub result: ::core::option::Option<trace_item_stats_result::Result>,
1707}
1708/// Nested message and enum types in `TraceItemStatsResult`.
1709pub mod trace_item_stats_result {
1710    #[derive(Clone, PartialEq, ::prost::Oneof)]
1711    pub enum Result {
1712        #[prost(message, tag = "1")]
1713        AttributeDistributions(super::AttributeDistributions),
1714        #[prost(message, tag = "2")]
1715        Heatmap(super::Heatmap),
1716    }
1717}
1718/// this is a response from the TraceItemStats endpoint
1719/// it is the counterpart to TraceItemStatsRequest
1720#[derive(Clone, PartialEq, ::prost::Message)]
1721pub struct TraceItemStatsResponse {
1722    #[prost(message, repeated, tag = "1")]
1723    pub results: ::prost::alloc::vec::Vec<TraceItemStatsResult>,
1724    #[prost(message, optional, tag = "2")]
1725    pub page_token: ::core::option::Option<PageToken>,
1726    #[prost(message, optional, tag = "3")]
1727    pub meta: ::core::option::Option<ResponseMeta>,
1728}
1729/// This is a request to the TraceItemTable endpoint,
1730/// it is used to query for TraceItems (ex. spans)
1731/// it returns tabular data where each row is a TraceItem,
1732/// and the columns are the attributes of the TraceItem
1733/// it can also be used for aggregations
1734#[derive(Clone, PartialEq, ::prost::Message)]
1735pub struct TraceItemTableRequest {
1736    #[prost(message, optional, tag = "1")]
1737    pub meta: ::core::option::Option<RequestMeta>,
1738    /// the columns or aggregations you want to get
1739    #[prost(message, repeated, tag = "2")]
1740    pub columns: ::prost::alloc::vec::Vec<Column>,
1741    /// filter out trace items you dont want
1742    #[prost(message, optional, tag = "3")]
1743    pub filter: ::core::option::Option<TraceItemFilter>,
1744    #[prost(message, repeated, tag = "4")]
1745    pub order_by: ::prost::alloc::vec::Vec<trace_item_table_request::OrderBy>,
1746    #[prost(message, repeated, tag = "5")]
1747    pub group_by: ::prost::alloc::vec::Vec<AttributeKey>,
1748    #[prost(uint32, tag = "6")]
1749    pub limit: u32,
1750    /// optional, used for pagination, the next page token will be returned in the response
1751    #[prost(message, optional, tag = "7")]
1752    pub page_token: ::core::option::Option<PageToken>,
1753    #[prost(message, repeated, tag = "8")]
1754    pub virtual_column_contexts: ::prost::alloc::vec::Vec<VirtualColumnContext>,
1755    /// optional, filter out results of aggregates, same as SQL HAVING
1756    #[prost(message, optional, tag = "9")]
1757    pub aggregation_filter: ::core::option::Option<AggregationFilter>,
1758    /// A list of filters applied to each item type provided. These filters will be applied on a trace level to find traces
1759    /// that contain each of the provided items with matching conditions. The overall request will then only apply on those traces.
1760    /// If specified, the endpoint will only consider traces that match all the filters.
1761    /// ex: Find spans in traces containing a span with op = 'db' that also contain errors with message = 'timeout'
1762    #[prost(message, repeated, tag = "10")]
1763    pub trace_filters: ::prost::alloc::vec::Vec<TraceItemFilterWithType>,
1764}
1765/// Nested message and enum types in `TraceItemTableRequest`.
1766pub mod trace_item_table_request {
1767    #[derive(Clone, PartialEq, ::prost::Message)]
1768    pub struct OrderBy {
1769        #[prost(message, optional, tag = "1")]
1770        pub column: ::core::option::Option<super::Column>,
1771        #[prost(bool, tag = "2")]
1772        pub descending: bool,
1773    }
1774}
1775#[derive(Clone, PartialEq, ::prost::Message)]
1776pub struct AggregationAndFilter {
1777    #[prost(message, repeated, tag = "1")]
1778    pub filters: ::prost::alloc::vec::Vec<AggregationFilter>,
1779}
1780#[derive(Clone, PartialEq, ::prost::Message)]
1781pub struct AggregationOrFilter {
1782    #[prost(message, repeated, tag = "1")]
1783    pub filters: ::prost::alloc::vec::Vec<AggregationFilter>,
1784}
1785#[derive(Clone, PartialEq, ::prost::Message)]
1786pub struct AggregationComparisonFilter {
1787    /// deprecated as columns should always be aggregated in a post aggregation filter
1788    #[deprecated]
1789    #[prost(message, optional, tag = "1")]
1790    pub column: ::core::option::Option<Column>,
1791    #[prost(enumeration = "aggregation_comparison_filter::Op", tag = "2")]
1792    pub op: i32,
1793    /// since only aggregated columns are supported, the value should be numeric
1794    #[deprecated]
1795    #[prost(message, optional, tag = "3")]
1796    pub value: ::core::option::Option<AttributeValue>,
1797    #[prost(double, tag = "5")]
1798    pub val: f64,
1799    #[prost(message, optional, tag = "4")]
1800    pub aggregation: ::core::option::Option<AttributeAggregation>,
1801    #[prost(message, optional, tag = "6")]
1802    pub conditional_aggregation: ::core::option::Option<AttributeConditionalAggregation>,
1803    #[prost(message, optional, tag = "7")]
1804    pub formula: ::core::option::Option<column::BinaryFormula>,
1805}
1806/// Nested message and enum types in `AggregationComparisonFilter`.
1807pub mod aggregation_comparison_filter {
1808    #[derive(
1809        Clone,
1810        Copy,
1811        Debug,
1812        PartialEq,
1813        Eq,
1814        Hash,
1815        PartialOrd,
1816        Ord,
1817        ::prost::Enumeration
1818    )]
1819    #[repr(i32)]
1820    pub enum Op {
1821        Unspecified = 0,
1822        LessThan = 1,
1823        GreaterThan = 2,
1824        LessThanOrEquals = 3,
1825        GreaterThanOrEquals = 4,
1826        Equals = 5,
1827        NotEquals = 6,
1828    }
1829    impl Op {
1830        /// String value of the enum field names used in the ProtoBuf definition.
1831        ///
1832        /// The values are not transformed in any way and thus are considered stable
1833        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1834        pub fn as_str_name(&self) -> &'static str {
1835            match self {
1836                Op::Unspecified => "OP_UNSPECIFIED",
1837                Op::LessThan => "OP_LESS_THAN",
1838                Op::GreaterThan => "OP_GREATER_THAN",
1839                Op::LessThanOrEquals => "OP_LESS_THAN_OR_EQUALS",
1840                Op::GreaterThanOrEquals => "OP_GREATER_THAN_OR_EQUALS",
1841                Op::Equals => "OP_EQUALS",
1842                Op::NotEquals => "OP_NOT_EQUALS",
1843            }
1844        }
1845        /// Creates an enum from field names used in the ProtoBuf definition.
1846        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1847            match value {
1848                "OP_UNSPECIFIED" => Some(Self::Unspecified),
1849                "OP_LESS_THAN" => Some(Self::LessThan),
1850                "OP_GREATER_THAN" => Some(Self::GreaterThan),
1851                "OP_LESS_THAN_OR_EQUALS" => Some(Self::LessThanOrEquals),
1852                "OP_GREATER_THAN_OR_EQUALS" => Some(Self::GreaterThanOrEquals),
1853                "OP_EQUALS" => Some(Self::Equals),
1854                "OP_NOT_EQUALS" => Some(Self::NotEquals),
1855                _ => None,
1856            }
1857        }
1858    }
1859}
1860#[derive(Clone, PartialEq, ::prost::Message)]
1861pub struct AggregationFilter {
1862    #[prost(oneof = "aggregation_filter::Value", tags = "1, 2, 3")]
1863    pub value: ::core::option::Option<aggregation_filter::Value>,
1864}
1865/// Nested message and enum types in `AggregationFilter`.
1866pub mod aggregation_filter {
1867    #[derive(Clone, PartialEq, ::prost::Oneof)]
1868    pub enum Value {
1869        #[prost(message, tag = "1")]
1870        AndFilter(super::AggregationAndFilter),
1871        #[prost(message, tag = "2")]
1872        OrFilter(super::AggregationOrFilter),
1873        #[prost(message, tag = "3")]
1874        ComparisonFilter(super::AggregationComparisonFilter),
1875    }
1876}
1877#[derive(Clone, PartialEq, ::prost::Message)]
1878pub struct Column {
1879    #[prost(string, tag = "3")]
1880    pub label: ::prost::alloc::string::String,
1881    #[prost(oneof = "column::Column", tags = "1, 2, 5, 4, 6")]
1882    pub column: ::core::option::Option<column::Column>,
1883}
1884/// Nested message and enum types in `Column`.
1885pub mod column {
1886    #[derive(Clone, PartialEq, ::prost::Message)]
1887    pub struct BinaryFormula {
1888        #[prost(enumeration = "binary_formula::Op", tag = "1")]
1889        pub op: i32,
1890        #[prost(message, optional, boxed, tag = "2")]
1891        pub left: ::core::option::Option<::prost::alloc::boxed::Box<super::Column>>,
1892        #[prost(message, optional, boxed, tag = "3")]
1893        pub right: ::core::option::Option<::prost::alloc::boxed::Box<super::Column>>,
1894        /// optional, if the formula evalutates to null this value is returned
1895        /// formula can evaluate to null if an attribute is missing for example
1896        #[prost(oneof = "binary_formula::DefaultValue", tags = "4, 5")]
1897        pub default_value: ::core::option::Option<binary_formula::DefaultValue>,
1898    }
1899    /// Nested message and enum types in `BinaryFormula`.
1900    pub mod binary_formula {
1901        #[derive(
1902            Clone,
1903            Copy,
1904            Debug,
1905            PartialEq,
1906            Eq,
1907            Hash,
1908            PartialOrd,
1909            Ord,
1910            ::prost::Enumeration
1911        )]
1912        #[repr(i32)]
1913        pub enum Op {
1914            Unspecified = 0,
1915            Divide = 1,
1916            Multiply = 2,
1917            Add = 3,
1918            Subtract = 4,
1919        }
1920        impl Op {
1921            /// String value of the enum field names used in the ProtoBuf definition.
1922            ///
1923            /// The values are not transformed in any way and thus are considered stable
1924            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1925            pub fn as_str_name(&self) -> &'static str {
1926                match self {
1927                    Op::Unspecified => "OP_UNSPECIFIED",
1928                    Op::Divide => "OP_DIVIDE",
1929                    Op::Multiply => "OP_MULTIPLY",
1930                    Op::Add => "OP_ADD",
1931                    Op::Subtract => "OP_SUBTRACT",
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                    "OP_UNSPECIFIED" => Some(Self::Unspecified),
1938                    "OP_DIVIDE" => Some(Self::Divide),
1939                    "OP_MULTIPLY" => Some(Self::Multiply),
1940                    "OP_ADD" => Some(Self::Add),
1941                    "OP_SUBTRACT" => Some(Self::Subtract),
1942                    _ => None,
1943                }
1944            }
1945        }
1946        /// optional, if the formula evalutates to null this value is returned
1947        /// formula can evaluate to null if an attribute is missing for example
1948        #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1949        pub enum DefaultValue {
1950            #[prost(double, tag = "4")]
1951            DefaultValueDouble(f64),
1952            #[prost(int64, tag = "5")]
1953            DefaultValueInt64(i64),
1954        }
1955    }
1956    #[derive(Clone, PartialEq, ::prost::Oneof)]
1957    pub enum Column {
1958        #[prost(message, tag = "1")]
1959        Key(super::AttributeKey),
1960        #[prost(message, tag = "2")]
1961        Aggregation(super::AttributeAggregation),
1962        #[prost(message, tag = "5")]
1963        ConditionalAggregation(super::AttributeConditionalAggregation),
1964        #[prost(message, tag = "4")]
1965        Formula(::prost::alloc::boxed::Box<BinaryFormula>),
1966        #[prost(message, tag = "6")]
1967        Literal(super::Literal),
1968    }
1969}
1970#[derive(Clone, PartialEq, ::prost::Message)]
1971pub struct TraceItemColumnValues {
1972    #[prost(string, tag = "1")]
1973    pub attribute_name: ::prost::alloc::string::String,
1974    #[prost(message, repeated, tag = "2")]
1975    pub results: ::prost::alloc::vec::Vec<AttributeValue>,
1976    /// reliability of the values based on confidence interval and sample size math
1977    #[prost(enumeration = "Reliability", repeated, tag = "3")]
1978    pub reliabilities: ::prost::alloc::vec::Vec<i32>,
1979}
1980/// this is a response from the TraceItemTable endpoint
1981/// it is the counterpart to TraceItemTableRequest
1982#[derive(Clone, PartialEq, ::prost::Message)]
1983pub struct TraceItemTableResponse {
1984    /// the rows
1985    #[prost(message, repeated, tag = "1")]
1986    pub column_values: ::prost::alloc::vec::Vec<TraceItemColumnValues>,
1987    /// page token for the next page of results
1988    #[prost(message, optional, tag = "2")]
1989    pub page_token: ::core::option::Option<PageToken>,
1990    #[prost(message, optional, tag = "3")]
1991    pub meta: ::core::option::Option<ResponseMeta>,
1992}
1993#[derive(Clone, PartialEq, ::prost::Message)]
1994pub struct CreateTraceItemTableSubscriptionRequest {
1995    #[prost(message, optional, tag = "1")]
1996    pub table_request: ::core::option::Option<TraceItemTableRequest>,
1997    #[prost(uint64, tag = "2")]
1998    pub project_id: u64,
1999    #[prost(uint32, tag = "3")]
2000    pub time_window: u32,
2001    #[prost(uint32, tag = "4")]
2002    pub resolution: u32,
2003}
2004#[derive(Clone, PartialEq, ::prost::Message)]
2005pub struct CreateTraceItemTableSubscriptionResponse {
2006    #[prost(string, tag = "1")]
2007    pub subscription_id: ::prost::alloc::string::String,
2008}
2009#[derive(Clone, PartialEq, ::prost::Message)]
2010pub struct AnyValue {
2011    #[prost(oneof = "any_value::Value", tags = "1, 2, 3, 4, 5, 6, 7")]
2012    pub value: ::core::option::Option<any_value::Value>,
2013}
2014/// Nested message and enum types in `AnyValue`.
2015pub mod any_value {
2016    #[derive(Clone, PartialEq, ::prost::Oneof)]
2017    pub enum Value {
2018        #[prost(string, tag = "1")]
2019        StringValue(::prost::alloc::string::String),
2020        #[prost(bool, tag = "2")]
2021        BoolValue(bool),
2022        #[prost(int64, tag = "3")]
2023        IntValue(i64),
2024        #[prost(double, tag = "4")]
2025        DoubleValue(f64),
2026        #[prost(message, tag = "5")]
2027        ArrayValue(super::ArrayValue),
2028        #[prost(message, tag = "6")]
2029        KvlistValue(super::KeyValueList),
2030        #[prost(bytes, tag = "7")]
2031        BytesValue(::prost::alloc::vec::Vec<u8>),
2032    }
2033}
2034#[derive(Clone, PartialEq, ::prost::Message)]
2035pub struct ArrayValue {
2036    #[prost(message, repeated, tag = "1")]
2037    pub values: ::prost::alloc::vec::Vec<AnyValue>,
2038}
2039#[derive(Clone, PartialEq, ::prost::Message)]
2040pub struct KeyValueList {
2041    #[prost(message, repeated, tag = "1")]
2042    pub values: ::prost::alloc::vec::Vec<KeyValue>,
2043}
2044#[derive(Clone, PartialEq, ::prost::Message)]
2045pub struct KeyValue {
2046    #[prost(string, tag = "1")]
2047    pub key: ::prost::alloc::string::String,
2048    #[prost(message, optional, tag = "2")]
2049    pub value: ::core::option::Option<AnyValue>,
2050}
2051#[derive(Clone, PartialEq, ::prost::Message)]
2052pub struct TraceItem {
2053    #[prost(uint64, tag = "1")]
2054    pub organization_id: u64,
2055    #[prost(uint64, tag = "2")]
2056    pub project_id: u64,
2057    #[prost(string, tag = "3")]
2058    pub trace_id: ::prost::alloc::string::String,
2059    /// item_id as bytes, little endian
2060    #[prost(bytes = "vec", tag = "4")]
2061    pub item_id: ::prost::alloc::vec::Vec<u8>,
2062    #[prost(enumeration = "TraceItemType", tag = "5")]
2063    pub item_type: i32,
2064    #[prost(message, optional, tag = "6")]
2065    pub timestamp: ::core::option::Option<::prost_types::Timestamp>,
2066    #[prost(map = "string, message", tag = "7")]
2067    pub attributes: ::std::collections::HashMap<
2068        ::prost::alloc::string::String,
2069        AnyValue,
2070    >,
2071    #[prost(double, tag = "8")]
2072    pub client_sample_rate: f64,
2073    #[prost(double, tag = "9")]
2074    pub server_sample_rate: f64,
2075    /// Internal fields
2076    #[prost(uint32, tag = "100")]
2077    pub retention_days: u32,
2078    #[prost(message, optional, tag = "101")]
2079    pub received: ::core::option::Option<::prost_types::Timestamp>,
2080    #[prost(uint32, tag = "102")]
2081    pub downsampled_retention_days: u32,
2082}
2083#[derive(Clone, PartialEq, ::prost::Message)]
2084pub struct ExportTraceItemsRequest {
2085    #[prost(message, optional, tag = "1")]
2086    pub meta: ::core::option::Option<RequestMeta>,
2087    #[prost(message, optional, tag = "2")]
2088    pub page_token: ::core::option::Option<PageToken>,
2089    #[prost(uint32, tag = "3")]
2090    pub limit: u32,
2091}
2092#[derive(Clone, PartialEq, ::prost::Message)]
2093pub struct ExportTraceItemsResponse {
2094    #[prost(message, repeated, tag = "1")]
2095    pub trace_items: ::prost::alloc::vec::Vec<TraceItem>,
2096    #[prost(message, optional, tag = "2")]
2097    pub page_token: ::core::option::Option<PageToken>,
2098}
2099#[derive(Clone, PartialEq, ::prost::Message)]
2100pub struct Error {
2101    /// The HTTP status code corresponding to this error
2102    #[prost(int32, tag = "1")]
2103    pub code: i32,
2104    /// The developer-facing message
2105    #[prost(string, tag = "2")]
2106    pub message: ::prost::alloc::string::String,
2107    /// Additional error information
2108    #[prost(message, repeated, tag = "3")]
2109    pub details: ::prost::alloc::vec::Vec<::prost_types::Any>,
2110}