Skip to main content

nominal_api_proto/proto/
nominal.compute.v1.rs

1// This file is @generated by prost-build.
2#[derive(Clone, PartialEq, ::prost::Message)]
3pub struct TimeSeriesReference {
4    #[prost(string, tag = "1")]
5    pub variable_name: ::prost::alloc::string::String,
6}
7#[derive(Clone, Copy, PartialEq, ::prost::Message)]
8pub struct ComputeDuration {
9    #[prost(int64, tag = "1")]
10    pub seconds: i64,
11    #[prost(int64, tag = "2")]
12    pub nanos: i64,
13}
14#[derive(Clone, Copy, PartialEq, ::prost::Message)]
15pub struct ComputeTimestamp {
16    #[prost(int64, tag = "1")]
17    pub seconds: i64,
18    #[prost(int64, tag = "2")]
19    pub nanos: i64,
20}
21#[derive(Clone, PartialEq, ::prost::Message)]
22pub struct DoubleConstant {
23    #[prost(oneof = "double_constant::Kind", tags = "1, 2, 3")]
24    pub kind: ::core::option::Option<double_constant::Kind>,
25}
26/// Nested message and enum types in `DoubleConstant`.
27pub mod double_constant {
28    #[derive(Clone, PartialEq, ::prost::Oneof)]
29    pub enum Kind {
30        #[prost(double, tag = "1")]
31        Literal(f64),
32        #[prost(string, tag = "2")]
33        VariableName(::prost::alloc::string::String),
34        #[prost(message, tag = "3")]
35        Builtin(super::BuiltinConstant),
36    }
37}
38#[derive(Clone, PartialEq, ::prost::Message)]
39pub struct IntegerConstant {
40    #[prost(oneof = "integer_constant::Kind", tags = "1, 2")]
41    pub kind: ::core::option::Option<integer_constant::Kind>,
42}
43/// Nested message and enum types in `IntegerConstant`.
44pub mod integer_constant {
45    #[derive(Clone, PartialEq, ::prost::Oneof)]
46    pub enum Kind {
47        #[prost(int32, tag = "1")]
48        Literal(i32),
49        #[prost(string, tag = "2")]
50        VariableName(::prost::alloc::string::String),
51    }
52}
53#[derive(Clone, PartialEq, ::prost::Message)]
54pub struct StringConstant {
55    #[prost(oneof = "string_constant::Kind", tags = "1, 2")]
56    pub kind: ::core::option::Option<string_constant::Kind>,
57}
58/// Nested message and enum types in `StringConstant`.
59pub mod string_constant {
60    #[derive(Clone, PartialEq, ::prost::Oneof)]
61    pub enum Kind {
62        #[prost(string, tag = "1")]
63        Literal(::prost::alloc::string::String),
64        #[prost(string, tag = "2")]
65        VariableName(::prost::alloc::string::String),
66    }
67}
68#[derive(Clone, PartialEq, ::prost::Message)]
69pub struct DurationConstant {
70    #[prost(oneof = "duration_constant::Kind", tags = "1, 2")]
71    pub kind: ::core::option::Option<duration_constant::Kind>,
72}
73/// Nested message and enum types in `DurationConstant`.
74pub mod duration_constant {
75    #[derive(Clone, PartialEq, ::prost::Oneof)]
76    pub enum Kind {
77        #[prost(message, tag = "1")]
78        Literal(super::ComputeDuration),
79        #[prost(string, tag = "2")]
80        VariableName(::prost::alloc::string::String),
81    }
82}
83#[derive(Clone, PartialEq, ::prost::Message)]
84pub struct TimestampConstant {
85    #[prost(oneof = "timestamp_constant::Kind", tags = "1, 2")]
86    pub kind: ::core::option::Option<timestamp_constant::Kind>,
87}
88/// Nested message and enum types in `TimestampConstant`.
89pub mod timestamp_constant {
90    #[derive(Clone, PartialEq, ::prost::Oneof)]
91    pub enum Kind {
92        #[prost(message, tag = "1")]
93        Literal(super::ComputeTimestamp),
94        #[prost(string, tag = "2")]
95        VariableName(::prost::alloc::string::String),
96    }
97}
98#[derive(Clone, PartialEq, ::prost::Message)]
99pub struct StringSetConstant {
100    #[prost(oneof = "string_set_constant::Kind", tags = "1, 2")]
101    pub kind: ::core::option::Option<string_set_constant::Kind>,
102}
103/// Nested message and enum types in `StringSetConstant`.
104pub mod string_set_constant {
105    #[derive(Clone, PartialEq, ::prost::Oneof)]
106    pub enum Kind {
107        #[prost(message, tag = "1")]
108        Literal(super::StringSetLiteral),
109        #[prost(string, tag = "2")]
110        VariableName(::prost::alloc::string::String),
111    }
112}
113#[derive(Clone, PartialEq, ::prost::Message)]
114pub struct StringSetLiteral {
115    #[prost(string, repeated, tag = "1")]
116    pub values: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
117}
118#[derive(Clone, PartialEq, ::prost::Message)]
119pub struct ParameterizedStringSet {
120    #[prost(oneof = "parameterized_string_set::Kind", tags = "1, 2")]
121    pub kind: ::core::option::Option<parameterized_string_set::Kind>,
122}
123/// Nested message and enum types in `ParameterizedStringSet`.
124pub mod parameterized_string_set {
125    #[derive(Clone, PartialEq, ::prost::Oneof)]
126    pub enum Kind {
127        #[prost(message, tag = "1")]
128        Literal(super::ParameterizedStringSetLiteral),
129        #[prost(string, tag = "2")]
130        VariableName(::prost::alloc::string::String),
131    }
132}
133#[derive(Clone, PartialEq, ::prost::Message)]
134pub struct ParameterizedStringSetLiteral {
135    #[prost(message, repeated, tag = "1")]
136    pub values: ::prost::alloc::vec::Vec<StringConstant>,
137}
138#[derive(Clone, Copy, PartialEq, ::prost::Message)]
139pub struct BuiltinConstant {
140    #[prost(oneof = "builtin_constant::Kind", tags = "1, 2")]
141    pub kind: ::core::option::Option<builtin_constant::Kind>,
142}
143/// Nested message and enum types in `BuiltinConstant`.
144pub mod builtin_constant {
145    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
146    pub enum Kind {
147        #[prost(enumeration = "super::MathConstant", tag = "1")]
148        Math(i32),
149        #[prost(enumeration = "super::PhysicalConstant", tag = "2")]
150        Physical(i32),
151    }
152}
153#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
154#[repr(i32)]
155pub enum MathConstant {
156    Unspecified = 0,
157    Pi = 1,
158    Tau = 2,
159    E = 3,
160}
161impl MathConstant {
162    /// String value of the enum field names used in the ProtoBuf definition.
163    ///
164    /// The values are not transformed in any way and thus are considered stable
165    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
166    pub fn as_str_name(&self) -> &'static str {
167        match self {
168            Self::Unspecified => "MATH_CONSTANT_UNSPECIFIED",
169            Self::Pi => "MATH_CONSTANT_PI",
170            Self::Tau => "MATH_CONSTANT_TAU",
171            Self::E => "MATH_CONSTANT_E",
172        }
173    }
174    /// Creates an enum from field names used in the ProtoBuf definition.
175    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
176        match value {
177            "MATH_CONSTANT_UNSPECIFIED" => Some(Self::Unspecified),
178            "MATH_CONSTANT_PI" => Some(Self::Pi),
179            "MATH_CONSTANT_TAU" => Some(Self::Tau),
180            "MATH_CONSTANT_E" => Some(Self::E),
181            _ => None,
182        }
183    }
184}
185#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
186#[repr(i32)]
187pub enum PhysicalConstant {
188    Unspecified = 0,
189    SpeedOfLight = 1,
190    Avogadro = 2,
191    Boltzmann = 3,
192    Planck = 4,
193    ElementaryCharge = 5,
194    GasConstant = 6,
195    StandardGravity = 7,
196    StandardAtmosphere = 8,
197    AbsoluteZeroCelsius = 9,
198    GravitationalConstant = 10,
199    StefanBoltzmann = 11,
200}
201impl PhysicalConstant {
202    /// String value of the enum field names used in the ProtoBuf definition.
203    ///
204    /// The values are not transformed in any way and thus are considered stable
205    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
206    pub fn as_str_name(&self) -> &'static str {
207        match self {
208            Self::Unspecified => "PHYSICAL_CONSTANT_UNSPECIFIED",
209            Self::SpeedOfLight => "PHYSICAL_CONSTANT_SPEED_OF_LIGHT",
210            Self::Avogadro => "PHYSICAL_CONSTANT_AVOGADRO",
211            Self::Boltzmann => "PHYSICAL_CONSTANT_BOLTZMANN",
212            Self::Planck => "PHYSICAL_CONSTANT_PLANCK",
213            Self::ElementaryCharge => "PHYSICAL_CONSTANT_ELEMENTARY_CHARGE",
214            Self::GasConstant => "PHYSICAL_CONSTANT_GAS_CONSTANT",
215            Self::StandardGravity => "PHYSICAL_CONSTANT_STANDARD_GRAVITY",
216            Self::StandardAtmosphere => "PHYSICAL_CONSTANT_STANDARD_ATMOSPHERE",
217            Self::AbsoluteZeroCelsius => "PHYSICAL_CONSTANT_ABSOLUTE_ZERO_CELSIUS",
218            Self::GravitationalConstant => "PHYSICAL_CONSTANT_GRAVITATIONAL_CONSTANT",
219            Self::StefanBoltzmann => "PHYSICAL_CONSTANT_STEFAN_BOLTZMANN",
220        }
221    }
222    /// Creates an enum from field names used in the ProtoBuf definition.
223    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
224        match value {
225            "PHYSICAL_CONSTANT_UNSPECIFIED" => Some(Self::Unspecified),
226            "PHYSICAL_CONSTANT_SPEED_OF_LIGHT" => Some(Self::SpeedOfLight),
227            "PHYSICAL_CONSTANT_AVOGADRO" => Some(Self::Avogadro),
228            "PHYSICAL_CONSTANT_BOLTZMANN" => Some(Self::Boltzmann),
229            "PHYSICAL_CONSTANT_PLANCK" => Some(Self::Planck),
230            "PHYSICAL_CONSTANT_ELEMENTARY_CHARGE" => Some(Self::ElementaryCharge),
231            "PHYSICAL_CONSTANT_GAS_CONSTANT" => Some(Self::GasConstant),
232            "PHYSICAL_CONSTANT_STANDARD_GRAVITY" => Some(Self::StandardGravity),
233            "PHYSICAL_CONSTANT_STANDARD_ATMOSPHERE" => Some(Self::StandardAtmosphere),
234            "PHYSICAL_CONSTANT_ABSOLUTE_ZERO_CELSIUS" => Some(Self::AbsoluteZeroCelsius),
235            "PHYSICAL_CONSTANT_GRAVITATIONAL_CONSTANT" => {
236                Some(Self::GravitationalConstant)
237            }
238            "PHYSICAL_CONSTANT_STEFAN_BOLTZMANN" => Some(Self::StefanBoltzmann),
239            _ => None,
240        }
241    }
242}
243#[derive(Clone, PartialEq, ::prost::Message)]
244pub struct ScalingFactor {
245    #[prost(message, optional, tag = "1")]
246    pub value: ::core::option::Option<DoubleConstant>,
247    #[prost(string, optional, tag = "2")]
248    pub unit: ::core::option::Option<::prost::alloc::string::String>,
249}
250#[derive(Clone, PartialEq, ::prost::Message)]
251pub struct ResampleFill {
252    #[prost(oneof = "resample_fill::Kind", tags = "1, 2")]
253    pub kind: ::core::option::Option<resample_fill::Kind>,
254}
255/// Nested message and enum types in `ResampleFill`.
256pub mod resample_fill {
257    #[derive(Clone, PartialEq, ::prost::Oneof)]
258    pub enum Kind {
259        #[prost(message, tag = "1")]
260        ForwardFill(super::ForwardFillResample),
261        #[prost(message, tag = "2")]
262        Constant(super::DoubleConstant),
263    }
264}
265#[derive(Clone, Copy, PartialEq, ::prost::Message)]
266pub struct ForwardFillResample {}
267#[derive(Clone, PartialEq, ::prost::Message)]
268pub struct CategoricalReduction {
269    #[prost(oneof = "categorical_reduction::Kind", tags = "1, 2, 3")]
270    pub kind: ::core::option::Option<categorical_reduction::Kind>,
271}
272/// Nested message and enum types in `CategoricalReduction`.
273pub mod categorical_reduction {
274    #[derive(Clone, PartialEq, ::prost::Oneof)]
275    pub enum Kind {
276        #[prost(message, tag = "1")]
277        Min(super::CategoricalMinReduction),
278        #[prost(message, tag = "2")]
279        Max(super::CategoricalMaxReduction),
280        #[prost(message, tag = "3")]
281        Udf(super::super::super::modules::v1::UdfSource),
282    }
283}
284#[derive(Clone, Copy, PartialEq, ::prost::Message)]
285pub struct CategoricalMinReduction {}
286#[derive(Clone, Copy, PartialEq, ::prost::Message)]
287pub struct CategoricalMaxReduction {}
288#[derive(Clone, PartialEq, ::prost::Message)]
289pub struct CategoricalResampleFill {
290    #[prost(oneof = "categorical_resample_fill::Kind", tags = "1, 2")]
291    pub kind: ::core::option::Option<categorical_resample_fill::Kind>,
292}
293/// Nested message and enum types in `CategoricalResampleFill`.
294pub mod categorical_resample_fill {
295    #[derive(Clone, PartialEq, ::prost::Oneof)]
296    pub enum Kind {
297        #[prost(message, tag = "1")]
298        ForwardFill(super::ForwardFillResample),
299        #[prost(message, tag = "2")]
300        Constant(super::StringConstant),
301    }
302}
303#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
304#[repr(i32)]
305pub enum CategoricalMergeOperation {
306    Unspecified = 0,
307    RejectDuplicates = 1,
308    Max = 2,
309    Min = 3,
310}
311impl CategoricalMergeOperation {
312    /// String value of the enum field names used in the ProtoBuf definition.
313    ///
314    /// The values are not transformed in any way and thus are considered stable
315    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
316    pub fn as_str_name(&self) -> &'static str {
317        match self {
318            Self::Unspecified => "CATEGORICAL_MERGE_OPERATION_UNSPECIFIED",
319            Self::RejectDuplicates => "CATEGORICAL_MERGE_OPERATION_REJECT_DUPLICATES",
320            Self::Max => "CATEGORICAL_MERGE_OPERATION_MAX",
321            Self::Min => "CATEGORICAL_MERGE_OPERATION_MIN",
322        }
323    }
324    /// Creates an enum from field names used in the ProtoBuf definition.
325    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
326        match value {
327            "CATEGORICAL_MERGE_OPERATION_UNSPECIFIED" => Some(Self::Unspecified),
328            "CATEGORICAL_MERGE_OPERATION_REJECT_DUPLICATES" => {
329                Some(Self::RejectDuplicates)
330            }
331            "CATEGORICAL_MERGE_OPERATION_MAX" => Some(Self::Max),
332            "CATEGORICAL_MERGE_OPERATION_MIN" => Some(Self::Min),
333            _ => None,
334        }
335    }
336}
337#[derive(Clone, PartialEq, ::prost::Message)]
338pub struct BatchCancelRequestsRequest {
339    #[prost(string, repeated, tag = "1")]
340    pub request_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
341}
342#[derive(Clone, Copy, PartialEq, ::prost::Message)]
343pub struct BatchCancelRequestsResponse {}
344#[derive(Clone, PartialEq, ::prost::Message)]
345pub struct BatchGetRequestProgressRequest {
346    #[prost(string, repeated, tag = "1")]
347    pub request_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
348}
349#[derive(Clone, Copy, PartialEq, ::prost::Message)]
350pub struct RequestInProgress {
351    #[prost(int64, tag = "1")]
352    pub read_rows: i64,
353    #[prost(int64, tag = "2")]
354    pub total_rows_approx: i64,
355}
356#[derive(Clone, Copy, PartialEq, ::prost::Message)]
357pub struct RequestInactive {}
358#[derive(Clone, PartialEq, ::prost::Message)]
359pub struct RequestProgress {
360    #[prost(string, tag = "1")]
361    pub request_id: ::prost::alloc::string::String,
362    #[prost(oneof = "request_progress::State", tags = "2, 3")]
363    pub state: ::core::option::Option<request_progress::State>,
364}
365/// Nested message and enum types in `RequestProgress`.
366pub mod request_progress {
367    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
368    pub enum State {
369        #[prost(message, tag = "2")]
370        InProgress(super::RequestInProgress),
371        #[prost(message, tag = "3")]
372        Inactive(super::RequestInactive),
373    }
374}
375#[derive(Clone, PartialEq, ::prost::Message)]
376pub struct BatchGetRequestProgressResponse {
377    #[prost(message, repeated, tag = "1")]
378    pub progress: ::prost::alloc::vec::Vec<RequestProgress>,
379}
380#[derive(Clone, Copy, PartialEq, ::prost::Message)]
381pub struct QuotaWindow {
382    #[prost(message, optional, tag = "1")]
383    pub start_time: ::core::option::Option<
384        super::super::super::google::protobuf::Timestamp,
385    >,
386    #[prost(message, optional, tag = "2")]
387    pub end_time: ::core::option::Option<
388        super::super::super::google::protobuf::Timestamp,
389    >,
390}
391#[derive(Clone, Copy, PartialEq, ::prost::Message)]
392pub struct QuotaResourceUsage {
393    #[prost(enumeration = "QuotaResourceType", tag = "1")]
394    pub resource: i32,
395    #[prost(double, tag = "2")]
396    pub used: f64,
397    #[prost(double, tag = "3")]
398    pub limit: f64,
399}
400#[derive(Clone, PartialEq, ::prost::Message)]
401pub struct QuotaIntervalUsage {
402    #[prost(int64, tag = "1")]
403    pub duration_seconds: i64,
404    #[prost(message, optional, tag = "2")]
405    pub current_window: ::core::option::Option<QuotaWindow>,
406    #[prost(message, repeated, tag = "3")]
407    pub resources: ::prost::alloc::vec::Vec<QuotaResourceUsage>,
408}
409#[derive(Clone, PartialEq, ::prost::Message)]
410pub struct QuotaUsage {
411    #[prost(message, repeated, tag = "1")]
412    pub intervals: ::prost::alloc::vec::Vec<QuotaIntervalUsage>,
413}
414#[derive(Clone, PartialEq, ::prost::Message)]
415pub struct ListQuotaUsageIntervalsRequest {
416    #[prost(int32, optional, tag = "1")]
417    pub page_size: ::core::option::Option<i32>,
418    #[prost(string, tag = "2")]
419    pub page_token: ::prost::alloc::string::String,
420}
421#[derive(Clone, PartialEq, ::prost::Message)]
422pub struct ListQuotaUsageIntervalsResponse {
423    #[prost(message, repeated, tag = "1")]
424    pub intervals: ::prost::alloc::vec::Vec<QuotaIntervalUsage>,
425    #[prost(string, tag = "2")]
426    pub next_page_token: ::prost::alloc::string::String,
427}
428#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
429#[repr(i32)]
430pub enum ComputeRequestControlError {
431    Unspecified = 0,
432    InvalidRequestId = 1,
433    InvalidPageToken = 2,
434    InvalidPageSize = 3,
435}
436impl ComputeRequestControlError {
437    /// String value of the enum field names used in the ProtoBuf definition.
438    ///
439    /// The values are not transformed in any way and thus are considered stable
440    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
441    pub fn as_str_name(&self) -> &'static str {
442        match self {
443            Self::Unspecified => "COMPUTE_REQUEST_CONTROL_ERROR_UNSPECIFIED",
444            Self::InvalidRequestId => "COMPUTE_REQUEST_CONTROL_ERROR_INVALID_REQUEST_ID",
445            Self::InvalidPageToken => "COMPUTE_REQUEST_CONTROL_ERROR_INVALID_PAGE_TOKEN",
446            Self::InvalidPageSize => "COMPUTE_REQUEST_CONTROL_ERROR_INVALID_PAGE_SIZE",
447        }
448    }
449    /// Creates an enum from field names used in the ProtoBuf definition.
450    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
451        match value {
452            "COMPUTE_REQUEST_CONTROL_ERROR_UNSPECIFIED" => Some(Self::Unspecified),
453            "COMPUTE_REQUEST_CONTROL_ERROR_INVALID_REQUEST_ID" => {
454                Some(Self::InvalidRequestId)
455            }
456            "COMPUTE_REQUEST_CONTROL_ERROR_INVALID_PAGE_TOKEN" => {
457                Some(Self::InvalidPageToken)
458            }
459            "COMPUTE_REQUEST_CONTROL_ERROR_INVALID_PAGE_SIZE" => {
460                Some(Self::InvalidPageSize)
461            }
462            _ => None,
463        }
464    }
465}
466#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
467#[repr(i32)]
468pub enum QuotaResourceType {
469    Unspecified = 0,
470    ReadRows = 1,
471    ReadBytes = 2,
472    Queries = 3,
473    Errors = 4,
474    ExecutionTime = 5,
475}
476impl QuotaResourceType {
477    /// String value of the enum field names used in the ProtoBuf definition.
478    ///
479    /// The values are not transformed in any way and thus are considered stable
480    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
481    pub fn as_str_name(&self) -> &'static str {
482        match self {
483            Self::Unspecified => "QUOTA_RESOURCE_TYPE_UNSPECIFIED",
484            Self::ReadRows => "QUOTA_RESOURCE_TYPE_READ_ROWS",
485            Self::ReadBytes => "QUOTA_RESOURCE_TYPE_READ_BYTES",
486            Self::Queries => "QUOTA_RESOURCE_TYPE_QUERIES",
487            Self::Errors => "QUOTA_RESOURCE_TYPE_ERRORS",
488            Self::ExecutionTime => "QUOTA_RESOURCE_TYPE_EXECUTION_TIME",
489        }
490    }
491    /// Creates an enum from field names used in the ProtoBuf definition.
492    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
493        match value {
494            "QUOTA_RESOURCE_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
495            "QUOTA_RESOURCE_TYPE_READ_ROWS" => Some(Self::ReadRows),
496            "QUOTA_RESOURCE_TYPE_READ_BYTES" => Some(Self::ReadBytes),
497            "QUOTA_RESOURCE_TYPE_QUERIES" => Some(Self::Queries),
498            "QUOTA_RESOURCE_TYPE_ERRORS" => Some(Self::Errors),
499            "QUOTA_RESOURCE_TYPE_EXECUTION_TIME" => Some(Self::ExecutionTime),
500            _ => None,
501        }
502    }
503}
504/// Generated client implementations.
505pub mod compute_service_client {
506    #![allow(
507        unused_variables,
508        dead_code,
509        missing_docs,
510        clippy::wildcard_imports,
511        clippy::let_unit_value,
512    )]
513    use tonic::codegen::*;
514    use tonic::codegen::http::Uri;
515    #[derive(Debug, Clone)]
516    pub struct ComputeServiceClient<T> {
517        inner: tonic::client::Grpc<T>,
518    }
519    impl ComputeServiceClient<tonic::transport::Channel> {
520        /// Attempt to create a new client by connecting to a given endpoint.
521        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
522        where
523            D: TryInto<tonic::transport::Endpoint>,
524            D::Error: Into<StdError>,
525        {
526            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
527            Ok(Self::new(conn))
528        }
529    }
530    impl<T> ComputeServiceClient<T>
531    where
532        T: tonic::client::GrpcService<tonic::body::Body>,
533        T::Error: Into<StdError>,
534        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
535        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
536    {
537        pub fn new(inner: T) -> Self {
538            let inner = tonic::client::Grpc::new(inner);
539            Self { inner }
540        }
541        pub fn with_origin(inner: T, origin: Uri) -> Self {
542            let inner = tonic::client::Grpc::with_origin(inner, origin);
543            Self { inner }
544        }
545        pub fn with_interceptor<F>(
546            inner: T,
547            interceptor: F,
548        ) -> ComputeServiceClient<InterceptedService<T, F>>
549        where
550            F: tonic::service::Interceptor,
551            T::ResponseBody: Default,
552            T: tonic::codegen::Service<
553                http::Request<tonic::body::Body>,
554                Response = http::Response<
555                    <T as tonic::client::GrpcService<tonic::body::Body>>::ResponseBody,
556                >,
557            >,
558            <T as tonic::codegen::Service<
559                http::Request<tonic::body::Body>,
560            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
561        {
562            ComputeServiceClient::new(InterceptedService::new(inner, interceptor))
563        }
564        /// Compress requests with the given encoding.
565        ///
566        /// This requires the server to support it otherwise it might respond with an
567        /// error.
568        #[must_use]
569        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
570            self.inner = self.inner.send_compressed(encoding);
571            self
572        }
573        /// Enable decompressing responses.
574        #[must_use]
575        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
576            self.inner = self.inner.accept_compressed(encoding);
577            self
578        }
579        /// Limits the maximum size of a decoded message.
580        ///
581        /// Default: `4MB`
582        #[must_use]
583        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
584            self.inner = self.inner.max_decoding_message_size(limit);
585            self
586        }
587        /// Limits the maximum size of an encoded message.
588        ///
589        /// Default: `usize::MAX`
590        #[must_use]
591        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
592            self.inner = self.inner.max_encoding_message_size(limit);
593            self
594        }
595        pub async fn batch_cancel_requests(
596            &mut self,
597            request: impl tonic::IntoRequest<super::BatchCancelRequestsRequest>,
598        ) -> std::result::Result<
599            tonic::Response<super::BatchCancelRequestsResponse>,
600            tonic::Status,
601        > {
602            self.inner
603                .ready()
604                .await
605                .map_err(|e| {
606                    tonic::Status::unknown(
607                        format!("Service was not ready: {}", e.into()),
608                    )
609                })?;
610            let codec = tonic::codec::ProstCodec::default();
611            let path = http::uri::PathAndQuery::from_static(
612                "/nominal.compute.v1.ComputeService/BatchCancelRequests",
613            );
614            let mut req = request.into_request();
615            req.extensions_mut()
616                .insert(
617                    GrpcMethod::new(
618                        "nominal.compute.v1.ComputeService",
619                        "BatchCancelRequests",
620                    ),
621                );
622            self.inner.unary(req, path, codec).await
623        }
624        pub async fn batch_get_request_progress(
625            &mut self,
626            request: impl tonic::IntoRequest<super::BatchGetRequestProgressRequest>,
627        ) -> std::result::Result<
628            tonic::Response<super::BatchGetRequestProgressResponse>,
629            tonic::Status,
630        > {
631            self.inner
632                .ready()
633                .await
634                .map_err(|e| {
635                    tonic::Status::unknown(
636                        format!("Service was not ready: {}", e.into()),
637                    )
638                })?;
639            let codec = tonic::codec::ProstCodec::default();
640            let path = http::uri::PathAndQuery::from_static(
641                "/nominal.compute.v1.ComputeService/BatchGetRequestProgress",
642            );
643            let mut req = request.into_request();
644            req.extensions_mut()
645                .insert(
646                    GrpcMethod::new(
647                        "nominal.compute.v1.ComputeService",
648                        "BatchGetRequestProgress",
649                    ),
650                );
651            self.inner.unary(req, path, codec).await
652        }
653        pub async fn list_quota_usage_intervals(
654            &mut self,
655            request: impl tonic::IntoRequest<super::ListQuotaUsageIntervalsRequest>,
656        ) -> std::result::Result<
657            tonic::Response<super::ListQuotaUsageIntervalsResponse>,
658            tonic::Status,
659        > {
660            self.inner
661                .ready()
662                .await
663                .map_err(|e| {
664                    tonic::Status::unknown(
665                        format!("Service was not ready: {}", e.into()),
666                    )
667                })?;
668            let codec = tonic::codec::ProstCodec::default();
669            let path = http::uri::PathAndQuery::from_static(
670                "/nominal.compute.v1.ComputeService/ListQuotaUsageIntervals",
671            );
672            let mut req = request.into_request();
673            req.extensions_mut()
674                .insert(
675                    GrpcMethod::new(
676                        "nominal.compute.v1.ComputeService",
677                        "ListQuotaUsageIntervals",
678                    ),
679                );
680            self.inner.unary(req, path, codec).await
681        }
682    }
683}
684#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
685#[repr(i32)]
686pub enum ComputeModelConversionError {
687    Unspecified = 0,
688    UnsupportedExpression = 1,
689    TimeComponentOutOfRange = 2,
690    IntegerOperandOutOfRange = 3,
691}
692impl ComputeModelConversionError {
693    /// String value of the enum field names used in the ProtoBuf definition.
694    ///
695    /// The values are not transformed in any way and thus are considered stable
696    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
697    pub fn as_str_name(&self) -> &'static str {
698        match self {
699            Self::Unspecified => "COMPUTE_MODEL_CONVERSION_ERROR_UNSPECIFIED",
700            Self::UnsupportedExpression => {
701                "COMPUTE_MODEL_CONVERSION_ERROR_UNSUPPORTED_EXPRESSION"
702            }
703            Self::TimeComponentOutOfRange => {
704                "COMPUTE_MODEL_CONVERSION_ERROR_TIME_COMPONENT_OUT_OF_RANGE"
705            }
706            Self::IntegerOperandOutOfRange => {
707                "COMPUTE_MODEL_CONVERSION_ERROR_INTEGER_OPERAND_OUT_OF_RANGE"
708            }
709        }
710    }
711    /// Creates an enum from field names used in the ProtoBuf definition.
712    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
713        match value {
714            "COMPUTE_MODEL_CONVERSION_ERROR_UNSPECIFIED" => Some(Self::Unspecified),
715            "COMPUTE_MODEL_CONVERSION_ERROR_UNSUPPORTED_EXPRESSION" => {
716                Some(Self::UnsupportedExpression)
717            }
718            "COMPUTE_MODEL_CONVERSION_ERROR_TIME_COMPONENT_OUT_OF_RANGE" => {
719                Some(Self::TimeComponentOutOfRange)
720            }
721            "COMPUTE_MODEL_CONVERSION_ERROR_INTEGER_OPERAND_OUT_OF_RANGE" => {
722                Some(Self::IntegerOperandOutOfRange)
723            }
724            _ => None,
725        }
726    }
727}
728#[derive(Clone, PartialEq, ::prost::Message)]
729pub struct DatasetReference {
730    #[prost(message, optional, tag = "1")]
731    pub name: ::core::option::Option<StringConstant>,
732}
733#[derive(Clone, PartialEq, ::prost::Message)]
734pub struct DurationExpression {
735    #[prost(oneof = "duration_expression::Kind", tags = "1, 2, 3, 4")]
736    pub kind: ::core::option::Option<duration_expression::Kind>,
737}
738/// Nested message and enum types in `DurationExpression`.
739pub mod duration_expression {
740    #[derive(Clone, PartialEq, ::prost::Oneof)]
741    pub enum Kind {
742        #[prost(string, tag = "1")]
743        VariableName(::prost::alloc::string::String),
744        #[prost(message, tag = "2")]
745        Amount(super::DurationAmount),
746        #[prost(message, tag = "3")]
747        Binary(::prost::alloc::boxed::Box<super::BinaryDurationExpression>),
748        #[prost(message, tag = "4")]
749        Negated(::prost::alloc::boxed::Box<super::DurationExpression>),
750    }
751}
752#[derive(Clone, PartialEq, ::prost::Message)]
753pub struct DurationAmount {
754    #[prost(message, optional, tag = "1")]
755    pub count: ::core::option::Option<IntegerConstant>,
756    #[prost(enumeration = "super::super::types::time::TimeUnit", tag = "2")]
757    pub unit: i32,
758}
759#[derive(Clone, PartialEq, ::prost::Message)]
760pub struct BinaryDurationExpression {
761    #[prost(enumeration = "DurationOperation", tag = "1")]
762    pub operation: i32,
763    #[prost(message, optional, boxed, tag = "2")]
764    pub left: ::core::option::Option<::prost::alloc::boxed::Box<DurationExpression>>,
765    #[prost(message, optional, boxed, tag = "3")]
766    pub right: ::core::option::Option<::prost::alloc::boxed::Box<DurationExpression>>,
767}
768#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
769#[repr(i32)]
770pub enum DurationOperation {
771    Unspecified = 0,
772    Add = 1,
773    Subtract = 2,
774}
775impl DurationOperation {
776    /// String value of the enum field names used in the ProtoBuf definition.
777    ///
778    /// The values are not transformed in any way and thus are considered stable
779    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
780    pub fn as_str_name(&self) -> &'static str {
781        match self {
782            Self::Unspecified => "DURATION_OPERATION_UNSPECIFIED",
783            Self::Add => "DURATION_OPERATION_ADD",
784            Self::Subtract => "DURATION_OPERATION_SUBTRACT",
785        }
786    }
787    /// Creates an enum from field names used in the ProtoBuf definition.
788    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
789        match value {
790            "DURATION_OPERATION_UNSPECIFIED" => Some(Self::Unspecified),
791            "DURATION_OPERATION_ADD" => Some(Self::Add),
792            "DURATION_OPERATION_SUBTRACT" => Some(Self::Subtract),
793            _ => None,
794        }
795    }
796}
797#[derive(Clone, PartialEq, ::prost::Message)]
798pub struct TagPredicateExpression {
799    #[prost(oneof = "tag_predicate_expression::Kind", tags = "1, 2, 3")]
800    pub kind: ::core::option::Option<tag_predicate_expression::Kind>,
801}
802/// Nested message and enum types in `TagPredicateExpression`.
803pub mod tag_predicate_expression {
804    #[derive(Clone, PartialEq, ::prost::Oneof)]
805    pub enum Kind {
806        #[prost(message, tag = "1")]
807        In(super::TagMembershipExpression),
808        #[prost(message, tag = "2")]
809        NotIn(super::TagMembershipExpression),
810        #[prost(message, tag = "3")]
811        And(::prost::alloc::boxed::Box<super::TagConjunctionExpression>),
812    }
813}
814#[derive(Clone, PartialEq, ::prost::Message)]
815pub struct TagMembershipExpression {
816    #[prost(message, optional, tag = "1")]
817    pub key: ::core::option::Option<StringConstant>,
818    #[prost(message, optional, tag = "2")]
819    pub values: ::core::option::Option<ParameterizedStringSet>,
820}
821#[derive(Clone, PartialEq, ::prost::Message)]
822pub struct TagConjunctionExpression {
823    #[prost(message, optional, boxed, tag = "1")]
824    pub left: ::core::option::Option<::prost::alloc::boxed::Box<TagPredicateExpression>>,
825    #[prost(message, optional, boxed, tag = "2")]
826    pub right: ::core::option::Option<
827        ::prost::alloc::boxed::Box<TagPredicateExpression>,
828    >,
829}
830#[derive(Clone, PartialEq, ::prost::Message)]
831pub struct TagKeySet {
832    #[prost(message, optional, tag = "1")]
833    pub keys: ::core::option::Option<ParameterizedStringSet>,
834}
835#[derive(Clone, PartialEq, ::prost::Message)]
836pub struct AssetReferenceExpression {
837    #[prost(oneof = "asset_reference_expression::Kind", tags = "1, 2")]
838    pub kind: ::core::option::Option<asset_reference_expression::Kind>,
839}
840/// Nested message and enum types in `AssetReferenceExpression`.
841pub mod asset_reference_expression {
842    #[derive(Clone, PartialEq, ::prost::Oneof)]
843    pub enum Kind {
844        #[prost(string, tag = "1")]
845        Literal(::prost::alloc::string::String),
846        #[prost(string, tag = "2")]
847        VariableName(::prost::alloc::string::String),
848    }
849}
850#[derive(Clone, PartialEq, ::prost::Message)]
851pub struct RunReferenceExpression {
852    #[prost(oneof = "run_reference_expression::Kind", tags = "1, 2")]
853    pub kind: ::core::option::Option<run_reference_expression::Kind>,
854}
855/// Nested message and enum types in `RunReferenceExpression`.
856pub mod run_reference_expression {
857    #[derive(Clone, PartialEq, ::prost::Oneof)]
858    pub enum Kind {
859        #[prost(string, tag = "1")]
860        Literal(::prost::alloc::string::String),
861        #[prost(string, tag = "2")]
862        VariableName(::prost::alloc::string::String),
863    }
864}
865#[derive(Clone, PartialEq, ::prost::Message)]
866pub struct DataSourceReferenceExpression {
867    #[prost(oneof = "data_source_reference_expression::Kind", tags = "1, 2")]
868    pub kind: ::core::option::Option<data_source_reference_expression::Kind>,
869}
870/// Nested message and enum types in `DataSourceReferenceExpression`.
871pub mod data_source_reference_expression {
872    #[derive(Clone, PartialEq, ::prost::Oneof)]
873    pub enum Kind {
874        #[prost(string, tag = "1")]
875        Literal(::prost::alloc::string::String),
876        #[prost(string, tag = "2")]
877        VariableName(::prost::alloc::string::String),
878    }
879}
880#[derive(Clone, PartialEq, ::prost::Message)]
881pub struct ResourceTypeReferenceExpression {
882    #[prost(oneof = "resource_type_reference_expression::Kind", tags = "1, 2")]
883    pub kind: ::core::option::Option<resource_type_reference_expression::Kind>,
884}
885/// Nested message and enum types in `ResourceTypeReferenceExpression`.
886pub mod resource_type_reference_expression {
887    #[derive(Clone, PartialEq, ::prost::Oneof)]
888    pub enum Kind {
889        #[prost(string, tag = "1")]
890        Literal(::prost::alloc::string::String),
891        #[prost(string, tag = "2")]
892        VariableName(::prost::alloc::string::String),
893    }
894}
895#[derive(Clone, PartialEq, ::prost::Message)]
896pub struct ChannelSelection {
897    #[prost(oneof = "channel_selection::Source", tags = "1, 2, 3")]
898    pub source: ::core::option::Option<channel_selection::Source>,
899}
900/// Nested message and enum types in `ChannelSelection`.
901pub mod channel_selection {
902    #[derive(Clone, PartialEq, ::prost::Oneof)]
903    pub enum Source {
904        #[prost(message, tag = "1")]
905        DataSource(super::DataSourceChannelSelection),
906        #[prost(message, tag = "2")]
907        Asset(super::AssetChannelSelection),
908        #[prost(message, tag = "3")]
909        Run(super::RunChannelSelection),
910    }
911}
912#[derive(Clone, PartialEq, ::prost::Message)]
913pub struct DataSourceChannelSelection {
914    #[prost(message, optional, tag = "1")]
915    pub data_source: ::core::option::Option<DataSourceReferenceExpression>,
916    #[prost(message, optional, tag = "2")]
917    pub channel: ::core::option::Option<StringConstant>,
918    #[prost(message, optional, tag = "3")]
919    pub tags: ::core::option::Option<ChannelTagConstraints>,
920    #[prost(message, optional, tag = "4")]
921    pub grouping_keys: ::core::option::Option<TagKeySet>,
922    #[prost(enumeration = "SeriesStorageEngine", optional, tag = "5")]
923    pub storage: ::core::option::Option<i32>,
924}
925#[derive(Clone, PartialEq, ::prost::Message)]
926pub struct AssetChannelSelection {
927    #[prost(message, optional, tag = "1")]
928    pub asset: ::core::option::Option<AssetReferenceExpression>,
929    #[prost(message, optional, tag = "2")]
930    pub data_scope: ::core::option::Option<StringConstant>,
931    #[prost(message, optional, tag = "3")]
932    pub channel: ::core::option::Option<StringConstant>,
933    #[prost(message, optional, tag = "4")]
934    pub tags: ::core::option::Option<ChannelTagConstraints>,
935    #[prost(message, optional, tag = "5")]
936    pub grouping_keys: ::core::option::Option<TagKeySet>,
937}
938#[derive(Clone, PartialEq, ::prost::Message)]
939pub struct RunChannelSelection {
940    #[prost(message, optional, tag = "1")]
941    pub run: ::core::option::Option<RunReferenceExpression>,
942    #[prost(message, optional, tag = "2")]
943    pub asset: ::core::option::Option<AssetReferenceExpression>,
944    #[prost(message, optional, tag = "3")]
945    pub data_scope: ::core::option::Option<StringConstant>,
946    #[prost(message, optional, tag = "4")]
947    pub channel: ::core::option::Option<StringConstant>,
948    #[prost(message, optional, tag = "5")]
949    pub tags: ::core::option::Option<ChannelTagConstraints>,
950    #[prost(message, optional, tag = "6")]
951    pub grouping_keys: ::core::option::Option<TagKeySet>,
952}
953#[derive(Clone, PartialEq, ::prost::Message)]
954pub struct ChannelTagConstraints {
955    #[prost(oneof = "channel_tag_constraints::Kind", tags = "1, 2")]
956    pub kind: ::core::option::Option<channel_tag_constraints::Kind>,
957}
958/// Nested message and enum types in `ChannelTagConstraints`.
959pub mod channel_tag_constraints {
960    #[derive(Clone, PartialEq, ::prost::Oneof)]
961    pub enum Kind {
962        #[prost(message, tag = "1")]
963        ExactValues(super::ExactTagValues),
964        #[prost(message, tag = "2")]
965        Predicate(super::TagPredicateExpression),
966    }
967}
968#[derive(Clone, PartialEq, ::prost::Message)]
969pub struct ExactTagValues {
970    #[prost(map = "string, message", tag = "1")]
971    pub values: ::std::collections::HashMap<
972        ::prost::alloc::string::String,
973        StringConstant,
974    >,
975}
976#[derive(Clone, PartialEq, ::prost::Message)]
977pub struct SeriesSampling {
978    #[prost(oneof = "series_sampling::Kind", tags = "1, 2")]
979    pub kind: ::core::option::Option<series_sampling::Kind>,
980}
981/// Nested message and enum types in `SeriesSampling`.
982pub mod series_sampling {
983    #[derive(Clone, PartialEq, ::prost::Oneof)]
984    pub enum Kind {
985        #[prost(message, tag = "1")]
986        EveryNthPerSeries(super::IntegerConstant),
987        #[prost(message, tag = "2")]
988        HashSubsample(super::IntegerConstant),
989    }
990}
991#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
992#[repr(i32)]
993pub enum SeriesStorageEngine {
994    Unspecified = 0,
995    Iceberg = 1,
996    Clickhouse = 2,
997}
998impl SeriesStorageEngine {
999    /// String value of the enum field names used in the ProtoBuf definition.
1000    ///
1001    /// The values are not transformed in any way and thus are considered stable
1002    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1003    pub fn as_str_name(&self) -> &'static str {
1004        match self {
1005            Self::Unspecified => "SERIES_STORAGE_ENGINE_UNSPECIFIED",
1006            Self::Iceberg => "SERIES_STORAGE_ENGINE_ICEBERG",
1007            Self::Clickhouse => "SERIES_STORAGE_ENGINE_CLICKHOUSE",
1008        }
1009    }
1010    /// Creates an enum from field names used in the ProtoBuf definition.
1011    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1012        match value {
1013            "SERIES_STORAGE_ENGINE_UNSPECIFIED" => Some(Self::Unspecified),
1014            "SERIES_STORAGE_ENGINE_ICEBERG" => Some(Self::Iceberg),
1015            "SERIES_STORAGE_ENGINE_CLICKHOUSE" => Some(Self::Clickhouse),
1016            _ => None,
1017        }
1018    }
1019}
1020#[derive(Clone, PartialEq, ::prost::Message)]
1021pub struct EventPredicateExpression {
1022    #[prost(
1023        oneof = "event_predicate_expression::Kind",
1024        tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24"
1025    )]
1026    pub kind: ::core::option::Option<event_predicate_expression::Kind>,
1027}
1028/// Nested message and enum types in `EventPredicateExpression`.
1029pub mod event_predicate_expression {
1030    #[derive(Clone, PartialEq, ::prost::Oneof)]
1031    pub enum Kind {
1032        #[prost(message, tag = "1")]
1033        SearchText(super::StringConstant),
1034        #[prost(message, tag = "2")]
1035        After(super::TimestampConstant),
1036        #[prost(message, tag = "3")]
1037        Before(super::TimestampConstant),
1038        #[prost(message, tag = "4")]
1039        TimestampCondition(super::EventTimestampCondition),
1040        #[prost(message, tag = "5")]
1041        Asset(super::AssetReferenceExpression),
1042        #[prost(message, tag = "6")]
1043        TemplateRid(super::StringConstant),
1044        #[prost(message, tag = "7")]
1045        WorkbookRid(super::StringConstant),
1046        #[prost(message, tag = "8")]
1047        DataReviewRid(super::StringConstant),
1048        #[prost(
1049            enumeration = "super::super::super::event::v2::SearchEventOriginType",
1050            tag = "9"
1051        )]
1052        OriginType(i32),
1053        #[prost(message, tag = "10")]
1054        DataReviewCheckRid(super::StringConstant),
1055        #[prost(
1056            enumeration = "super::super::super::event::v2::EventDispositionStatus",
1057            tag = "11"
1058        )]
1059        Disposition(i32),
1060        #[prost(message, tag = "12")]
1061        Priority(super::StringConstant),
1062        #[prost(message, tag = "13")]
1063        AssigneeRid(super::StringConstant),
1064        #[prost(enumeration = "super::super::super::event::v2::EventType", tag = "14")]
1065        EventType(i32),
1066        #[prost(message, tag = "15")]
1067        CreatedByRid(super::StringConstant),
1068        #[prost(message, tag = "16")]
1069        Label(super::StringConstant),
1070        #[prost(message, tag = "17")]
1071        Property(super::EventPropertyPredicate),
1072        #[prost(message, tag = "18")]
1073        All(super::EventPredicateGroup),
1074        #[prost(message, tag = "19")]
1075        Any(super::EventPredicateGroup),
1076        #[prost(message, tag = "20")]
1077        Negation(::prost::alloc::boxed::Box<super::EventPredicateExpression>),
1078        #[prost(message, tag = "21")]
1079        WorkspaceRid(super::StringConstant),
1080        #[prost(message, tag = "22")]
1081        ProcedureRid(super::StringConstant),
1082        #[prost(message, tag = "23")]
1083        ProcedureExecutionRid(super::StringConstant),
1084        #[prost(message, tag = "24")]
1085        StepId(super::StringConstant),
1086    }
1087}
1088#[derive(Clone, PartialEq, ::prost::Message)]
1089pub struct EventTimestampCondition {
1090    #[prost(message, optional, tag = "1")]
1091    pub timestamp: ::core::option::Option<TimestampConstant>,
1092    #[prost(
1093        enumeration = "super::super::event::v2::EventTimeFilterCondition",
1094        tag = "2"
1095    )]
1096    pub condition: i32,
1097}
1098#[derive(Clone, PartialEq, ::prost::Message)]
1099pub struct EventPropertyPredicate {
1100    #[prost(message, optional, tag = "1")]
1101    pub name: ::core::option::Option<StringConstant>,
1102    #[prost(message, optional, tag = "2")]
1103    pub value: ::core::option::Option<StringConstant>,
1104}
1105#[derive(Clone, PartialEq, ::prost::Message)]
1106pub struct EventPredicateGroup {
1107    #[prost(message, repeated, tag = "1")]
1108    pub predicates: ::prost::alloc::vec::Vec<EventPredicateExpression>,
1109}
1110#[derive(Clone, PartialEq, ::prost::Message)]
1111pub struct LogPredicate {
1112    #[prost(oneof = "log_predicate::Kind", tags = "1, 2, 3, 4, 5, 6")]
1113    pub kind: ::core::option::Option<log_predicate::Kind>,
1114}
1115/// Nested message and enum types in `LogPredicate`.
1116pub mod log_predicate {
1117    #[derive(Clone, PartialEq, ::prost::Oneof)]
1118    pub enum Kind {
1119        #[prost(string, tag = "1")]
1120        MessageRegex(::prost::alloc::string::String),
1121        #[prost(string, tag = "2")]
1122        MessageContainsCaseInsensitive(::prost::alloc::string::String),
1123        #[prost(message, tag = "3")]
1124        AttributeRegex(super::LogAttributeRegex),
1125        #[prost(message, tag = "4")]
1126        All(super::LogPredicateGroup),
1127        #[prost(message, tag = "5")]
1128        Any(super::LogPredicateGroup),
1129        #[prost(message, tag = "6")]
1130        Negation(::prost::alloc::boxed::Box<super::LogPredicate>),
1131    }
1132}
1133#[derive(Clone, PartialEq, ::prost::Message)]
1134pub struct LogAttributeRegex {
1135    #[prost(message, optional, tag = "1")]
1136    pub key: ::core::option::Option<StringConstant>,
1137    #[prost(string, tag = "2")]
1138    pub regex: ::prost::alloc::string::String,
1139}
1140#[derive(Clone, PartialEq, ::prost::Message)]
1141pub struct LogPredicateGroup {
1142    #[prost(message, repeated, tag = "1")]
1143    pub predicates: ::prost::alloc::vec::Vec<LogPredicate>,
1144}
1145#[derive(Clone, PartialEq, ::prost::Message)]
1146pub struct NumericReduction {
1147    #[prost(oneof = "numeric_reduction::Kind", tags = "1, 2, 3, 4, 5, 6, 7, 8, 9")]
1148    pub kind: ::core::option::Option<numeric_reduction::Kind>,
1149}
1150/// Nested message and enum types in `NumericReduction`.
1151pub mod numeric_reduction {
1152    #[derive(Clone, PartialEq, ::prost::Oneof)]
1153    pub enum Kind {
1154        #[prost(message, tag = "1")]
1155        Sum(super::SumReduction),
1156        #[prost(message, tag = "2")]
1157        Average(super::AverageReduction),
1158        #[prost(message, tag = "3")]
1159        Min(super::MinReduction),
1160        #[prost(message, tag = "4")]
1161        Max(super::MaxReduction),
1162        #[prost(message, tag = "5")]
1163        Count(super::CountReduction),
1164        #[prost(message, tag = "6")]
1165        StandardDeviation(super::StandardDeviationReduction),
1166        #[prost(message, tag = "7")]
1167        RootMeanSquare(super::RootMeanSquareReduction),
1168        #[prost(message, tag = "8")]
1169        Percentile(super::DoubleConstant),
1170        #[prost(message, tag = "9")]
1171        Udf(super::super::super::modules::v1::UdfSource),
1172    }
1173}
1174#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1175pub struct SumReduction {}
1176#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1177pub struct AverageReduction {}
1178#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1179pub struct MinReduction {}
1180#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1181pub struct MaxReduction {}
1182#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1183pub struct CountReduction {}
1184#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1185pub struct StandardDeviationReduction {}
1186#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1187pub struct RootMeanSquareReduction {}
1188#[derive(Clone, PartialEq, ::prost::Message)]
1189pub struct DurationInput {
1190    #[prost(oneof = "duration_input::Kind", tags = "1, 2")]
1191    pub kind: ::core::option::Option<duration_input::Kind>,
1192}
1193/// Nested message and enum types in `DurationInput`.
1194pub mod duration_input {
1195    #[derive(Clone, PartialEq, ::prost::Oneof)]
1196    pub enum Kind {
1197        #[prost(message, tag = "1")]
1198        Components(super::DurationConstant),
1199        #[prost(message, tag = "2")]
1200        Arithmetic(super::DurationExpression),
1201    }
1202}
1203#[derive(Clone, PartialEq, ::prost::Message)]
1204pub struct RangePersistence {
1205    #[prost(message, optional, tag = "1")]
1206    pub min_points: ::core::option::Option<IntegerConstant>,
1207    #[prost(message, optional, tag = "2")]
1208    pub min_duration: ::core::option::Option<DurationInput>,
1209    #[prost(enumeration = "RangeStartSelection", optional, tag = "3")]
1210    pub start: ::core::option::Option<i32>,
1211}
1212#[derive(Clone, PartialEq, ::prost::Message)]
1213pub struct SpreadThreshold {
1214    #[prost(oneof = "spread_threshold::Kind", tags = "1, 2")]
1215    pub kind: ::core::option::Option<spread_threshold::Kind>,
1216}
1217/// Nested message and enum types in `SpreadThreshold`.
1218pub mod spread_threshold {
1219    #[derive(Clone, PartialEq, ::prost::Oneof)]
1220    pub enum Kind {
1221        #[prost(message, tag = "1")]
1222        Absolute(super::DoubleConstant),
1223        #[prost(message, tag = "2")]
1224        Percentage(super::DoubleConstant),
1225    }
1226}
1227#[derive(Clone, PartialEq, ::prost::Message)]
1228pub struct TagGrouping {
1229    #[prost(map = "string, string", tag = "1")]
1230    pub tags: ::std::collections::HashMap<
1231        ::prost::alloc::string::String,
1232        ::prost::alloc::string::String,
1233    >,
1234}
1235#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1236#[repr(i32)]
1237pub enum RangeStartSelection {
1238    Unspecified = 0,
1239    ConditionStart = 1,
1240    PersistenceStart = 2,
1241}
1242impl RangeStartSelection {
1243    /// String value of the enum field names used in the ProtoBuf definition.
1244    ///
1245    /// The values are not transformed in any way and thus are considered stable
1246    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1247    pub fn as_str_name(&self) -> &'static str {
1248        match self {
1249            Self::Unspecified => "RANGE_START_SELECTION_UNSPECIFIED",
1250            Self::ConditionStart => "RANGE_START_SELECTION_CONDITION_START",
1251            Self::PersistenceStart => "RANGE_START_SELECTION_PERSISTENCE_START",
1252        }
1253    }
1254    /// Creates an enum from field names used in the ProtoBuf definition.
1255    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1256        match value {
1257            "RANGE_START_SELECTION_UNSPECIFIED" => Some(Self::Unspecified),
1258            "RANGE_START_SELECTION_CONDITION_START" => Some(Self::ConditionStart),
1259            "RANGE_START_SELECTION_PERSISTENCE_START" => Some(Self::PersistenceStart),
1260            _ => None,
1261        }
1262    }
1263}
1264#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1265#[repr(i32)]
1266pub enum UnboundedDurationComparison {
1267    Unspecified = 0,
1268    Infinity = 1,
1269    WindowBound = 2,
1270}
1271impl UnboundedDurationComparison {
1272    /// String value of the enum field names used in the ProtoBuf definition.
1273    ///
1274    /// The values are not transformed in any way and thus are considered stable
1275    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1276    pub fn as_str_name(&self) -> &'static str {
1277        match self {
1278            Self::Unspecified => "UNBOUNDED_DURATION_COMPARISON_UNSPECIFIED",
1279            Self::Infinity => "UNBOUNDED_DURATION_COMPARISON_INFINITY",
1280            Self::WindowBound => "UNBOUNDED_DURATION_COMPARISON_WINDOW_BOUND",
1281        }
1282    }
1283    /// Creates an enum from field names used in the ProtoBuf definition.
1284    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1285        match value {
1286            "UNBOUNDED_DURATION_COMPARISON_UNSPECIFIED" => Some(Self::Unspecified),
1287            "UNBOUNDED_DURATION_COMPARISON_INFINITY" => Some(Self::Infinity),
1288            "UNBOUNDED_DURATION_COMPARISON_WINDOW_BOUND" => Some(Self::WindowBound),
1289            _ => None,
1290        }
1291    }
1292}
1293#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1294#[repr(i32)]
1295pub enum NumericBoundsCondition {
1296    Unspecified = 0,
1297    Outside = 1,
1298    OutsideOrEqual = 2,
1299    Inside = 3,
1300    InsideOrEqual = 4,
1301}
1302impl NumericBoundsCondition {
1303    /// String value of the enum field names used in the ProtoBuf definition.
1304    ///
1305    /// The values are not transformed in any way and thus are considered stable
1306    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1307    pub fn as_str_name(&self) -> &'static str {
1308        match self {
1309            Self::Unspecified => "NUMERIC_BOUNDS_CONDITION_UNSPECIFIED",
1310            Self::Outside => "NUMERIC_BOUNDS_CONDITION_OUTSIDE",
1311            Self::OutsideOrEqual => "NUMERIC_BOUNDS_CONDITION_OUTSIDE_OR_EQUAL",
1312            Self::Inside => "NUMERIC_BOUNDS_CONDITION_INSIDE",
1313            Self::InsideOrEqual => "NUMERIC_BOUNDS_CONDITION_INSIDE_OR_EQUAL",
1314        }
1315    }
1316    /// Creates an enum from field names used in the ProtoBuf definition.
1317    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1318        match value {
1319            "NUMERIC_BOUNDS_CONDITION_UNSPECIFIED" => Some(Self::Unspecified),
1320            "NUMERIC_BOUNDS_CONDITION_OUTSIDE" => Some(Self::Outside),
1321            "NUMERIC_BOUNDS_CONDITION_OUTSIDE_OR_EQUAL" => Some(Self::OutsideOrEqual),
1322            "NUMERIC_BOUNDS_CONDITION_INSIDE" => Some(Self::Inside),
1323            "NUMERIC_BOUNDS_CONDITION_INSIDE_OR_EQUAL" => Some(Self::InsideOrEqual),
1324            _ => None,
1325        }
1326    }
1327}
1328#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1329#[repr(i32)]
1330pub enum SeriesEqualityMode {
1331    Unspecified = 0,
1332    AllEqual = 1,
1333    NotAllEqual = 2,
1334}
1335impl SeriesEqualityMode {
1336    /// String value of the enum field names used in the ProtoBuf definition.
1337    ///
1338    /// The values are not transformed in any way and thus are considered stable
1339    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1340    pub fn as_str_name(&self) -> &'static str {
1341        match self {
1342            Self::Unspecified => "SERIES_EQUALITY_MODE_UNSPECIFIED",
1343            Self::AllEqual => "SERIES_EQUALITY_MODE_ALL_EQUAL",
1344            Self::NotAllEqual => "SERIES_EQUALITY_MODE_NOT_ALL_EQUAL",
1345        }
1346    }
1347    /// Creates an enum from field names used in the ProtoBuf definition.
1348    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1349        match value {
1350            "SERIES_EQUALITY_MODE_UNSPECIFIED" => Some(Self::Unspecified),
1351            "SERIES_EQUALITY_MODE_ALL_EQUAL" => Some(Self::AllEqual),
1352            "SERIES_EQUALITY_MODE_NOT_ALL_EQUAL" => Some(Self::NotAllEqual),
1353            _ => None,
1354        }
1355    }
1356}
1357#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1358#[repr(i32)]
1359pub enum CategoricalMembershipOperation {
1360    Unspecified = 0,
1361    In = 1,
1362    NotIn = 2,
1363    MatchesAnyRegex = 3,
1364}
1365impl CategoricalMembershipOperation {
1366    /// String value of the enum field names used in the ProtoBuf definition.
1367    ///
1368    /// The values are not transformed in any way and thus are considered stable
1369    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1370    pub fn as_str_name(&self) -> &'static str {
1371        match self {
1372            Self::Unspecified => "CATEGORICAL_MEMBERSHIP_OPERATION_UNSPECIFIED",
1373            Self::In => "CATEGORICAL_MEMBERSHIP_OPERATION_IN",
1374            Self::NotIn => "CATEGORICAL_MEMBERSHIP_OPERATION_NOT_IN",
1375            Self::MatchesAnyRegex => "CATEGORICAL_MEMBERSHIP_OPERATION_MATCHES_ANY_REGEX",
1376        }
1377    }
1378    /// Creates an enum from field names used in the ProtoBuf definition.
1379    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1380        match value {
1381            "CATEGORICAL_MEMBERSHIP_OPERATION_UNSPECIFIED" => Some(Self::Unspecified),
1382            "CATEGORICAL_MEMBERSHIP_OPERATION_IN" => Some(Self::In),
1383            "CATEGORICAL_MEMBERSHIP_OPERATION_NOT_IN" => Some(Self::NotIn),
1384            "CATEGORICAL_MEMBERSHIP_OPERATION_MATCHES_ANY_REGEX" => {
1385                Some(Self::MatchesAnyRegex)
1386            }
1387            _ => None,
1388        }
1389    }
1390}
1391#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1392#[repr(i32)]
1393pub enum ExtremaSelection {
1394    Unspecified = 0,
1395    Peaks = 1,
1396    Troughs = 2,
1397    Both = 3,
1398}
1399impl ExtremaSelection {
1400    /// String value of the enum field names used in the ProtoBuf definition.
1401    ///
1402    /// The values are not transformed in any way and thus are considered stable
1403    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1404    pub fn as_str_name(&self) -> &'static str {
1405        match self {
1406            Self::Unspecified => "EXTREMA_SELECTION_UNSPECIFIED",
1407            Self::Peaks => "EXTREMA_SELECTION_PEAKS",
1408            Self::Troughs => "EXTREMA_SELECTION_TROUGHS",
1409            Self::Both => "EXTREMA_SELECTION_BOTH",
1410        }
1411    }
1412    /// Creates an enum from field names used in the ProtoBuf definition.
1413    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1414        match value {
1415            "EXTREMA_SELECTION_UNSPECIFIED" => Some(Self::Unspecified),
1416            "EXTREMA_SELECTION_PEAKS" => Some(Self::Peaks),
1417            "EXTREMA_SELECTION_TROUGHS" => Some(Self::Troughs),
1418            "EXTREMA_SELECTION_BOTH" => Some(Self::Both),
1419            _ => None,
1420        }
1421    }
1422}
1423#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1424#[repr(i32)]
1425pub enum RangePaddingSides {
1426    Unspecified = 0,
1427    Start = 1,
1428    End = 2,
1429    Both = 3,
1430}
1431impl RangePaddingSides {
1432    /// String value of the enum field names used in the ProtoBuf definition.
1433    ///
1434    /// The values are not transformed in any way and thus are considered stable
1435    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1436    pub fn as_str_name(&self) -> &'static str {
1437        match self {
1438            Self::Unspecified => "RANGE_PADDING_SIDES_UNSPECIFIED",
1439            Self::Start => "RANGE_PADDING_SIDES_START",
1440            Self::End => "RANGE_PADDING_SIDES_END",
1441            Self::Both => "RANGE_PADDING_SIDES_BOTH",
1442        }
1443    }
1444    /// Creates an enum from field names used in the ProtoBuf definition.
1445    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1446        match value {
1447            "RANGE_PADDING_SIDES_UNSPECIFIED" => Some(Self::Unspecified),
1448            "RANGE_PADDING_SIDES_START" => Some(Self::Start),
1449            "RANGE_PADDING_SIDES_END" => Some(Self::End),
1450            "RANGE_PADDING_SIDES_BOTH" => Some(Self::Both),
1451            _ => None,
1452        }
1453    }
1454}
1455#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1456#[repr(i32)]
1457pub enum RefpropSubstance {
1458    Unspecified = 0,
1459    Nitrogen = 1,
1460    Oxygen = 2,
1461    Helium = 3,
1462    Hydrogen = 4,
1463    Methane = 5,
1464    Propane = 6,
1465    Butane = 7,
1466    Water = 8,
1467    Xenon = 9,
1468    Air = 10,
1469    CarbonDioxide = 11,
1470    Argon = 12,
1471    CarbonMonoxide = 13,
1472    JetA4658 = 14,
1473    JetA3638 = 15,
1474}
1475impl RefpropSubstance {
1476    /// String value of the enum field names used in the ProtoBuf definition.
1477    ///
1478    /// The values are not transformed in any way and thus are considered stable
1479    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1480    pub fn as_str_name(&self) -> &'static str {
1481        match self {
1482            Self::Unspecified => "REFPROP_SUBSTANCE_UNSPECIFIED",
1483            Self::Nitrogen => "REFPROP_SUBSTANCE_NITROGEN",
1484            Self::Oxygen => "REFPROP_SUBSTANCE_OXYGEN",
1485            Self::Helium => "REFPROP_SUBSTANCE_HELIUM",
1486            Self::Hydrogen => "REFPROP_SUBSTANCE_HYDROGEN",
1487            Self::Methane => "REFPROP_SUBSTANCE_METHANE",
1488            Self::Propane => "REFPROP_SUBSTANCE_PROPANE",
1489            Self::Butane => "REFPROP_SUBSTANCE_BUTANE",
1490            Self::Water => "REFPROP_SUBSTANCE_WATER",
1491            Self::Xenon => "REFPROP_SUBSTANCE_XENON",
1492            Self::Air => "REFPROP_SUBSTANCE_AIR",
1493            Self::CarbonDioxide => "REFPROP_SUBSTANCE_CARBON_DIOXIDE",
1494            Self::Argon => "REFPROP_SUBSTANCE_ARGON",
1495            Self::CarbonMonoxide => "REFPROP_SUBSTANCE_CARBON_MONOXIDE",
1496            Self::JetA4658 => "REFPROP_SUBSTANCE_JET_A_4658",
1497            Self::JetA3638 => "REFPROP_SUBSTANCE_JET_A_3638",
1498        }
1499    }
1500    /// Creates an enum from field names used in the ProtoBuf definition.
1501    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1502        match value {
1503            "REFPROP_SUBSTANCE_UNSPECIFIED" => Some(Self::Unspecified),
1504            "REFPROP_SUBSTANCE_NITROGEN" => Some(Self::Nitrogen),
1505            "REFPROP_SUBSTANCE_OXYGEN" => Some(Self::Oxygen),
1506            "REFPROP_SUBSTANCE_HELIUM" => Some(Self::Helium),
1507            "REFPROP_SUBSTANCE_HYDROGEN" => Some(Self::Hydrogen),
1508            "REFPROP_SUBSTANCE_METHANE" => Some(Self::Methane),
1509            "REFPROP_SUBSTANCE_PROPANE" => Some(Self::Propane),
1510            "REFPROP_SUBSTANCE_BUTANE" => Some(Self::Butane),
1511            "REFPROP_SUBSTANCE_WATER" => Some(Self::Water),
1512            "REFPROP_SUBSTANCE_XENON" => Some(Self::Xenon),
1513            "REFPROP_SUBSTANCE_AIR" => Some(Self::Air),
1514            "REFPROP_SUBSTANCE_CARBON_DIOXIDE" => Some(Self::CarbonDioxide),
1515            "REFPROP_SUBSTANCE_ARGON" => Some(Self::Argon),
1516            "REFPROP_SUBSTANCE_CARBON_MONOXIDE" => Some(Self::CarbonMonoxide),
1517            "REFPROP_SUBSTANCE_JET_A_4658" => Some(Self::JetA4658),
1518            "REFPROP_SUBSTANCE_JET_A_3638" => Some(Self::JetA3638),
1519            _ => None,
1520        }
1521    }
1522}
1523#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1524#[repr(i32)]
1525pub enum RefpropProperty {
1526    Unspecified = 0,
1527    Temperature = 1,
1528    Pressure = 2,
1529    MassDensity = 3,
1530    MassSpecificEnthalpy = 4,
1531    MassSpecificInternalEnergy = 5,
1532    MassSpecificEntropy = 6,
1533    Viscosity = 7,
1534}
1535impl RefpropProperty {
1536    /// String value of the enum field names used in the ProtoBuf definition.
1537    ///
1538    /// The values are not transformed in any way and thus are considered stable
1539    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1540    pub fn as_str_name(&self) -> &'static str {
1541        match self {
1542            Self::Unspecified => "REFPROP_PROPERTY_UNSPECIFIED",
1543            Self::Temperature => "REFPROP_PROPERTY_TEMPERATURE",
1544            Self::Pressure => "REFPROP_PROPERTY_PRESSURE",
1545            Self::MassDensity => "REFPROP_PROPERTY_MASS_DENSITY",
1546            Self::MassSpecificEnthalpy => "REFPROP_PROPERTY_MASS_SPECIFIC_ENTHALPY",
1547            Self::MassSpecificInternalEnergy => {
1548                "REFPROP_PROPERTY_MASS_SPECIFIC_INTERNAL_ENERGY"
1549            }
1550            Self::MassSpecificEntropy => "REFPROP_PROPERTY_MASS_SPECIFIC_ENTROPY",
1551            Self::Viscosity => "REFPROP_PROPERTY_VISCOSITY",
1552        }
1553    }
1554    /// Creates an enum from field names used in the ProtoBuf definition.
1555    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1556        match value {
1557            "REFPROP_PROPERTY_UNSPECIFIED" => Some(Self::Unspecified),
1558            "REFPROP_PROPERTY_TEMPERATURE" => Some(Self::Temperature),
1559            "REFPROP_PROPERTY_PRESSURE" => Some(Self::Pressure),
1560            "REFPROP_PROPERTY_MASS_DENSITY" => Some(Self::MassDensity),
1561            "REFPROP_PROPERTY_MASS_SPECIFIC_ENTHALPY" => Some(Self::MassSpecificEnthalpy),
1562            "REFPROP_PROPERTY_MASS_SPECIFIC_INTERNAL_ENERGY" => {
1563                Some(Self::MassSpecificInternalEnergy)
1564            }
1565            "REFPROP_PROPERTY_MASS_SPECIFIC_ENTROPY" => Some(Self::MassSpecificEntropy),
1566            "REFPROP_PROPERTY_VISCOSITY" => Some(Self::Viscosity),
1567            _ => None,
1568        }
1569    }
1570}
1571#[derive(Clone, PartialEq, ::prost::Message)]
1572pub struct ResourcePredicate {
1573    #[prost(oneof = "resource_predicate::Kind", tags = "1, 2, 3, 4, 5, 6, 7, 8")]
1574    pub kind: ::core::option::Option<resource_predicate::Kind>,
1575}
1576/// Nested message and enum types in `ResourcePredicate`.
1577pub mod resource_predicate {
1578    #[derive(Clone, PartialEq, ::prost::Oneof)]
1579    pub enum Kind {
1580        #[prost(message, tag = "1")]
1581        Properties(super::super::super::types::PropertiesFilter),
1582        #[prost(message, tag = "2")]
1583        NumericProperty(super::super::super::types::NumericPropertyPredicate),
1584        #[prost(message, tag = "3")]
1585        NumericPropertyRange(super::super::super::types::NumericPropertyRangePredicate),
1586        #[prost(message, tag = "4")]
1587        Labels(super::super::super::types::LabelsFilter),
1588        #[prost(message, tag = "5")]
1589        Workspace(super::StringConstant),
1590        #[prost(message, tag = "6")]
1591        All(super::ResourcePredicateGroup),
1592        #[prost(message, tag = "7")]
1593        Any(super::ResourcePredicateGroup),
1594        #[prost(message, tag = "8")]
1595        Negation(::prost::alloc::boxed::Box<super::ResourcePredicate>),
1596    }
1597}
1598#[derive(Clone, PartialEq, ::prost::Message)]
1599pub struct ResourcePredicateGroup {
1600    #[prost(message, repeated, tag = "1")]
1601    pub predicates: ::prost::alloc::vec::Vec<ResourcePredicate>,
1602}
1603#[derive(Clone, PartialEq, ::prost::Message)]
1604pub struct DatasetResourceSearch {
1605    #[prost(int32, optional, tag = "3")]
1606    pub max_results: ::core::option::Option<i32>,
1607    #[prost(oneof = "dataset_resource_search::Target", tags = "1, 2")]
1608    pub target: ::core::option::Option<dataset_resource_search::Target>,
1609}
1610/// Nested message and enum types in `DatasetResourceSearch`.
1611pub mod dataset_resource_search {
1612    #[derive(Clone, PartialEq, ::prost::Oneof)]
1613    pub enum Target {
1614        #[prost(message, tag = "1")]
1615        Assets(super::ResourcePredicate),
1616        #[prost(message, tag = "2")]
1617        Runs(super::ResourcePredicate),
1618    }
1619}
1620#[derive(Clone, PartialEq, ::prost::Message)]
1621pub struct SignalFilterConfiguration {
1622    #[prost(oneof = "signal_filter_configuration::Kind", tags = "1, 2, 3, 4")]
1623    pub kind: ::core::option::Option<signal_filter_configuration::Kind>,
1624}
1625/// Nested message and enum types in `SignalFilterConfiguration`.
1626pub mod signal_filter_configuration {
1627    #[derive(Clone, PartialEq, ::prost::Oneof)]
1628    pub enum Kind {
1629        #[prost(message, tag = "1")]
1630        LowPass(super::SingleCutoffFilter),
1631        #[prost(message, tag = "2")]
1632        HighPass(super::SingleCutoffFilter),
1633        #[prost(message, tag = "3")]
1634        BandPass(super::FrequencyBandFilter),
1635        #[prost(message, tag = "4")]
1636        BandStop(super::FrequencyBandFilter),
1637    }
1638}
1639#[derive(Clone, PartialEq, ::prost::Message)]
1640pub struct SingleCutoffFilter {
1641    #[prost(message, optional, tag = "1")]
1642    pub cutoff_frequency: ::core::option::Option<DoubleConstant>,
1643}
1644#[derive(Clone, PartialEq, ::prost::Message)]
1645pub struct FrequencyBandFilter {
1646    #[prost(message, optional, tag = "1")]
1647    pub lower_frequency: ::core::option::Option<DoubleConstant>,
1648    #[prost(message, optional, tag = "2")]
1649    pub upper_frequency: ::core::option::Option<DoubleConstant>,
1650}
1651#[derive(Clone, PartialEq, ::prost::Message)]
1652pub struct NumericExpression {
1653    #[prost(
1654        oneof = "numeric_expression::Kind",
1655        tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 57, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56"
1656    )]
1657    pub kind: ::core::option::Option<numeric_expression::Kind>,
1658}
1659/// Nested message and enum types in `NumericExpression`.
1660pub mod numeric_expression {
1661    #[derive(Clone, PartialEq, ::prost::Oneof)]
1662    pub enum Kind {
1663        #[prost(message, tag = "1")]
1664        Reference(super::TimeSeriesReference),
1665        #[prost(message, tag = "2")]
1666        Constant(super::DoubleConstant),
1667        #[prost(message, tag = "3")]
1668        Unary(::prost::alloc::boxed::Box<super::NumericUnaryExpression>),
1669        #[prost(message, tag = "4")]
1670        Binary(::prost::alloc::boxed::Box<super::NumericBinaryExpression>),
1671        #[prost(message, tag = "5")]
1672        Nary(super::NumericNaryExpression),
1673        #[prost(message, tag = "6")]
1674        Bitwise(::prost::alloc::boxed::Box<super::NumericBitwiseExpression>),
1675        #[prost(message, tag = "7")]
1676        Conditional(::prost::alloc::boxed::Box<super::NumericConditionalExpression>),
1677        #[prost(message, tag = "8")]
1678        CumulativeSum(::prost::alloc::boxed::Box<super::NumericCumulativeSumExpression>),
1679        #[prost(message, tag = "9")]
1680        Derivative(::prost::alloc::boxed::Box<super::NumericDerivativeExpression>),
1681        #[prost(message, tag = "10")]
1682        Integral(::prost::alloc::boxed::Box<super::NumericIntegralExpression>),
1683        #[prost(message, tag = "11")]
1684        TimeRangeFilter(
1685            ::prost::alloc::boxed::Box<super::NumericTimeRangeFilterExpression>,
1686        ),
1687        #[prost(message, tag = "12")]
1688        TimeShift(::prost::alloc::boxed::Box<super::NumericTimeShiftExpression>),
1689        #[prost(message, tag = "13")]
1690        ValueDifference(
1691            ::prost::alloc::boxed::Box<super::NumericValueDifferenceExpression>,
1692        ),
1693        #[prost(message, tag = "14")]
1694        PhaseUnwrap(::prost::alloc::boxed::Box<super::NumericPhaseUnwrapExpression>),
1695        #[prost(message, tag = "15")]
1696        PointLimit(::prost::alloc::boxed::Box<super::NumericPointLimitExpression>),
1697        #[prost(message, tag = "16")]
1698        NthPointDownsample(
1699            ::prost::alloc::boxed::Box<super::NumericNthPointDownsampleExpression>,
1700        ),
1701        #[prost(message, tag = "17")]
1702        LargestTriangleThreeBuckets(
1703            ::prost::alloc::boxed::Box<
1704                super::NumericLargestTriangleThreeBucketsExpression,
1705            >,
1706        ),
1707        #[prost(message, tag = "18")]
1708        ConditionFilter(
1709            ::prost::alloc::boxed::Box<super::NumericConditionFilterExpression>,
1710        ),
1711        #[prost(message, tag = "19")]
1712        ThresholdFilter(
1713            ::prost::alloc::boxed::Box<super::NumericThresholdFilterExpression>,
1714        ),
1715        #[prost(message, tag = "57")]
1716        DropNan(::prost::alloc::boxed::Box<super::NumericDropNanExpression>),
1717        #[prost(message, tag = "20")]
1718        ApproximateFilter(
1719            ::prost::alloc::boxed::Box<super::NumericApproximateFilterExpression>,
1720        ),
1721        #[prost(message, tag = "21")]
1722        SignalFilter(::prost::alloc::boxed::Box<super::NumericSignalFilterExpression>),
1723        #[prost(message, tag = "22")]
1724        UnitConversion(
1725            ::prost::alloc::boxed::Box<super::NumericUnitConversionExpression>,
1726        ),
1727        #[prost(message, tag = "23")]
1728        UnitOverride(::prost::alloc::boxed::Box<super::NumericUnitOverrideExpression>),
1729        #[prost(message, tag = "24")]
1730        ZScore(::prost::alloc::boxed::Box<super::NumericZScoreExpression>),
1731        #[prost(message, tag = "25")]
1732        Union(super::NumericUnionExpression),
1733        #[prost(message, tag = "26")]
1734        TimeShiftV2(::prost::alloc::boxed::Box<super::NumericTimeShiftV2Expression>),
1735        #[prost(message, tag = "27")]
1736        ResampleV2(::prost::alloc::boxed::Box<super::NumericResampleV2Expression>),
1737        #[prost(message, tag = "28")]
1738        ToStartOfInterval(
1739            ::prost::alloc::boxed::Box<super::NumericToStartOfIntervalExpression>,
1740        ),
1741        #[prost(message, tag = "29")]
1742        ScalarTransform(
1743            ::prost::alloc::boxed::Box<super::NumericScalarTransformExpression>,
1744        ),
1745        #[prost(message, tag = "30")]
1746        Arithmetic(super::NumericArithmeticExpression),
1747        #[prost(message, tag = "31")]
1748        FormulaFilter(super::NumericFormulaFilterExpression),
1749        #[prost(message, tag = "32")]
1750        LiteralBitwise(
1751            ::prost::alloc::boxed::Box<super::NumericLiteralBitwiseExpression>,
1752        ),
1753        #[prost(message, tag = "33")]
1754        Resample(::prost::alloc::boxed::Box<super::NumericResampleExpression>),
1755        #[prost(message, tag = "34")]
1756        Refprop(super::NumericRefpropExpression),
1757        #[prost(message, tag = "35")]
1758        RollingAggregation(
1759            ::prost::alloc::boxed::Box<super::NumericRollingAggregationExpression>,
1760        ),
1761        #[prost(message, tag = "36")]
1762        DuplicateTimestampAggregation(
1763            ::prost::alloc::boxed::Box<
1764                super::NumericDuplicateTimestampAggregationExpression,
1765            >,
1766        ),
1767        #[prost(message, tag = "37")]
1768        TagFilter(::prost::alloc::boxed::Box<super::NumericTagFilterExpression>),
1769        #[prost(message, tag = "38")]
1770        TagSelection(::prost::alloc::boxed::Box<super::NumericTagSelectionExpression>),
1771        #[prost(message, tag = "39")]
1772        AbsoluteTimestamp(
1773            ::prost::alloc::boxed::Box<super::NumericAbsoluteTimestampExpression>,
1774        ),
1775        #[prost(message, tag = "40")]
1776        ReduceUnderRanges(
1777            ::prost::alloc::boxed::Box<super::NumericReduceUnderRangesExpression>,
1778        ),
1779        #[prost(message, tag = "41")]
1780        ChannelSelection(super::ChannelSelection),
1781        #[prost(message, tag = "42")]
1782        LogMatches(::prost::alloc::boxed::Box<super::NumericLogMatchesExpression>),
1783        #[prost(message, tag = "43")]
1784        CountDuplicates(super::NumericCountDuplicatesExpression),
1785        #[prost(message, tag = "44")]
1786        ModuleFunction(super::ModuleFunctionExpression),
1787        #[prost(message, tag = "45")]
1788        CategoricalMapping(
1789            ::prost::alloc::boxed::Box<super::NumericCategoricalMappingExpression>,
1790        ),
1791        #[prost(message, tag = "46")]
1792        StructField(::prost::alloc::boxed::Box<super::NumericStructFieldExpression>),
1793        #[prost(message, tag = "47")]
1794        RangeFilter(::prost::alloc::boxed::Box<super::NumericRangeFilterExpression>),
1795        #[prost(message, tag = "48")]
1796        GroupWithinRanges(
1797            ::prost::alloc::boxed::Box<super::NumericGroupWithinRangesExpression>,
1798        ),
1799        #[prost(message, tag = "49")]
1800        Aggregation(::prost::alloc::boxed::Box<super::NumericAggregationExpression>),
1801        #[prost(message, tag = "50")]
1802        RangeDuration(::prost::alloc::boxed::Box<super::NumericRangeDurationExpression>),
1803        #[prost(message, tag = "51")]
1804        ScalarUdf(super::ScalarUdfExpression),
1805        #[prost(message, tag = "52")]
1806        ArrayIndex(::prost::alloc::boxed::Box<super::NumericArrayIndexExpression>),
1807        #[prost(message, tag = "53")]
1808        SeriesSelection(::prost::alloc::boxed::Box<super::SeriesSelection>),
1809        #[prost(message, tag = "54")]
1810        ResourceProperty(::prost::alloc::boxed::Box<super::ResourcePropertySelection>),
1811        #[prost(message, tag = "55")]
1812        IntervalTags(::prost::alloc::boxed::Box<super::NumericIntervalTagsExpression>),
1813        #[prost(message, tag = "56")]
1814        TimeDifference(
1815            ::prost::alloc::boxed::Box<super::NumericTimeDifferenceExpression>,
1816        ),
1817    }
1818}
1819#[derive(Clone, PartialEq, ::prost::Message)]
1820pub struct ComputeContext {
1821    #[prost(map = "string, message", tag = "1")]
1822    pub variables: ::std::collections::HashMap<
1823        ::prost::alloc::string::String,
1824        VariableValue,
1825    >,
1826    #[prost(map = "string, message", tag = "2")]
1827    pub datasets: ::std::collections::HashMap<
1828        ::prost::alloc::string::String,
1829        DatasetExpression,
1830    >,
1831    #[prost(message, optional, tag = "3")]
1832    pub default_fill: ::core::option::Option<ComputeFillStrategy>,
1833    #[prost(enumeration = "ComputeAlignmentStrategy", optional, tag = "4")]
1834    pub default_alignment: ::core::option::Option<i32>,
1835    #[prost(bool, optional, tag = "5")]
1836    pub apply_data_scope_offsets: ::core::option::Option<bool>,
1837    #[prost(bool, optional, tag = "6")]
1838    pub resolve_assets_through_datasets: ::core::option::Option<bool>,
1839}
1840#[derive(Clone, PartialEq, ::prost::Message)]
1841pub struct ComputeFillStrategy {
1842    #[prost(oneof = "compute_fill_strategy::Kind", tags = "1")]
1843    pub kind: ::core::option::Option<compute_fill_strategy::Kind>,
1844}
1845/// Nested message and enum types in `ComputeFillStrategy`.
1846pub mod compute_fill_strategy {
1847    #[derive(Clone, PartialEq, ::prost::Oneof)]
1848    pub enum Kind {
1849        #[prost(message, tag = "1")]
1850        ForwardFill(super::DurationConstant),
1851    }
1852}
1853#[derive(Clone, PartialEq, ::prost::Message)]
1854pub struct VariableValue {
1855    #[prost(oneof = "variable_value::Kind", tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10")]
1856    pub kind: ::core::option::Option<variable_value::Kind>,
1857}
1858/// Nested message and enum types in `VariableValue`.
1859pub mod variable_value {
1860    #[derive(Clone, PartialEq, ::prost::Oneof)]
1861    pub enum Kind {
1862        #[prost(double, tag = "1")]
1863        DoubleValue(f64),
1864        #[prost(int32, tag = "2")]
1865        IntegerValue(i32),
1866        #[prost(string, tag = "3")]
1867        StringValue(::prost::alloc::string::String),
1868        #[prost(message, tag = "4")]
1869        StringSet(super::StringSetLiteral),
1870        #[prost(message, tag = "5")]
1871        Duration(super::ComputeDuration),
1872        #[prost(message, tag = "6")]
1873        Timestamp(super::ComputeTimestamp),
1874        #[prost(message, tag = "7")]
1875        Expression(super::BoundExpression),
1876        #[prost(message, tag = "8")]
1877        Channel(super::ChannelSelection),
1878        #[prost(message, tag = "9")]
1879        Series(super::SeriesBinding),
1880        #[prost(message, tag = "10")]
1881        ModuleFunction(super::ModuleFunctionExpression),
1882    }
1883}
1884#[derive(Clone, PartialEq, ::prost::Message)]
1885pub struct BoundExpression {
1886    #[prost(message, optional, tag = "1")]
1887    pub expression: ::core::option::Option<ExpressionNode>,
1888    #[prost(message, optional, tag = "2")]
1889    pub context: ::core::option::Option<ComputeContext>,
1890}
1891#[derive(Clone, PartialEq, ::prost::Message)]
1892pub struct SeriesBinding {
1893    #[prost(message, optional, tag = "1")]
1894    pub series_selection: ::core::option::Option<SeriesSelection>,
1895    #[prost(message, optional, tag = "2")]
1896    pub grouping_keys: ::core::option::Option<TagKeySet>,
1897}
1898#[derive(Clone, PartialEq, ::prost::Message)]
1899pub struct ModuleFunctionExpression {
1900    #[prost(message, optional, tag = "1")]
1901    pub module: ::core::option::Option<StringConstant>,
1902    #[prost(message, optional, tag = "2")]
1903    pub function_name: ::core::option::Option<StringConstant>,
1904    #[prost(message, optional, tag = "3")]
1905    pub version: ::core::option::Option<StringConstant>,
1906    #[prost(map = "string, message", tag = "4")]
1907    pub arguments: ::std::collections::HashMap<
1908        ::prost::alloc::string::String,
1909        FunctionArgument,
1910    >,
1911}
1912#[derive(Clone, PartialEq, ::prost::Message)]
1913pub struct FunctionArgument {
1914    #[prost(oneof = "function_argument::Kind", tags = "1, 2")]
1915    pub kind: ::core::option::Option<function_argument::Kind>,
1916}
1917/// Nested message and enum types in `FunctionArgument`.
1918pub mod function_argument {
1919    #[derive(Clone, PartialEq, ::prost::Oneof)]
1920    pub enum Kind {
1921        #[prost(string, tag = "1")]
1922        VariableName(::prost::alloc::string::String),
1923        #[prost(message, tag = "2")]
1924        Value(super::VariableValue),
1925    }
1926}
1927#[derive(Clone, PartialEq, ::prost::Message)]
1928pub struct DatasetExpression {
1929    #[prost(
1930        oneof = "dataset_expression::Kind",
1931        tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13"
1932    )]
1933    pub kind: ::core::option::Option<dataset_expression::Kind>,
1934}
1935/// Nested message and enum types in `DatasetExpression`.
1936pub mod dataset_expression {
1937    #[derive(Clone, PartialEq, ::prost::Oneof)]
1938    pub enum Kind {
1939        #[prost(message, tag = "1")]
1940        Asset(super::AssetReferenceExpression),
1941        #[prost(message, tag = "2")]
1942        Run(super::RunReferenceExpression),
1943        #[prost(message, tag = "3")]
1944        DataSource(super::DataSourceReferenceExpression),
1945        #[prost(message, tag = "4")]
1946        ResourceSearch(super::DatasetResourceSearch),
1947        #[prost(message, tag = "5")]
1948        Concatenate(super::DatasetConcatenation),
1949        #[prost(message, tag = "6")]
1950        Tag(::prost::alloc::boxed::Box<super::DatasetTagInjection>),
1951        #[prost(message, tag = "7")]
1952        Filter(::prost::alloc::boxed::Box<super::DatasetTagFilter>),
1953        #[prost(message, tag = "8")]
1954        TimeShift(::prost::alloc::boxed::Box<super::DatasetTimeShift>),
1955        #[prost(message, tag = "9")]
1956        AnchorAlignment(::prost::alloc::boxed::Box<super::DatasetAnchorAlignment>),
1957        #[prost(message, tag = "10")]
1958        AddSeries(::prost::alloc::boxed::Box<super::DatasetSeriesAddition>),
1959        #[prost(message, tag = "11")]
1960        RemoveSeries(::prost::alloc::boxed::Box<super::DatasetSeriesRemoval>),
1961        #[prost(message, tag = "12")]
1962        Reference(super::DatasetReference),
1963        #[prost(message, tag = "13")]
1964        Dimensions(::prost::alloc::boxed::Box<super::DatasetDimensions>),
1965    }
1966}
1967#[derive(Clone, PartialEq, ::prost::Message)]
1968pub struct DatasetConcatenation {
1969    #[prost(message, repeated, tag = "1")]
1970    pub inputs: ::prost::alloc::vec::Vec<DatasetExpression>,
1971}
1972#[derive(Clone, PartialEq, ::prost::Message)]
1973pub struct DatasetTagInjection {
1974    #[prost(message, optional, boxed, tag = "1")]
1975    pub input: ::core::option::Option<::prost::alloc::boxed::Box<DatasetExpression>>,
1976    #[prost(message, optional, tag = "2")]
1977    pub key: ::core::option::Option<StringConstant>,
1978    #[prost(message, optional, tag = "3")]
1979    pub value: ::core::option::Option<StringConstant>,
1980}
1981#[derive(Clone, PartialEq, ::prost::Message)]
1982pub struct DatasetTagFilter {
1983    #[prost(message, optional, boxed, tag = "1")]
1984    pub input: ::core::option::Option<::prost::alloc::boxed::Box<DatasetExpression>>,
1985    #[prost(message, optional, tag = "2")]
1986    pub predicate: ::core::option::Option<TagPredicateExpression>,
1987}
1988#[derive(Clone, PartialEq, ::prost::Message)]
1989pub struct DatasetTimeShift {
1990    #[prost(message, optional, boxed, tag = "1")]
1991    pub input: ::core::option::Option<::prost::alloc::boxed::Box<DatasetExpression>>,
1992    #[prost(message, optional, tag = "2")]
1993    pub offset: ::core::option::Option<DurationExpression>,
1994}
1995#[derive(Clone, PartialEq, ::prost::Message)]
1996pub struct DatasetSeriesAddition {
1997    #[prost(message, optional, boxed, tag = "1")]
1998    pub input: ::core::option::Option<::prost::alloc::boxed::Box<DatasetExpression>>,
1999    #[prost(message, repeated, tag = "2")]
2000    pub series: ::prost::alloc::vec::Vec<NamedSeriesExpression>,
2001}
2002#[derive(Clone, PartialEq, ::prost::Message)]
2003pub struct NamedSeriesExpression {
2004    #[prost(message, optional, tag = "1")]
2005    pub name: ::core::option::Option<StringConstant>,
2006    #[prost(message, optional, tag = "2")]
2007    pub definition: ::core::option::Option<SeriesExpression>,
2008}
2009#[derive(Clone, PartialEq, ::prost::Message)]
2010pub struct DatasetSeriesRemoval {
2011    #[prost(message, optional, boxed, tag = "1")]
2012    pub input: ::core::option::Option<::prost::alloc::boxed::Box<DatasetExpression>>,
2013    #[prost(message, repeated, tag = "2")]
2014    pub names: ::prost::alloc::vec::Vec<StringConstant>,
2015}
2016#[derive(Clone, PartialEq, ::prost::Message)]
2017pub struct DatasetDimensions {
2018    #[prost(message, optional, boxed, tag = "1")]
2019    pub input: ::core::option::Option<::prost::alloc::boxed::Box<DatasetExpression>>,
2020    #[prost(message, repeated, tag = "2")]
2021    pub dimensions: ::prost::alloc::vec::Vec<ResourceDimension>,
2022}
2023#[derive(Clone, PartialEq, ::prost::Message)]
2024pub struct ResourceDimension {
2025    #[prost(message, optional, tag = "1")]
2026    pub tag_key: ::core::option::Option<StringConstant>,
2027    #[prost(oneof = "resource_dimension::Value", tags = "2, 3")]
2028    pub value: ::core::option::Option<resource_dimension::Value>,
2029}
2030/// Nested message and enum types in `ResourceDimension`.
2031pub mod resource_dimension {
2032    #[derive(Clone, PartialEq, ::prost::Oneof)]
2033    pub enum Value {
2034        #[prost(message, tag = "2")]
2035        StringProperty(super::StringConstant),
2036        #[prost(message, tag = "3")]
2037        Identity(super::ResourceTypeReferenceExpression),
2038    }
2039}
2040#[derive(Clone, PartialEq, ::prost::Message)]
2041pub struct SeriesSelection {
2042    #[prost(message, optional, tag = "1")]
2043    pub name: ::core::option::Option<StringConstant>,
2044    #[prost(message, optional, boxed, tag = "2")]
2045    pub dataset: ::core::option::Option<::prost::alloc::boxed::Box<DatasetExpression>>,
2046    #[prost(message, optional, tag = "3")]
2047    pub sampling: ::core::option::Option<SeriesSampling>,
2048    #[prost(enumeration = "SeriesStorageEngine", optional, tag = "4")]
2049    pub storage: ::core::option::Option<i32>,
2050}
2051#[derive(Clone, PartialEq, ::prost::Message)]
2052pub struct ResourcePropertySelection {
2053    #[prost(string, tag = "1")]
2054    pub property: ::prost::alloc::string::String,
2055    #[prost(message, optional, boxed, tag = "2")]
2056    pub dataset: ::core::option::Option<::prost::alloc::boxed::Box<DatasetExpression>>,
2057}
2058#[derive(Clone, PartialEq, ::prost::Message)]
2059pub struct ExpressionNode {
2060    #[prost(oneof = "expression_node::Kind", tags = "1, 2, 3, 4, 5, 6, 7, 8, 9")]
2061    pub kind: ::core::option::Option<expression_node::Kind>,
2062}
2063/// Nested message and enum types in `ExpressionNode`.
2064pub mod expression_node {
2065    #[derive(Clone, PartialEq, ::prost::Oneof)]
2066    pub enum Kind {
2067        #[prost(message, tag = "1")]
2068        Numeric(super::NumericExpression),
2069        #[prost(message, tag = "2")]
2070        Categorical(super::CategoricalExpression),
2071        #[prost(message, tag = "3")]
2072        Log(super::LogExpression),
2073        #[prost(message, tag = "4")]
2074        Ranges(super::RangeExpression),
2075        #[prost(message, tag = "5")]
2076        Array(super::ArrayExpression),
2077        #[prost(message, tag = "6")]
2078        Structure(super::StructExpression),
2079        #[prost(message, tag = "7")]
2080        CurveFit(super::CurveFitExpression),
2081        #[prost(message, tag = "8")]
2082        Video(super::TimeSeriesReference),
2083        #[prost(message, tag = "9")]
2084        Reference(super::TimeSeriesReference),
2085    }
2086}
2087#[derive(Clone, PartialEq, ::prost::Message)]
2088pub struct SeriesExpression {
2089    #[prost(oneof = "series_expression::Kind", tags = "1, 2, 3, 4, 5, 6, 7")]
2090    pub kind: ::core::option::Option<series_expression::Kind>,
2091}
2092/// Nested message and enum types in `SeriesExpression`.
2093pub mod series_expression {
2094    #[derive(Clone, PartialEq, ::prost::Oneof)]
2095    pub enum Kind {
2096        #[prost(message, tag = "1")]
2097        Numeric(::prost::alloc::boxed::Box<super::NumericExpression>),
2098        #[prost(message, tag = "2")]
2099        Categorical(::prost::alloc::boxed::Box<super::CategoricalExpression>),
2100        #[prost(message, tag = "3")]
2101        Log(::prost::alloc::boxed::Box<super::LogExpression>),
2102        #[prost(message, tag = "4")]
2103        Array(::prost::alloc::boxed::Box<super::ArrayExpression>),
2104        #[prost(message, tag = "5")]
2105        Structure(::prost::alloc::boxed::Box<super::StructExpression>),
2106        #[prost(message, tag = "6")]
2107        Video(super::TimeSeriesReference),
2108        #[prost(message, tag = "7")]
2109        Reference(super::TimeSeriesReference),
2110    }
2111}
2112#[derive(Clone, PartialEq, ::prost::Message)]
2113pub struct ArrayExpression {
2114    #[prost(oneof = "array_expression::Kind", tags = "1, 2")]
2115    pub kind: ::core::option::Option<array_expression::Kind>,
2116}
2117/// Nested message and enum types in `ArrayExpression`.
2118pub mod array_expression {
2119    #[derive(Clone, PartialEq, ::prost::Oneof)]
2120    pub enum Kind {
2121        #[prost(message, tag = "1")]
2122        Numeric(::prost::alloc::boxed::Box<super::NumericArrayExpression>),
2123        #[prost(message, tag = "2")]
2124        Categorical(::prost::alloc::boxed::Box<super::CategoricalArrayExpression>),
2125    }
2126}
2127#[derive(Clone, PartialEq, ::prost::Message)]
2128pub struct CurveFitExpression {
2129    #[prost(message, optional, tag = "1")]
2130    pub target: ::core::option::Option<CurveSeriesVariable>,
2131    #[prost(message, optional, tag = "2")]
2132    pub interval: ::core::option::Option<CurveFitInterval>,
2133    #[prost(message, optional, tag = "3")]
2134    pub model: ::core::option::Option<CurveModel>,
2135}
2136#[derive(Clone, PartialEq, ::prost::Message)]
2137pub struct CurveFitInterval {
2138    #[prost(message, optional, tag = "1")]
2139    pub start: ::core::option::Option<TimestampConstant>,
2140    #[prost(message, optional, tag = "2")]
2141    pub end: ::core::option::Option<TimestampConstant>,
2142}
2143#[derive(Clone, PartialEq, ::prost::Message)]
2144pub struct CurveSeriesVariable {
2145    #[prost(message, optional, tag = "1")]
2146    pub series: ::core::option::Option<NumericExpression>,
2147    #[prost(message, optional, tag = "2")]
2148    pub bounds: ::core::option::Option<CurveVariableBounds>,
2149}
2150#[derive(Clone, PartialEq, ::prost::Message)]
2151pub struct CurveVariableBounds {
2152    #[prost(message, optional, tag = "1")]
2153    pub min: ::core::option::Option<DoubleConstant>,
2154    #[prost(message, optional, tag = "2")]
2155    pub max: ::core::option::Option<DoubleConstant>,
2156}
2157#[derive(Clone, PartialEq, ::prost::Message)]
2158pub struct CurveVariable {
2159    #[prost(oneof = "curve_variable::Kind", tags = "1, 2")]
2160    pub kind: ::core::option::Option<curve_variable::Kind>,
2161}
2162/// Nested message and enum types in `CurveVariable`.
2163pub mod curve_variable {
2164    #[derive(Clone, PartialEq, ::prost::Oneof)]
2165    pub enum Kind {
2166        #[prost(message, tag = "1")]
2167        Series(super::CurveSeriesVariable),
2168        #[prost(message, tag = "2")]
2169        Time(super::CurveTimeVariable),
2170    }
2171}
2172#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2173pub struct CurveTimeVariable {
2174    #[prost(enumeration = "super::super::types::time::TimeUnit", optional, tag = "1")]
2175    pub unit: ::core::option::Option<i32>,
2176}
2177#[derive(Clone, PartialEq, ::prost::Message)]
2178pub struct CurveModel {
2179    #[prost(oneof = "curve_model::Kind", tags = "1, 2, 3")]
2180    pub kind: ::core::option::Option<curve_model::Kind>,
2181}
2182/// Nested message and enum types in `CurveModel`.
2183pub mod curve_model {
2184    #[derive(Clone, PartialEq, ::prost::Oneof)]
2185    pub enum Kind {
2186        #[prost(message, tag = "1")]
2187        Builtin(super::BuiltinCurveModel),
2188        #[prost(message, tag = "2")]
2189        Polynomial(super::PolynomialCurveModel),
2190        #[prost(message, tag = "3")]
2191        Custom(super::CustomCurveModel),
2192    }
2193}
2194#[derive(Clone, PartialEq, ::prost::Message)]
2195pub struct BuiltinCurveModel {
2196    #[prost(enumeration = "BuiltinCurveForm", tag = "1")]
2197    pub form: i32,
2198    #[prost(message, optional, tag = "2")]
2199    pub independent_variable: ::core::option::Option<CurveVariable>,
2200}
2201#[derive(Clone, PartialEq, ::prost::Message)]
2202pub struct PolynomialCurveModel {
2203    #[prost(message, optional, tag = "1")]
2204    pub independent_variable: ::core::option::Option<CurveVariable>,
2205    #[prost(message, optional, tag = "2")]
2206    pub degree: ::core::option::Option<IntegerConstant>,
2207    #[prost(message, optional, tag = "3")]
2208    pub intercept: ::core::option::Option<DoubleConstant>,
2209}
2210#[derive(Clone, PartialEq, ::prost::Message)]
2211pub struct CustomCurveModel {
2212    #[prost(message, optional, tag = "1")]
2213    pub formula: ::core::option::Option<StringConstant>,
2214    #[prost(map = "string, message", tag = "2")]
2215    pub variables: ::std::collections::HashMap<
2216        ::prost::alloc::string::String,
2217        CurveVariable,
2218    >,
2219    #[prost(map = "string, message", tag = "3")]
2220    pub parameters: ::std::collections::HashMap<
2221        ::prost::alloc::string::String,
2222        DoubleConstant,
2223    >,
2224}
2225#[derive(Clone, PartialEq, ::prost::Message)]
2226pub struct NumericAbsoluteTimestampExpression {
2227    #[prost(message, optional, boxed, tag = "1")]
2228    pub input: ::core::option::Option<::prost::alloc::boxed::Box<SeriesExpression>>,
2229    #[prost(enumeration = "super::super::types::time::TimeUnit", tag = "2")]
2230    pub unit: i32,
2231}
2232#[derive(Clone, PartialEq, ::prost::Message)]
2233pub struct NumericTimeDifferenceExpression {
2234    #[prost(message, optional, boxed, tag = "1")]
2235    pub input: ::core::option::Option<::prost::alloc::boxed::Box<SeriesExpression>>,
2236    #[prost(enumeration = "super::super::types::time::TimeUnit", optional, tag = "2")]
2237    pub unit: ::core::option::Option<i32>,
2238}
2239#[derive(Clone, PartialEq, ::prost::Message)]
2240pub struct NumericReduceUnderRangesExpression {
2241    #[prost(message, optional, boxed, tag = "1")]
2242    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2243    #[prost(message, optional, boxed, tag = "2")]
2244    pub ranges: ::core::option::Option<::prost::alloc::boxed::Box<RangeExpression>>,
2245    #[prost(message, optional, tag = "3")]
2246    pub reduction: ::core::option::Option<NumericReduction>,
2247}
2248#[derive(Clone, PartialEq, ::prost::Message)]
2249pub struct NumericLogMatchesExpression {
2250    #[prost(message, optional, boxed, tag = "1")]
2251    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogExpression>>,
2252    #[prost(message, optional, tag = "2")]
2253    pub predicate: ::core::option::Option<LogPredicate>,
2254}
2255#[derive(Clone, PartialEq, ::prost::Message)]
2256pub struct NumericCountDuplicatesExpression {
2257    #[prost(message, repeated, tag = "1")]
2258    pub inputs: ::prost::alloc::vec::Vec<CategoricalExpression>,
2259}
2260#[derive(Clone, PartialEq, ::prost::Message)]
2261pub struct NumericCategoricalMappingExpression {
2262    #[prost(message, optional, boxed, tag = "1")]
2263    pub input: ::core::option::Option<::prost::alloc::boxed::Box<CategoricalExpression>>,
2264    #[prost(map = "string, message", tag = "2")]
2265    pub mapping: ::std::collections::HashMap<
2266        ::prost::alloc::string::String,
2267        DoubleConstant,
2268    >,
2269    #[prost(message, optional, tag = "3")]
2270    pub default_value: ::core::option::Option<DoubleConstant>,
2271}
2272#[derive(Clone, PartialEq, ::prost::Message)]
2273pub struct NumericStructFieldExpression {
2274    #[prost(message, optional, boxed, tag = "1")]
2275    pub input: ::core::option::Option<::prost::alloc::boxed::Box<StructExpression>>,
2276    #[prost(message, repeated, tag = "2")]
2277    pub path: ::prost::alloc::vec::Vec<StringConstant>,
2278    #[prost(
2279        enumeration = "super::super::types::series::SeriesDataType",
2280        optional,
2281        tag = "3"
2282    )]
2283    pub numeric_type: ::core::option::Option<i32>,
2284}
2285#[derive(Clone, PartialEq, ::prost::Message)]
2286pub struct NumericRangeFilterExpression {
2287    #[prost(message, optional, boxed, tag = "1")]
2288    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2289    #[prost(message, optional, boxed, tag = "2")]
2290    pub ranges: ::core::option::Option<::prost::alloc::boxed::Box<RangeExpression>>,
2291}
2292#[derive(Clone, PartialEq, ::prost::Message)]
2293pub struct NumericGroupWithinRangesExpression {
2294    #[prost(message, optional, boxed, tag = "1")]
2295    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2296    #[prost(message, optional, boxed, tag = "2")]
2297    pub ranges: ::core::option::Option<::prost::alloc::boxed::Box<RangeExpression>>,
2298    #[prost(message, optional, tag = "3")]
2299    pub reduction: ::core::option::Option<NumericReduction>,
2300}
2301#[derive(Clone, PartialEq, ::prost::Message)]
2302pub struct NumericAggregationExpression {
2303    #[prost(message, optional, boxed, tag = "1")]
2304    pub input: ::core::option::Option<::prost::alloc::boxed::Box<AggregationInput>>,
2305    #[prost(message, optional, tag = "2")]
2306    pub reduction: ::core::option::Option<NumericReduction>,
2307}
2308#[derive(Clone, PartialEq, ::prost::Message)]
2309pub struct AggregationInput {
2310    #[prost(oneof = "aggregation_input::Kind", tags = "1, 2, 3")]
2311    pub kind: ::core::option::Option<aggregation_input::Kind>,
2312}
2313/// Nested message and enum types in `AggregationInput`.
2314pub mod aggregation_input {
2315    #[derive(Clone, PartialEq, ::prost::Oneof)]
2316    pub enum Kind {
2317        #[prost(message, tag = "1")]
2318        TimeWindow(::prost::alloc::boxed::Box<super::TimeWindowAggregation>),
2319        #[prost(message, tag = "2")]
2320        PointWindow(::prost::alloc::boxed::Box<super::PointWindowAggregation>),
2321        #[prost(message, tag = "3")]
2322        Grouping(::prost::alloc::boxed::Box<super::GroupedSeriesAggregation>),
2323    }
2324}
2325#[derive(Clone, PartialEq, ::prost::Message)]
2326pub struct TimeWindowAggregation {
2327    #[prost(message, optional, boxed, tag = "1")]
2328    pub input: ::core::option::Option<::prost::alloc::boxed::Box<SeriesExpression>>,
2329    #[prost(message, optional, tag = "2")]
2330    pub window: ::core::option::Option<DurationExpression>,
2331}
2332#[derive(Clone, PartialEq, ::prost::Message)]
2333pub struct PointWindowAggregation {
2334    #[prost(message, optional, boxed, tag = "1")]
2335    pub input: ::core::option::Option<::prost::alloc::boxed::Box<SeriesExpression>>,
2336    #[prost(message, optional, tag = "2")]
2337    pub points: ::core::option::Option<IntegerConstant>,
2338}
2339#[derive(Clone, PartialEq, ::prost::Message)]
2340pub struct GroupedSeriesAggregation {
2341    #[prost(message, optional, boxed, tag = "1")]
2342    pub input: ::core::option::Option<::prost::alloc::boxed::Box<SeriesExpression>>,
2343    #[prost(message, optional, tag = "2")]
2344    pub keys: ::core::option::Option<AggregationGroupingKeys>,
2345    #[prost(message, optional, tag = "3")]
2346    pub timestamp: ::core::option::Option<AggregationTimestamp>,
2347    #[prost(bool, tag = "4")]
2348    pub use_context_alignment: bool,
2349}
2350#[derive(Clone, PartialEq, ::prost::Message)]
2351pub struct AggregationGroupingKeys {
2352    #[prost(oneof = "aggregation_grouping_keys::Kind", tags = "1, 2")]
2353    pub kind: ::core::option::Option<aggregation_grouping_keys::Kind>,
2354}
2355/// Nested message and enum types in `AggregationGroupingKeys`.
2356pub mod aggregation_grouping_keys {
2357    #[derive(Clone, PartialEq, ::prost::Oneof)]
2358    pub enum Kind {
2359        #[prost(message, tag = "1")]
2360        Current(super::CurrentGroupingKeys),
2361        #[prost(message, tag = "2")]
2362        Subset(super::TagKeySet),
2363    }
2364}
2365#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2366pub struct CurrentGroupingKeys {}
2367#[derive(Clone, PartialEq, ::prost::Message)]
2368pub struct AggregationTimestamp {
2369    #[prost(oneof = "aggregation_timestamp::Kind", tags = "1, 2")]
2370    pub kind: ::core::option::Option<aggregation_timestamp::Kind>,
2371}
2372/// Nested message and enum types in `AggregationTimestamp`.
2373pub mod aggregation_timestamp {
2374    #[derive(Clone, PartialEq, ::prost::Oneof)]
2375    pub enum Kind {
2376        #[prost(message, tag = "1")]
2377        Current(super::CurrentTimestamps),
2378        #[prost(message, tag = "2")]
2379        Every(super::DurationExpression),
2380    }
2381}
2382#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2383pub struct CurrentTimestamps {}
2384#[derive(Clone, PartialEq, ::prost::Message)]
2385pub struct NumericRangeDurationExpression {
2386    #[prost(message, optional, boxed, tag = "1")]
2387    pub input: ::core::option::Option<::prost::alloc::boxed::Box<RangeExpression>>,
2388    #[prost(enumeration = "UnboundedRangePolicy", tag = "2")]
2389    pub unbounded: i32,
2390    #[prost(enumeration = "super::super::types::time::TimeUnit", optional, tag = "3")]
2391    pub unit: ::core::option::Option<i32>,
2392}
2393#[derive(Clone, PartialEq, ::prost::Message)]
2394pub struct ScalarUdfExpression {
2395    #[prost(message, repeated, tag = "1")]
2396    pub inputs: ::prost::alloc::vec::Vec<SeriesExpression>,
2397    #[prost(message, optional, tag = "2")]
2398    pub source: ::core::option::Option<super::super::modules::v1::UdfSource>,
2399}
2400#[derive(Clone, PartialEq, ::prost::Message)]
2401pub struct NumericArrayIndexExpression {
2402    #[prost(message, optional, boxed, tag = "1")]
2403    pub input: ::core::option::Option<
2404        ::prost::alloc::boxed::Box<NumericArrayExpression>,
2405    >,
2406    #[prost(message, optional, tag = "2")]
2407    pub index: ::core::option::Option<IntegerConstant>,
2408}
2409#[derive(Clone, PartialEq, ::prost::Message)]
2410pub struct NumericIntervalTagsExpression {
2411    #[prost(message, optional, boxed, tag = "1")]
2412    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2413    #[prost(message, optional, boxed, tag = "2")]
2414    pub intervals: ::core::option::Option<
2415        ::prost::alloc::boxed::Box<IntervalSourceExpression>,
2416    >,
2417    #[prost(message, optional, tag = "3")]
2418    pub time_shift: ::core::option::Option<IntervalTimeShift>,
2419}
2420#[derive(Clone, PartialEq, ::prost::Message)]
2421pub struct IntervalSourceExpression {
2422    #[prost(oneof = "interval_source_expression::Kind", tags = "1, 2")]
2423    pub kind: ::core::option::Option<interval_source_expression::Kind>,
2424}
2425/// Nested message and enum types in `IntervalSourceExpression`.
2426pub mod interval_source_expression {
2427    #[derive(Clone, PartialEq, ::prost::Oneof)]
2428    pub enum Kind {
2429        #[prost(message, tag = "1")]
2430        Events(super::EventIntervals),
2431        #[prost(message, tag = "2")]
2432        Ranges(::prost::alloc::boxed::Box<super::RangeIntervals>),
2433    }
2434}
2435#[derive(Clone, PartialEq, ::prost::Message)]
2436pub struct EventIntervals {
2437    #[prost(message, optional, tag = "1")]
2438    pub query: ::core::option::Option<EventPredicateExpression>,
2439    #[prost(message, repeated, tag = "2")]
2440    pub tags: ::prost::alloc::vec::Vec<EventIntervalTag>,
2441}
2442#[derive(Clone, PartialEq, ::prost::Message)]
2443pub struct RangeIntervals {
2444    #[prost(message, optional, boxed, tag = "1")]
2445    pub input: ::core::option::Option<::prost::alloc::boxed::Box<RangeExpression>>,
2446    #[prost(message, repeated, tag = "2")]
2447    pub tags: ::prost::alloc::vec::Vec<RangeIntervalTag>,
2448}
2449#[derive(Clone, PartialEq, ::prost::Message)]
2450pub struct EventIntervalTag {
2451    #[prost(oneof = "event_interval_tag::Kind", tags = "1, 2, 3, 4, 5")]
2452    pub kind: ::core::option::Option<event_interval_tag::Kind>,
2453}
2454/// Nested message and enum types in `EventIntervalTag`.
2455pub mod event_interval_tag {
2456    #[derive(Clone, PartialEq, ::prost::Oneof)]
2457    pub enum Kind {
2458        #[prost(message, tag = "1")]
2459        IntervalIndex(super::IntervalIndexTag),
2460        #[prost(message, tag = "2")]
2461        IntervalStart(super::IntervalStartTag),
2462        #[prost(message, tag = "3")]
2463        EventLevel(super::EventLevelTag),
2464        #[prost(message, tag = "4")]
2465        EventProperty(super::StringConstant),
2466        #[prost(message, tag = "5")]
2467        EventLabel(super::StringConstant),
2468    }
2469}
2470#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2471pub struct RangeIntervalTag {
2472    #[prost(oneof = "range_interval_tag::Kind", tags = "1, 2")]
2473    pub kind: ::core::option::Option<range_interval_tag::Kind>,
2474}
2475/// Nested message and enum types in `RangeIntervalTag`.
2476pub mod range_interval_tag {
2477    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
2478    pub enum Kind {
2479        #[prost(message, tag = "1")]
2480        IntervalIndex(super::IntervalIndexTag),
2481        #[prost(message, tag = "2")]
2482        IntervalStart(super::IntervalStartTag),
2483    }
2484}
2485#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2486pub struct IntervalIndexTag {}
2487#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2488pub struct IntervalStartTag {}
2489#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2490pub struct EventLevelTag {}
2491#[derive(Clone, PartialEq, ::prost::Message)]
2492pub struct IntervalTimeShift {
2493    #[prost(oneof = "interval_time_shift::Kind", tags = "1, 2, 3")]
2494    pub kind: ::core::option::Option<interval_time_shift::Kind>,
2495}
2496/// Nested message and enum types in `IntervalTimeShift`.
2497pub mod interval_time_shift {
2498    #[derive(Clone, PartialEq, ::prost::Oneof)]
2499    pub enum Kind {
2500        #[prost(message, tag = "1")]
2501        IntervalStart(super::IntervalStartAnchor),
2502        #[prost(message, tag = "2")]
2503        IntervalEnd(super::IntervalEndAnchor),
2504        #[prost(message, tag = "3")]
2505        Event(super::EventOrdinalSelection),
2506    }
2507}
2508#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2509pub struct IntervalStartAnchor {}
2510#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2511pub struct IntervalEndAnchor {}
2512#[derive(Clone, PartialEq, ::prost::Message)]
2513pub struct EventOrdinalSelection {
2514    #[prost(message, optional, tag = "1")]
2515    pub query: ::core::option::Option<EventPredicateExpression>,
2516    #[prost(message, optional, tag = "2")]
2517    pub index: ::core::option::Option<IntegerConstant>,
2518    #[prost(enumeration = "ChronologicalOrder", optional, tag = "3")]
2519    pub order: ::core::option::Option<i32>,
2520}
2521#[derive(Clone, PartialEq, ::prost::Message)]
2522pub struct RangeOrdinalSelection {
2523    #[prost(message, optional, boxed, tag = "1")]
2524    pub input: ::core::option::Option<::prost::alloc::boxed::Box<RangeExpression>>,
2525    #[prost(message, optional, tag = "2")]
2526    pub index: ::core::option::Option<IntegerConstant>,
2527    #[prost(enumeration = "ChronologicalOrder", optional, tag = "3")]
2528    pub order: ::core::option::Option<i32>,
2529}
2530#[derive(Clone, PartialEq, ::prost::Message)]
2531pub struct RunAnchorExpression {
2532    #[prost(oneof = "run_anchor_expression::Kind", tags = "1, 2, 3, 4")]
2533    pub kind: ::core::option::Option<run_anchor_expression::Kind>,
2534}
2535/// Nested message and enum types in `RunAnchorExpression`.
2536pub mod run_anchor_expression {
2537    #[derive(Clone, PartialEq, ::prost::Oneof)]
2538    pub enum Kind {
2539        #[prost(message, tag = "1")]
2540        IntervalStart(super::IntervalStartAnchor),
2541        #[prost(message, tag = "2")]
2542        IntervalEnd(super::IntervalEndAnchor),
2543        #[prost(message, tag = "3")]
2544        Event(super::EventOrdinalSelection),
2545        #[prost(message, tag = "4")]
2546        Ranges(::prost::alloc::boxed::Box<super::RangeOrdinalSelection>),
2547    }
2548}
2549#[derive(Clone, PartialEq, ::prost::Message)]
2550pub struct DatasetAnchorAlignment {
2551    #[prost(message, optional, boxed, tag = "1")]
2552    pub input: ::core::option::Option<::prost::alloc::boxed::Box<DatasetExpression>>,
2553    #[prost(message, optional, boxed, tag = "2")]
2554    pub anchor: ::core::option::Option<::prost::alloc::boxed::Box<RunAnchorExpression>>,
2555    #[prost(bool, tag = "3")]
2556    pub align_to_earliest: bool,
2557}
2558#[derive(Clone, PartialEq, ::prost::Message)]
2559pub struct CategoricalExpression {
2560    #[prost(
2561        oneof = "categorical_expression::Kind",
2562        tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23"
2563    )]
2564    pub kind: ::core::option::Option<categorical_expression::Kind>,
2565}
2566/// Nested message and enum types in `CategoricalExpression`.
2567pub mod categorical_expression {
2568    #[derive(Clone, PartialEq, ::prost::Oneof)]
2569    pub enum Kind {
2570        #[prost(message, tag = "1")]
2571        Reference(super::TimeSeriesReference),
2572        #[prost(message, tag = "2")]
2573        ChannelSelection(super::ChannelSelection),
2574        #[prost(message, tag = "3")]
2575        ModuleFunction(super::ModuleFunctionExpression),
2576        #[prost(message, tag = "4")]
2577        SeriesSelection(::prost::alloc::boxed::Box<super::SeriesSelection>),
2578        #[prost(message, tag = "5")]
2579        ResourceProperty(::prost::alloc::boxed::Box<super::ResourcePropertySelection>),
2580        #[prost(message, tag = "6")]
2581        DuplicateTimestampAggregation(
2582            ::prost::alloc::boxed::Box<
2583                super::CategoricalDuplicateTimestampAggregationExpression,
2584            >,
2585        ),
2586        #[prost(message, tag = "7")]
2587        Resample(::prost::alloc::boxed::Box<super::CategoricalResampleExpression>),
2588        #[prost(message, tag = "8")]
2589        ResampleV2(::prost::alloc::boxed::Box<super::CategoricalResampleV2Expression>),
2590        #[prost(message, tag = "9")]
2591        NthPointDownsample(
2592            ::prost::alloc::boxed::Box<super::CategoricalNthPointDownsampleExpression>,
2593        ),
2594        #[prost(message, tag = "10")]
2595        TimeRangeFilter(
2596            ::prost::alloc::boxed::Box<super::CategoricalTimeRangeFilterExpression>,
2597        ),
2598        #[prost(message, tag = "11")]
2599        TimeShift(::prost::alloc::boxed::Box<super::CategoricalTimeShiftExpression>),
2600        #[prost(message, tag = "12")]
2601        TimeShiftV2(::prost::alloc::boxed::Box<super::CategoricalTimeShiftV2Expression>),
2602        #[prost(message, tag = "13")]
2603        Union(super::CategoricalUnionExpression),
2604        #[prost(message, tag = "14")]
2605        RangeFilter(::prost::alloc::boxed::Box<super::CategoricalRangeFilterExpression>),
2606        #[prost(message, tag = "15")]
2607        NumericMapping(
2608            ::prost::alloc::boxed::Box<super::CategoricalNumericMappingExpression>,
2609        ),
2610        #[prost(message, tag = "16")]
2611        ArrayIndex(::prost::alloc::boxed::Box<super::CategoricalArrayIndexExpression>),
2612        #[prost(message, tag = "17")]
2613        StructField(::prost::alloc::boxed::Box<super::CategoricalStructFieldExpression>),
2614        #[prost(message, tag = "18")]
2615        Events(super::CategoricalEventsExpression),
2616        #[prost(message, tag = "19")]
2617        Aggregation(::prost::alloc::boxed::Box<super::CategoricalAggregationExpression>),
2618        #[prost(message, tag = "20")]
2619        TagFilter(::prost::alloc::boxed::Box<super::CategoricalTagFilterExpression>),
2620        #[prost(message, tag = "21")]
2621        TagSelection(
2622            ::prost::alloc::boxed::Box<super::CategoricalTagSelectionExpression>,
2623        ),
2624        #[prost(message, tag = "22")]
2625        ScalarUdf(super::ScalarUdfExpression),
2626        #[prost(message, tag = "23")]
2627        ToStartOfInterval(
2628            ::prost::alloc::boxed::Box<super::CategoricalToStartOfIntervalExpression>,
2629        ),
2630    }
2631}
2632#[derive(Clone, PartialEq, ::prost::Message)]
2633pub struct CategoricalDuplicateTimestampAggregationExpression {
2634    #[prost(message, optional, boxed, tag = "1")]
2635    pub input: ::core::option::Option<::prost::alloc::boxed::Box<CategoricalExpression>>,
2636    #[prost(message, optional, tag = "2")]
2637    pub reduction: ::core::option::Option<CategoricalReduction>,
2638}
2639#[derive(Clone, PartialEq, ::prost::Message)]
2640pub struct CategoricalResampleExpression {
2641    #[prost(message, optional, boxed, tag = "1")]
2642    pub input: ::core::option::Option<::prost::alloc::boxed::Box<CategoricalExpression>>,
2643    #[prost(message, optional, tag = "2")]
2644    pub interval: ::core::option::Option<DurationConstant>,
2645    #[prost(message, optional, tag = "3")]
2646    pub fill: ::core::option::Option<CategoricalResampleFill>,
2647}
2648#[derive(Clone, PartialEq, ::prost::Message)]
2649pub struct CategoricalResampleV2Expression {
2650    #[prost(message, optional, boxed, tag = "1")]
2651    pub input: ::core::option::Option<::prost::alloc::boxed::Box<CategoricalExpression>>,
2652    #[prost(message, optional, tag = "2")]
2653    pub interval: ::core::option::Option<DurationExpression>,
2654}
2655#[derive(Clone, PartialEq, ::prost::Message)]
2656pub struct CategoricalNthPointDownsampleExpression {
2657    #[prost(message, optional, boxed, tag = "1")]
2658    pub input: ::core::option::Option<::prost::alloc::boxed::Box<CategoricalExpression>>,
2659    #[prost(message, optional, tag = "2")]
2660    pub every_nth: ::core::option::Option<IntegerConstant>,
2661}
2662#[derive(Clone, PartialEq, ::prost::Message)]
2663pub struct CategoricalTimeRangeFilterExpression {
2664    #[prost(message, optional, boxed, tag = "1")]
2665    pub input: ::core::option::Option<::prost::alloc::boxed::Box<CategoricalExpression>>,
2666    #[prost(message, optional, tag = "2")]
2667    pub start: ::core::option::Option<TimestampConstant>,
2668    #[prost(message, optional, tag = "3")]
2669    pub end: ::core::option::Option<TimestampConstant>,
2670}
2671#[derive(Clone, PartialEq, ::prost::Message)]
2672pub struct CategoricalTimeShiftExpression {
2673    #[prost(message, optional, boxed, tag = "1")]
2674    pub input: ::core::option::Option<::prost::alloc::boxed::Box<CategoricalExpression>>,
2675    #[prost(message, optional, tag = "2")]
2676    pub duration: ::core::option::Option<DurationConstant>,
2677}
2678#[derive(Clone, PartialEq, ::prost::Message)]
2679pub struct CategoricalTimeShiftV2Expression {
2680    #[prost(message, optional, boxed, tag = "1")]
2681    pub input: ::core::option::Option<::prost::alloc::boxed::Box<CategoricalExpression>>,
2682    #[prost(message, optional, tag = "2")]
2683    pub duration: ::core::option::Option<DurationExpression>,
2684}
2685#[derive(Clone, PartialEq, ::prost::Message)]
2686pub struct CategoricalUnionExpression {
2687    #[prost(message, repeated, tag = "1")]
2688    pub inputs: ::prost::alloc::vec::Vec<CategoricalExpression>,
2689    #[prost(enumeration = "CategoricalMergeOperation", tag = "2")]
2690    pub operation: i32,
2691}
2692#[derive(Clone, PartialEq, ::prost::Message)]
2693pub struct CategoricalRangeFilterExpression {
2694    #[prost(message, optional, boxed, tag = "1")]
2695    pub input: ::core::option::Option<::prost::alloc::boxed::Box<CategoricalExpression>>,
2696    #[prost(message, optional, boxed, tag = "2")]
2697    pub ranges: ::core::option::Option<::prost::alloc::boxed::Box<RangeExpression>>,
2698}
2699#[derive(Clone, PartialEq, ::prost::Message)]
2700pub struct CategoricalNumericMappingExpression {
2701    #[prost(message, optional, boxed, tag = "1")]
2702    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2703    #[prost(message, repeated, tag = "2")]
2704    pub mapping: ::prost::alloc::vec::Vec<NumericCategoricalInterval>,
2705    #[prost(message, optional, tag = "3")]
2706    pub default_value: ::core::option::Option<StringConstant>,
2707}
2708#[derive(Clone, PartialEq, ::prost::Message)]
2709pub struct NumericCategoricalInterval {
2710    #[prost(message, optional, tag = "1")]
2711    pub start: ::core::option::Option<DoubleConstant>,
2712    #[prost(message, optional, tag = "2")]
2713    pub end: ::core::option::Option<DoubleConstant>,
2714    #[prost(message, optional, tag = "3")]
2715    pub value: ::core::option::Option<StringConstant>,
2716}
2717#[derive(Clone, PartialEq, ::prost::Message)]
2718pub struct CategoricalArrayIndexExpression {
2719    #[prost(message, optional, boxed, tag = "1")]
2720    pub input: ::core::option::Option<
2721        ::prost::alloc::boxed::Box<CategoricalArrayExpression>,
2722    >,
2723    #[prost(message, optional, tag = "2")]
2724    pub index: ::core::option::Option<IntegerConstant>,
2725}
2726#[derive(Clone, PartialEq, ::prost::Message)]
2727pub struct CategoricalStructFieldExpression {
2728    #[prost(message, optional, boxed, tag = "1")]
2729    pub input: ::core::option::Option<::prost::alloc::boxed::Box<StructExpression>>,
2730    #[prost(message, repeated, tag = "2")]
2731    pub path: ::prost::alloc::vec::Vec<StringConstant>,
2732}
2733#[derive(Clone, PartialEq, ::prost::Message)]
2734pub struct CategoricalEventsExpression {
2735    #[prost(message, optional, tag = "1")]
2736    pub query: ::core::option::Option<EventPredicateExpression>,
2737    #[prost(oneof = "categorical_events_expression::Value", tags = "2, 3")]
2738    pub value: ::core::option::Option<categorical_events_expression::Value>,
2739}
2740/// Nested message and enum types in `CategoricalEventsExpression`.
2741pub mod categorical_events_expression {
2742    #[derive(Clone, PartialEq, ::prost::Oneof)]
2743    pub enum Value {
2744        #[prost(message, tag = "2")]
2745        Property(super::StringConstant),
2746        #[prost(message, tag = "3")]
2747        Level(super::EventLevelValue),
2748    }
2749}
2750#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2751pub struct EventLevelValue {}
2752#[derive(Clone, PartialEq, ::prost::Message)]
2753pub struct CategoricalAggregationExpression {
2754    #[prost(message, optional, boxed, tag = "1")]
2755    pub input: ::core::option::Option<::prost::alloc::boxed::Box<AggregationInput>>,
2756    #[prost(message, optional, tag = "2")]
2757    pub reduction: ::core::option::Option<CategoricalReduction>,
2758}
2759#[derive(Clone, PartialEq, ::prost::Message)]
2760pub struct CategoricalTagFilterExpression {
2761    #[prost(message, optional, boxed, tag = "1")]
2762    pub input: ::core::option::Option<::prost::alloc::boxed::Box<CategoricalExpression>>,
2763    #[prost(message, optional, tag = "2")]
2764    pub predicate: ::core::option::Option<TagPredicateExpression>,
2765}
2766#[derive(Clone, PartialEq, ::prost::Message)]
2767pub struct CategoricalTagSelectionExpression {
2768    #[prost(message, optional, boxed, tag = "1")]
2769    pub input: ::core::option::Option<::prost::alloc::boxed::Box<CategoricalExpression>>,
2770    #[prost(message, optional, tag = "2")]
2771    pub keys: ::core::option::Option<TagKeySet>,
2772}
2773#[derive(Clone, PartialEq, ::prost::Message)]
2774pub struct CategoricalToStartOfIntervalExpression {
2775    #[prost(message, optional, boxed, tag = "1")]
2776    pub input: ::core::option::Option<::prost::alloc::boxed::Box<CategoricalExpression>>,
2777    #[prost(message, optional, tag = "2")]
2778    pub interval: ::core::option::Option<DurationExpression>,
2779}
2780#[derive(Clone, PartialEq, ::prost::Message)]
2781pub struct BooleanExpression {
2782    #[prost(oneof = "boolean_expression::Kind", tags = "1, 2")]
2783    pub kind: ::core::option::Option<boolean_expression::Kind>,
2784}
2785/// Nested message and enum types in `BooleanExpression`.
2786pub mod boolean_expression {
2787    #[derive(Clone, PartialEq, ::prost::Oneof)]
2788    pub enum Kind {
2789        #[prost(message, tag = "1")]
2790        Comparison(::prost::alloc::boxed::Box<super::ComparisonExpression>),
2791        #[prost(message, tag = "2")]
2792        Logical(::prost::alloc::boxed::Box<super::LogicalExpression>),
2793    }
2794}
2795#[derive(Clone, PartialEq, ::prost::Message)]
2796pub struct NumericUnaryExpression {
2797    #[prost(enumeration = "UnaryNumericOperation", tag = "1")]
2798    pub operation: i32,
2799    #[prost(message, optional, boxed, tag = "2")]
2800    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2801}
2802#[derive(Clone, PartialEq, ::prost::Message)]
2803pub struct NumericBinaryExpression {
2804    #[prost(enumeration = "BinaryNumericOperation", tag = "1")]
2805    pub operation: i32,
2806    #[prost(message, optional, boxed, tag = "2")]
2807    pub left: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2808    #[prost(message, optional, boxed, tag = "3")]
2809    pub right: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2810    #[deprecated]
2811    #[prost(message, optional, tag = "4")]
2812    pub interpolation: ::core::option::Option<InterpolationConfiguration>,
2813}
2814#[derive(Clone, PartialEq, ::prost::Message)]
2815pub struct NumericNaryExpression {
2816    #[prost(enumeration = "NaryNumericOperation", tag = "1")]
2817    pub operation: i32,
2818    #[prost(message, repeated, tag = "2")]
2819    pub inputs: ::prost::alloc::vec::Vec<NumericExpression>,
2820    #[deprecated]
2821    #[prost(message, optional, tag = "3")]
2822    pub interpolation: ::core::option::Option<InterpolationConfiguration>,
2823}
2824#[derive(Clone, PartialEq, ::prost::Message)]
2825pub struct NumericBitwiseExpression {
2826    #[prost(enumeration = "BitwiseOperation", tag = "1")]
2827    pub operation: i32,
2828    #[prost(message, optional, boxed, tag = "2")]
2829    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2830    #[prost(message, optional, tag = "3")]
2831    pub operand: ::core::option::Option<IntegerConstant>,
2832}
2833#[derive(Clone, PartialEq, ::prost::Message)]
2834pub struct NumericConditionalExpression {
2835    #[prost(message, optional, boxed, tag = "1")]
2836    pub condition: ::core::option::Option<::prost::alloc::boxed::Box<BooleanExpression>>,
2837    #[prost(message, optional, boxed, tag = "2")]
2838    pub true_value: ::core::option::Option<
2839        ::prost::alloc::boxed::Box<NumericExpression>,
2840    >,
2841    #[prost(message, optional, boxed, tag = "3")]
2842    pub false_value: ::core::option::Option<
2843        ::prost::alloc::boxed::Box<NumericExpression>,
2844    >,
2845}
2846#[derive(Clone, PartialEq, ::prost::Message)]
2847pub struct ComparisonExpression {
2848    #[prost(enumeration = "ComparisonOperation", tag = "1")]
2849    pub operation: i32,
2850    #[prost(message, optional, boxed, tag = "2")]
2851    pub left: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2852    #[prost(message, optional, boxed, tag = "3")]
2853    pub right: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2854}
2855#[derive(Clone, PartialEq, ::prost::Message)]
2856pub struct LogicalExpression {
2857    #[prost(enumeration = "LogicalOperation", tag = "1")]
2858    pub operation: i32,
2859    #[prost(message, optional, boxed, tag = "2")]
2860    pub left: ::core::option::Option<::prost::alloc::boxed::Box<BooleanExpression>>,
2861    #[prost(message, optional, boxed, tag = "3")]
2862    pub right: ::core::option::Option<::prost::alloc::boxed::Box<BooleanExpression>>,
2863}
2864#[derive(Clone, PartialEq, ::prost::Message)]
2865pub struct InterpolationConfiguration {
2866    #[prost(oneof = "interpolation_configuration::Kind", tags = "1")]
2867    pub kind: ::core::option::Option<interpolation_configuration::Kind>,
2868}
2869/// Nested message and enum types in `InterpolationConfiguration`.
2870pub mod interpolation_configuration {
2871    #[derive(Clone, PartialEq, ::prost::Oneof)]
2872    pub enum Kind {
2873        #[prost(message, tag = "1")]
2874        ForwardFill(super::ForwardFillInterpolation),
2875    }
2876}
2877#[derive(Clone, PartialEq, ::prost::Message)]
2878pub struct ForwardFillInterpolation {
2879    #[prost(message, optional, tag = "1")]
2880    pub max_fill_duration: ::core::option::Option<DurationConstant>,
2881}
2882#[derive(Clone, PartialEq, ::prost::Message)]
2883pub struct NumericCumulativeSumExpression {
2884    #[prost(message, optional, boxed, tag = "1")]
2885    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2886    #[prost(message, optional, tag = "2")]
2887    pub start: ::core::option::Option<TimestampConstant>,
2888}
2889#[derive(Clone, PartialEq, ::prost::Message)]
2890pub struct NumericDerivativeExpression {
2891    #[prost(message, optional, boxed, tag = "1")]
2892    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2893    #[prost(enumeration = "super::super::types::time::TimeUnit", optional, tag = "2")]
2894    pub time_unit: ::core::option::Option<i32>,
2895    #[prost(enumeration = "NegativeValuePolicy", optional, tag = "3")]
2896    pub negative_value_policy: ::core::option::Option<i32>,
2897}
2898#[derive(Clone, PartialEq, ::prost::Message)]
2899pub struct NumericIntegralExpression {
2900    #[prost(message, optional, boxed, tag = "1")]
2901    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2902    #[prost(message, optional, tag = "2")]
2903    pub start: ::core::option::Option<TimestampConstant>,
2904    #[prost(enumeration = "super::super::types::time::TimeUnit", optional, tag = "3")]
2905    pub time_unit: ::core::option::Option<i32>,
2906}
2907#[derive(Clone, PartialEq, ::prost::Message)]
2908pub struct NumericTimeRangeFilterExpression {
2909    #[prost(message, optional, boxed, tag = "1")]
2910    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2911    #[prost(message, optional, tag = "2")]
2912    pub start: ::core::option::Option<TimestampConstant>,
2913    #[prost(message, optional, tag = "3")]
2914    pub end: ::core::option::Option<TimestampConstant>,
2915}
2916#[derive(Clone, PartialEq, ::prost::Message)]
2917pub struct NumericTimeShiftExpression {
2918    #[prost(message, optional, boxed, tag = "1")]
2919    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2920    #[prost(message, optional, tag = "2")]
2921    pub duration: ::core::option::Option<DurationConstant>,
2922}
2923#[derive(Clone, PartialEq, ::prost::Message)]
2924pub struct NumericValueDifferenceExpression {
2925    #[prost(message, optional, boxed, tag = "1")]
2926    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2927    #[prost(enumeration = "NegativeValuePolicy", optional, tag = "2")]
2928    pub negative_value_policy: ::core::option::Option<i32>,
2929}
2930#[derive(Clone, PartialEq, ::prost::Message)]
2931pub struct NumericPhaseUnwrapExpression {
2932    #[prost(message, optional, boxed, tag = "1")]
2933    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2934    #[prost(message, optional, tag = "2")]
2935    pub period: ::core::option::Option<DoubleConstant>,
2936}
2937#[derive(Clone, PartialEq, ::prost::Message)]
2938pub struct NumericPointLimitExpression {
2939    #[prost(message, optional, boxed, tag = "1")]
2940    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2941    #[prost(message, optional, tag = "2")]
2942    pub count: ::core::option::Option<IntegerConstant>,
2943    #[prost(enumeration = "PointLimitOrder", tag = "3")]
2944    pub order: i32,
2945}
2946#[derive(Clone, PartialEq, ::prost::Message)]
2947pub struct NumericNthPointDownsampleExpression {
2948    #[prost(message, optional, boxed, tag = "1")]
2949    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2950    #[prost(message, optional, tag = "2")]
2951    pub n: ::core::option::Option<IntegerConstant>,
2952}
2953#[derive(Clone, PartialEq, ::prost::Message)]
2954pub struct NumericLargestTriangleThreeBucketsExpression {
2955    #[prost(message, optional, boxed, tag = "1")]
2956    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2957    #[prost(message, optional, tag = "2")]
2958    pub max_points: ::core::option::Option<IntegerConstant>,
2959}
2960#[derive(Clone, PartialEq, ::prost::Message)]
2961pub struct NumericConditionFilterExpression {
2962    #[prost(message, optional, boxed, tag = "1")]
2963    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2964    #[prost(message, optional, boxed, tag = "2")]
2965    pub condition: ::core::option::Option<::prost::alloc::boxed::Box<BooleanExpression>>,
2966}
2967#[derive(Clone, PartialEq, ::prost::Message)]
2968pub struct NumericThresholdFilterExpression {
2969    #[prost(message, optional, boxed, tag = "1")]
2970    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2971    #[prost(message, optional, tag = "2")]
2972    pub threshold: ::core::option::Option<DoubleConstant>,
2973    #[prost(enumeration = "ComparisonOperation", tag = "3")]
2974    pub operation: i32,
2975}
2976#[derive(Clone, PartialEq, ::prost::Message)]
2977pub struct NumericApproximateFilterExpression {
2978    #[prost(message, optional, boxed, tag = "1")]
2979    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2980    #[prost(message, optional, tag = "2")]
2981    pub threshold: ::core::option::Option<DoubleConstant>,
2982    #[prost(message, optional, tag = "3")]
2983    pub tolerance: ::core::option::Option<DoubleConstant>,
2984    #[prost(enumeration = "ApproximateComparisonOperation", tag = "4")]
2985    pub operation: i32,
2986}
2987#[derive(Clone, PartialEq, ::prost::Message)]
2988pub struct NumericSignalFilterExpression {
2989    #[prost(message, optional, boxed, tag = "1")]
2990    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
2991    #[prost(message, optional, tag = "2")]
2992    pub configuration: ::core::option::Option<SignalFilterConfiguration>,
2993    #[prost(message, optional, tag = "3")]
2994    pub order: ::core::option::Option<IntegerConstant>,
2995    #[prost(message, optional, tag = "4")]
2996    pub sampling_frequency: ::core::option::Option<DoubleConstant>,
2997}
2998#[derive(Clone, PartialEq, ::prost::Message)]
2999pub struct NumericUnitConversionExpression {
3000    #[prost(message, optional, boxed, tag = "1")]
3001    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3002    #[prost(string, tag = "2")]
3003    pub output_unit: ::prost::alloc::string::String,
3004}
3005#[derive(Clone, PartialEq, ::prost::Message)]
3006pub struct NumericUnitOverrideExpression {
3007    #[prost(message, optional, boxed, tag = "1")]
3008    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3009    #[prost(string, optional, tag = "2")]
3010    pub unit: ::core::option::Option<::prost::alloc::string::String>,
3011}
3012#[derive(Clone, PartialEq, ::prost::Message)]
3013pub struct NumericZScoreExpression {
3014    #[prost(message, optional, boxed, tag = "1")]
3015    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3016    #[prost(message, repeated, tag = "2")]
3017    pub group_by_tags: ::prost::alloc::vec::Vec<StringConstant>,
3018    #[deprecated]
3019    #[prost(message, optional, tag = "3")]
3020    pub interpolation: ::core::option::Option<InterpolationConfiguration>,
3021}
3022#[derive(Clone, PartialEq, ::prost::Message)]
3023pub struct NumericUnionExpression {
3024    #[prost(message, repeated, tag = "1")]
3025    pub inputs: ::prost::alloc::vec::Vec<NumericExpression>,
3026    #[deprecated]
3027    #[prost(enumeration = "DuplicateMergeOperation", optional, tag = "2")]
3028    pub duplicate_merge_operation: ::core::option::Option<i32>,
3029}
3030#[derive(Clone, PartialEq, ::prost::Message)]
3031pub struct NumericDropNanExpression {
3032    #[prost(message, optional, boxed, tag = "1")]
3033    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3034}
3035#[derive(Clone, PartialEq, ::prost::Message)]
3036pub struct NumericTimeShiftV2Expression {
3037    #[prost(message, optional, boxed, tag = "1")]
3038    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3039    #[prost(message, optional, tag = "2")]
3040    pub duration: ::core::option::Option<DurationExpression>,
3041}
3042#[derive(Clone, PartialEq, ::prost::Message)]
3043pub struct NumericResampleV2Expression {
3044    #[prost(message, optional, boxed, tag = "1")]
3045    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3046    #[prost(message, optional, tag = "2")]
3047    pub interval: ::core::option::Option<DurationExpression>,
3048}
3049#[derive(Clone, PartialEq, ::prost::Message)]
3050pub struct NumericToStartOfIntervalExpression {
3051    #[prost(message, optional, boxed, tag = "1")]
3052    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3053    #[prost(message, optional, tag = "2")]
3054    pub interval: ::core::option::Option<DurationExpression>,
3055}
3056#[derive(Clone, PartialEq, ::prost::Message)]
3057pub struct NumericScalarTransformExpression {
3058    #[prost(message, optional, boxed, tag = "1")]
3059    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3060    #[prost(oneof = "numeric_scalar_transform_expression::Transform", tags = "2, 3")]
3061    pub transform: ::core::option::Option<
3062        numeric_scalar_transform_expression::Transform,
3063    >,
3064}
3065/// Nested message and enum types in `NumericScalarTransformExpression`.
3066pub mod numeric_scalar_transform_expression {
3067    #[derive(Clone, PartialEq, ::prost::Oneof)]
3068    pub enum Transform {
3069        #[prost(message, tag = "2")]
3070        Offset(super::DoubleConstant),
3071        #[prost(message, tag = "3")]
3072        Scale(super::ScalingFactor),
3073    }
3074}
3075#[derive(Clone, PartialEq, ::prost::Message)]
3076pub struct NumericArithmeticExpression {
3077    #[prost(map = "string, message", tag = "1")]
3078    pub inputs: ::std::collections::HashMap<
3079        ::prost::alloc::string::String,
3080        NumericExpression,
3081    >,
3082    #[prost(string, tag = "2")]
3083    pub formula: ::prost::alloc::string::String,
3084    #[deprecated]
3085    #[prost(message, optional, tag = "3")]
3086    pub interpolation: ::core::option::Option<InterpolationConfiguration>,
3087}
3088#[derive(Clone, PartialEq, ::prost::Message)]
3089pub struct NumericFormulaFilterExpression {
3090    #[prost(string, tag = "1")]
3091    pub filtered_input_name: ::prost::alloc::string::String,
3092    #[prost(map = "string, message", tag = "2")]
3093    pub inputs: ::std::collections::HashMap<
3094        ::prost::alloc::string::String,
3095        NumericExpression,
3096    >,
3097    #[prost(string, tag = "3")]
3098    pub formula: ::prost::alloc::string::String,
3099    #[deprecated]
3100    #[prost(message, optional, tag = "4")]
3101    pub interpolation: ::core::option::Option<InterpolationConfiguration>,
3102}
3103#[derive(Clone, PartialEq, ::prost::Message)]
3104pub struct NumericLiteralBitwiseExpression {
3105    #[prost(message, optional, boxed, tag = "1")]
3106    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3107    #[prost(message, optional, tag = "2")]
3108    pub function: ::core::option::Option<LiteralBitFunction>,
3109}
3110#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3111pub struct LiteralBitFunction {
3112    #[prost(oneof = "literal_bit_function::Kind", tags = "1, 2, 3")]
3113    pub kind: ::core::option::Option<literal_bit_function::Kind>,
3114}
3115/// Nested message and enum types in `LiteralBitFunction`.
3116pub mod literal_bit_function {
3117    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
3118    pub enum Kind {
3119        #[prost(message, tag = "1")]
3120        Bitwise(super::LiteralBitwiseFunction),
3121        #[prost(message, tag = "2")]
3122        Shift(super::LiteralShiftFunction),
3123        #[prost(message, tag = "3")]
3124        BitTest(super::BitTestIndex),
3125    }
3126}
3127#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3128pub struct LiteralBitwiseFunction {
3129    #[prost(enumeration = "LiteralBitwiseOperation", tag = "1")]
3130    pub operation: i32,
3131    #[prost(int64, tag = "2")]
3132    pub operand: i64,
3133}
3134#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3135pub struct LiteralShiftFunction {
3136    #[prost(enumeration = "ShiftDirection", tag = "1")]
3137    pub direction: i32,
3138    #[prost(int32, tag = "2")]
3139    pub distance: i32,
3140}
3141#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3142pub struct BitTestIndex {
3143    #[prost(int32, tag = "1")]
3144    pub index: i32,
3145}
3146#[derive(Clone, PartialEq, ::prost::Message)]
3147pub struct NumericResampleExpression {
3148    #[prost(message, optional, boxed, tag = "1")]
3149    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3150    #[prost(message, optional, tag = "2")]
3151    pub interval: ::core::option::Option<DurationConstant>,
3152    #[prost(message, optional, tag = "3")]
3153    pub fill: ::core::option::Option<ResampleFill>,
3154}
3155#[derive(Clone, PartialEq, ::prost::Message)]
3156pub struct NumericRefpropExpression {
3157    #[prost(message, repeated, tag = "1")]
3158    pub inputs: ::prost::alloc::vec::Vec<RefpropInput>,
3159    #[prost(enumeration = "RefpropProperty", tag = "2")]
3160    pub output_property: i32,
3161    #[prost(enumeration = "RefpropSubstance", tag = "3")]
3162    pub substance: i32,
3163    #[deprecated]
3164    #[prost(message, optional, tag = "4")]
3165    pub interpolation: ::core::option::Option<InterpolationConfiguration>,
3166}
3167#[derive(Clone, PartialEq, ::prost::Message)]
3168pub struct RefpropInput {
3169    #[prost(enumeration = "RefpropProperty", tag = "1")]
3170    pub property: i32,
3171    #[prost(message, optional, tag = "2")]
3172    pub value: ::core::option::Option<NumericExpression>,
3173}
3174#[derive(Clone, PartialEq, ::prost::Message)]
3175pub struct NumericRollingAggregationExpression {
3176    #[prost(message, optional, boxed, tag = "1")]
3177    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3178    #[prost(message, optional, tag = "2")]
3179    pub window: ::core::option::Option<DurationConstant>,
3180    #[prost(message, optional, tag = "3")]
3181    pub reduction: ::core::option::Option<NumericReduction>,
3182}
3183#[derive(Clone, PartialEq, ::prost::Message)]
3184pub struct NumericDuplicateTimestampAggregationExpression {
3185    #[prost(message, optional, boxed, tag = "1")]
3186    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3187    #[prost(message, optional, tag = "2")]
3188    pub reduction: ::core::option::Option<NumericReduction>,
3189    #[prost(message, repeated, tag = "3")]
3190    pub grouping_keys: ::prost::alloc::vec::Vec<StringConstant>,
3191    #[prost(bool, optional, tag = "4")]
3192    pub aggregate_across_all_series: ::core::option::Option<bool>,
3193    #[deprecated]
3194    #[prost(message, optional, tag = "5")]
3195    pub interpolation: ::core::option::Option<InterpolationConfiguration>,
3196}
3197#[derive(Clone, PartialEq, ::prost::Message)]
3198pub struct NumericTagFilterExpression {
3199    #[prost(message, optional, boxed, tag = "1")]
3200    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3201    #[prost(message, optional, tag = "2")]
3202    pub predicate: ::core::option::Option<TagPredicateExpression>,
3203}
3204#[derive(Clone, PartialEq, ::prost::Message)]
3205pub struct NumericTagSelectionExpression {
3206    #[prost(message, optional, boxed, tag = "1")]
3207    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3208    #[prost(message, repeated, tag = "2")]
3209    pub retained_tag_keys: ::prost::alloc::vec::Vec<StringConstant>,
3210}
3211#[derive(Clone, PartialEq, ::prost::Message)]
3212pub struct NumericArrayExpression {
3213    #[prost(
3214        oneof = "numeric_array_expression::Kind",
3215        tags = "1, 2, 3, 4, 5, 6, 7, 8, 9"
3216    )]
3217    pub kind: ::core::option::Option<numeric_array_expression::Kind>,
3218}
3219/// Nested message and enum types in `NumericArrayExpression`.
3220pub mod numeric_array_expression {
3221    #[derive(Clone, PartialEq, ::prost::Oneof)]
3222    pub enum Kind {
3223        #[prost(message, tag = "1")]
3224        Reference(super::TimeSeriesReference),
3225        #[prost(message, tag = "2")]
3226        ChannelSelection(super::ChannelSelection),
3227        #[prost(message, tag = "3")]
3228        ModuleFunction(super::ModuleFunctionExpression),
3229        #[prost(message, tag = "4")]
3230        SeriesSelection(::prost::alloc::boxed::Box<super::SeriesSelection>),
3231        #[prost(message, tag = "5")]
3232        StructField(
3233            ::prost::alloc::boxed::Box<super::NumericArrayStructFieldExpression>,
3234        ),
3235        #[prost(message, tag = "6")]
3236        TimeShift(::prost::alloc::boxed::Box<super::NumericArrayTimeShiftExpression>),
3237        #[prost(message, tag = "7")]
3238        ToStartOfInterval(
3239            ::prost::alloc::boxed::Box<super::NumericArrayToStartOfIntervalExpression>,
3240        ),
3241        #[prost(message, tag = "8")]
3242        TagFilter(::prost::alloc::boxed::Box<super::NumericArrayTagFilterExpression>),
3243        #[prost(message, tag = "9")]
3244        TagSelection(
3245            ::prost::alloc::boxed::Box<super::NumericArrayTagSelectionExpression>,
3246        ),
3247    }
3248}
3249#[derive(Clone, PartialEq, ::prost::Message)]
3250pub struct NumericArrayStructFieldExpression {
3251    #[prost(message, optional, boxed, tag = "1")]
3252    pub input: ::core::option::Option<::prost::alloc::boxed::Box<StructExpression>>,
3253    #[prost(message, repeated, tag = "2")]
3254    pub path: ::prost::alloc::vec::Vec<StringConstant>,
3255}
3256#[derive(Clone, PartialEq, ::prost::Message)]
3257pub struct NumericArrayTimeShiftExpression {
3258    #[prost(message, optional, boxed, tag = "1")]
3259    pub input: ::core::option::Option<
3260        ::prost::alloc::boxed::Box<NumericArrayExpression>,
3261    >,
3262    #[prost(message, optional, tag = "2")]
3263    pub duration: ::core::option::Option<DurationConstant>,
3264}
3265#[derive(Clone, PartialEq, ::prost::Message)]
3266pub struct NumericArrayToStartOfIntervalExpression {
3267    #[prost(message, optional, boxed, tag = "1")]
3268    pub input: ::core::option::Option<
3269        ::prost::alloc::boxed::Box<NumericArrayExpression>,
3270    >,
3271    #[prost(message, optional, tag = "2")]
3272    pub interval: ::core::option::Option<DurationExpression>,
3273}
3274#[derive(Clone, PartialEq, ::prost::Message)]
3275pub struct NumericArrayTagFilterExpression {
3276    #[prost(message, optional, boxed, tag = "1")]
3277    pub input: ::core::option::Option<
3278        ::prost::alloc::boxed::Box<NumericArrayExpression>,
3279    >,
3280    #[prost(message, optional, tag = "2")]
3281    pub predicate: ::core::option::Option<TagPredicateExpression>,
3282}
3283#[derive(Clone, PartialEq, ::prost::Message)]
3284pub struct NumericArrayTagSelectionExpression {
3285    #[prost(message, optional, boxed, tag = "1")]
3286    pub input: ::core::option::Option<
3287        ::prost::alloc::boxed::Box<NumericArrayExpression>,
3288    >,
3289    #[prost(message, optional, tag = "2")]
3290    pub keys: ::core::option::Option<TagKeySet>,
3291}
3292#[derive(Clone, PartialEq, ::prost::Message)]
3293pub struct CategoricalArrayExpression {
3294    #[prost(
3295        oneof = "categorical_array_expression::Kind",
3296        tags = "1, 2, 3, 4, 5, 6, 7, 8, 9"
3297    )]
3298    pub kind: ::core::option::Option<categorical_array_expression::Kind>,
3299}
3300/// Nested message and enum types in `CategoricalArrayExpression`.
3301pub mod categorical_array_expression {
3302    #[derive(Clone, PartialEq, ::prost::Oneof)]
3303    pub enum Kind {
3304        #[prost(message, tag = "1")]
3305        Reference(super::TimeSeriesReference),
3306        #[prost(message, tag = "2")]
3307        ChannelSelection(super::ChannelSelection),
3308        #[prost(message, tag = "3")]
3309        ModuleFunction(super::ModuleFunctionExpression),
3310        #[prost(message, tag = "4")]
3311        SeriesSelection(::prost::alloc::boxed::Box<super::SeriesSelection>),
3312        #[prost(message, tag = "5")]
3313        StructField(
3314            ::prost::alloc::boxed::Box<super::CategoricalArrayStructFieldExpression>,
3315        ),
3316        #[prost(message, tag = "6")]
3317        TimeShift(
3318            ::prost::alloc::boxed::Box<super::CategoricalArrayTimeShiftExpression>,
3319        ),
3320        #[prost(message, tag = "7")]
3321        ToStartOfInterval(
3322            ::prost::alloc::boxed::Box<
3323                super::CategoricalArrayToStartOfIntervalExpression,
3324            >,
3325        ),
3326        #[prost(message, tag = "8")]
3327        TagFilter(
3328            ::prost::alloc::boxed::Box<super::CategoricalArrayTagFilterExpression>,
3329        ),
3330        #[prost(message, tag = "9")]
3331        TagSelection(
3332            ::prost::alloc::boxed::Box<super::CategoricalArrayTagSelectionExpression>,
3333        ),
3334    }
3335}
3336#[derive(Clone, PartialEq, ::prost::Message)]
3337pub struct CategoricalArrayStructFieldExpression {
3338    #[prost(message, optional, boxed, tag = "1")]
3339    pub input: ::core::option::Option<::prost::alloc::boxed::Box<StructExpression>>,
3340    #[prost(message, repeated, tag = "2")]
3341    pub path: ::prost::alloc::vec::Vec<StringConstant>,
3342}
3343#[derive(Clone, PartialEq, ::prost::Message)]
3344pub struct CategoricalArrayTimeShiftExpression {
3345    #[prost(message, optional, boxed, tag = "1")]
3346    pub input: ::core::option::Option<
3347        ::prost::alloc::boxed::Box<CategoricalArrayExpression>,
3348    >,
3349    #[prost(message, optional, tag = "2")]
3350    pub duration: ::core::option::Option<DurationConstant>,
3351}
3352#[derive(Clone, PartialEq, ::prost::Message)]
3353pub struct CategoricalArrayToStartOfIntervalExpression {
3354    #[prost(message, optional, boxed, tag = "1")]
3355    pub input: ::core::option::Option<
3356        ::prost::alloc::boxed::Box<CategoricalArrayExpression>,
3357    >,
3358    #[prost(message, optional, tag = "2")]
3359    pub interval: ::core::option::Option<DurationExpression>,
3360}
3361#[derive(Clone, PartialEq, ::prost::Message)]
3362pub struct CategoricalArrayTagFilterExpression {
3363    #[prost(message, optional, boxed, tag = "1")]
3364    pub input: ::core::option::Option<
3365        ::prost::alloc::boxed::Box<CategoricalArrayExpression>,
3366    >,
3367    #[prost(message, optional, tag = "2")]
3368    pub predicate: ::core::option::Option<TagPredicateExpression>,
3369}
3370#[derive(Clone, PartialEq, ::prost::Message)]
3371pub struct CategoricalArrayTagSelectionExpression {
3372    #[prost(message, optional, boxed, tag = "1")]
3373    pub input: ::core::option::Option<
3374        ::prost::alloc::boxed::Box<CategoricalArrayExpression>,
3375    >,
3376    #[prost(message, optional, tag = "2")]
3377    pub keys: ::core::option::Option<TagKeySet>,
3378}
3379#[derive(Clone, PartialEq, ::prost::Message)]
3380pub struct StructExpression {
3381    #[prost(oneof = "struct_expression::Kind", tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10")]
3382    pub kind: ::core::option::Option<struct_expression::Kind>,
3383}
3384/// Nested message and enum types in `StructExpression`.
3385pub mod struct_expression {
3386    #[derive(Clone, PartialEq, ::prost::Oneof)]
3387    pub enum Kind {
3388        #[prost(message, tag = "1")]
3389        Reference(super::TimeSeriesReference),
3390        #[prost(message, tag = "2")]
3391        ChannelSelection(super::ChannelSelection),
3392        #[prost(message, tag = "3")]
3393        ModuleFunction(super::ModuleFunctionExpression),
3394        #[prost(message, tag = "4")]
3395        SeriesSelection(::prost::alloc::boxed::Box<super::SeriesSelection>),
3396        #[prost(message, tag = "5")]
3397        Combine(super::StructCombineExpression),
3398        #[prost(message, tag = "6")]
3399        StructField(::prost::alloc::boxed::Box<super::StructFieldExpression>),
3400        #[prost(message, tag = "7")]
3401        TimeShift(::prost::alloc::boxed::Box<super::StructTimeShiftExpression>),
3402        #[prost(message, tag = "8")]
3403        ToStartOfInterval(
3404            ::prost::alloc::boxed::Box<super::StructToStartOfIntervalExpression>,
3405        ),
3406        #[prost(message, tag = "9")]
3407        TagFilter(::prost::alloc::boxed::Box<super::StructTagFilterExpression>),
3408        #[prost(message, tag = "10")]
3409        TagSelection(::prost::alloc::boxed::Box<super::StructTagSelectionExpression>),
3410    }
3411}
3412#[derive(Clone, PartialEq, ::prost::Message)]
3413pub struct StructFieldExpression {
3414    #[prost(message, optional, boxed, tag = "1")]
3415    pub input: ::core::option::Option<::prost::alloc::boxed::Box<StructExpression>>,
3416    #[prost(message, repeated, tag = "2")]
3417    pub path: ::prost::alloc::vec::Vec<StringConstant>,
3418}
3419#[derive(Clone, PartialEq, ::prost::Message)]
3420pub struct StructTimeShiftExpression {
3421    #[prost(message, optional, boxed, tag = "1")]
3422    pub input: ::core::option::Option<::prost::alloc::boxed::Box<StructExpression>>,
3423    #[prost(message, optional, tag = "2")]
3424    pub duration: ::core::option::Option<DurationConstant>,
3425}
3426#[derive(Clone, PartialEq, ::prost::Message)]
3427pub struct StructToStartOfIntervalExpression {
3428    #[prost(message, optional, boxed, tag = "1")]
3429    pub input: ::core::option::Option<::prost::alloc::boxed::Box<StructExpression>>,
3430    #[prost(message, optional, tag = "2")]
3431    pub interval: ::core::option::Option<DurationExpression>,
3432}
3433#[derive(Clone, PartialEq, ::prost::Message)]
3434pub struct StructTagFilterExpression {
3435    #[prost(message, optional, boxed, tag = "1")]
3436    pub input: ::core::option::Option<::prost::alloc::boxed::Box<StructExpression>>,
3437    #[prost(message, optional, tag = "2")]
3438    pub predicate: ::core::option::Option<TagPredicateExpression>,
3439}
3440#[derive(Clone, PartialEq, ::prost::Message)]
3441pub struct StructTagSelectionExpression {
3442    #[prost(message, optional, boxed, tag = "1")]
3443    pub input: ::core::option::Option<::prost::alloc::boxed::Box<StructExpression>>,
3444    #[prost(message, optional, tag = "2")]
3445    pub keys: ::core::option::Option<TagKeySet>,
3446}
3447#[derive(Clone, PartialEq, ::prost::Message)]
3448pub struct LogExpression {
3449    #[prost(oneof = "log_expression::Kind", tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10")]
3450    pub kind: ::core::option::Option<log_expression::Kind>,
3451}
3452/// Nested message and enum types in `LogExpression`.
3453pub mod log_expression {
3454    #[derive(Clone, PartialEq, ::prost::Oneof)]
3455    pub enum Kind {
3456        #[prost(message, tag = "1")]
3457        Reference(super::TimeSeriesReference),
3458        #[prost(message, tag = "2")]
3459        ChannelSelection(super::ChannelSelection),
3460        #[prost(message, tag = "3")]
3461        ModuleFunction(super::ModuleFunctionExpression),
3462        #[prost(message, tag = "4")]
3463        SeriesSelection(::prost::alloc::boxed::Box<super::SeriesSelection>),
3464        #[prost(message, tag = "5")]
3465        Concatenate(super::LogConcatenateExpression),
3466        #[prost(message, tag = "6")]
3467        Filter(::prost::alloc::boxed::Box<super::LogFilterExpression>),
3468        #[prost(message, tag = "7")]
3469        TimeShift(::prost::alloc::boxed::Box<super::LogTimeShiftExpression>),
3470        #[prost(message, tag = "8")]
3471        ToStartOfInterval(
3472            ::prost::alloc::boxed::Box<super::LogToStartOfIntervalExpression>,
3473        ),
3474        #[prost(message, tag = "9")]
3475        TagFilter(::prost::alloc::boxed::Box<super::LogTagFilterExpression>),
3476        #[prost(message, tag = "10")]
3477        TagSelection(::prost::alloc::boxed::Box<super::LogTagSelectionExpression>),
3478    }
3479}
3480#[derive(Clone, PartialEq, ::prost::Message)]
3481pub struct LogTimeShiftExpression {
3482    #[prost(message, optional, boxed, tag = "1")]
3483    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogExpression>>,
3484    #[prost(message, optional, tag = "2")]
3485    pub duration: ::core::option::Option<DurationConstant>,
3486}
3487#[derive(Clone, PartialEq, ::prost::Message)]
3488pub struct LogToStartOfIntervalExpression {
3489    #[prost(message, optional, boxed, tag = "1")]
3490    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogExpression>>,
3491    #[prost(message, optional, tag = "2")]
3492    pub interval: ::core::option::Option<DurationExpression>,
3493}
3494#[derive(Clone, PartialEq, ::prost::Message)]
3495pub struct LogTagFilterExpression {
3496    #[prost(message, optional, boxed, tag = "1")]
3497    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogExpression>>,
3498    #[prost(message, optional, tag = "2")]
3499    pub predicate: ::core::option::Option<TagPredicateExpression>,
3500}
3501#[derive(Clone, PartialEq, ::prost::Message)]
3502pub struct LogTagSelectionExpression {
3503    #[prost(message, optional, boxed, tag = "1")]
3504    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogExpression>>,
3505    #[prost(message, optional, tag = "2")]
3506    pub keys: ::core::option::Option<TagKeySet>,
3507}
3508#[derive(Clone, PartialEq, ::prost::Message)]
3509pub struct StructCombineExpression {
3510    #[prost(map = "string, message", tag = "1")]
3511    pub fields: ::std::collections::HashMap<
3512        ::prost::alloc::string::String,
3513        SeriesExpression,
3514    >,
3515    #[prost(message, optional, tag = "2")]
3516    pub interpolation: ::core::option::Option<InterpolationConfiguration>,
3517}
3518#[derive(Clone, PartialEq, ::prost::Message)]
3519pub struct LogConcatenateExpression {
3520    #[prost(message, repeated, tag = "1")]
3521    pub inputs: ::prost::alloc::vec::Vec<LogExpression>,
3522}
3523#[derive(Clone, PartialEq, ::prost::Message)]
3524pub struct LogFilterExpression {
3525    #[prost(message, optional, boxed, tag = "1")]
3526    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogExpression>>,
3527    #[prost(message, optional, tag = "2")]
3528    pub predicate: ::core::option::Option<LogPredicate>,
3529}
3530#[derive(Clone, PartialEq, ::prost::Message)]
3531pub struct RangeExpression {
3532    #[prost(
3533        oneof = "range_expression::Kind",
3534        tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21"
3535    )]
3536    pub kind: ::core::option::Option<range_expression::Kind>,
3537}
3538/// Nested message and enum types in `RangeExpression`.
3539pub mod range_expression {
3540    #[derive(Clone, PartialEq, ::prost::Oneof)]
3541    pub enum Kind {
3542        #[prost(string, tag = "1")]
3543        VariableName(::prost::alloc::string::String),
3544        #[prost(message, tag = "2")]
3545        ModuleFunction(super::ModuleFunctionExpression),
3546        #[prost(message, tag = "3")]
3547        Literal(super::LiteralRangeCollection),
3548        #[prost(message, tag = "4")]
3549        Events(super::EventPredicateExpression),
3550        #[prost(message, tag = "5")]
3551        BooleanCondition(::prost::alloc::boxed::Box<super::BooleanRangeExpression>),
3552        #[prost(message, tag = "6")]
3553        NumericThreshold(::prost::alloc::boxed::Box<super::NumericThresholdRanges>),
3554        #[prost(message, tag = "7")]
3555        NumericBounds(::prost::alloc::boxed::Box<super::NumericBoundsRanges>),
3556        #[prost(message, tag = "8")]
3557        CategoricalMembership(
3558            ::prost::alloc::boxed::Box<super::CategoricalMembershipRanges>,
3559        ),
3560        #[prost(message, tag = "9")]
3561        NumericEquality(super::NumericEqualityRanges),
3562        #[prost(message, tag = "10")]
3563        CategoricalEquality(super::CategoricalEqualityRanges),
3564        #[prost(message, tag = "11")]
3565        NumericCrossover(::prost::alloc::boxed::Box<super::NumericCrossoverRanges>),
3566        #[prost(message, tag = "12")]
3567        OnChange(::prost::alloc::boxed::Box<super::SeriesChangeRanges>),
3568        #[prost(message, tag = "13")]
3569        Staleness(::prost::alloc::boxed::Box<super::SeriesStalenessRanges>),
3570        #[prost(message, tag = "14")]
3571        DurationFilter(::prost::alloc::boxed::Box<super::RangeDurationFilter>),
3572        #[prost(message, tag = "15")]
3573        Stability(::prost::alloc::boxed::Box<super::NumericStabilityRanges>),
3574        #[prost(message, tag = "16")]
3575        Extrema(::prost::alloc::boxed::Box<super::NumericExtremaRanges>),
3576        #[prost(message, tag = "17")]
3577        Intersection(super::RangeExpressionCollection),
3578        #[prost(message, tag = "18")]
3579        Union(super::RangeExpressionCollection),
3580        #[prost(message, tag = "19")]
3581        Complement(::prost::alloc::boxed::Box<super::RangeExpression>),
3582        #[prost(message, tag = "20")]
3583        Padding(::prost::alloc::boxed::Box<super::RangePaddingExpression>),
3584        #[prost(message, tag = "21")]
3585        Statistics(::prost::alloc::boxed::Box<super::RangeStatisticsExpression>),
3586    }
3587}
3588#[derive(Clone, PartialEq, ::prost::Message)]
3589pub struct LiteralRangeCollection {
3590    #[prost(message, repeated, tag = "1")]
3591    pub ranges: ::prost::alloc::vec::Vec<LiteralRange>,
3592}
3593#[derive(Clone, PartialEq, ::prost::Message)]
3594pub struct LiteralRange {
3595    #[prost(message, optional, tag = "1")]
3596    pub start: ::core::option::Option<TimestampConstant>,
3597    #[prost(message, optional, tag = "2")]
3598    pub end: ::core::option::Option<TimestampConstant>,
3599    #[prost(message, optional, tag = "3")]
3600    pub grouping: ::core::option::Option<TagGrouping>,
3601}
3602#[derive(Clone, PartialEq, ::prost::Message)]
3603pub struct BooleanRangeExpression {
3604    #[prost(message, optional, boxed, tag = "1")]
3605    pub input: ::core::option::Option<::prost::alloc::boxed::Box<BooleanExpression>>,
3606    #[prost(message, optional, tag = "2")]
3607    pub persistence: ::core::option::Option<RangePersistence>,
3608}
3609#[derive(Clone, PartialEq, ::prost::Message)]
3610pub struct NumericThresholdRanges {
3611    #[prost(message, optional, boxed, tag = "1")]
3612    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3613    #[prost(enumeration = "ComparisonOperation", tag = "2")]
3614    pub comparison: i32,
3615    #[prost(message, optional, tag = "3")]
3616    pub threshold: ::core::option::Option<DoubleConstant>,
3617    #[prost(message, optional, tag = "4")]
3618    pub tolerance: ::core::option::Option<DoubleConstant>,
3619    #[prost(message, optional, tag = "5")]
3620    pub persistence: ::core::option::Option<RangePersistence>,
3621}
3622#[derive(Clone, PartialEq, ::prost::Message)]
3623pub struct NumericBoundsRanges {
3624    #[prost(message, optional, boxed, tag = "1")]
3625    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3626    #[prost(message, optional, tag = "2")]
3627    pub lower: ::core::option::Option<DoubleConstant>,
3628    #[prost(message, optional, tag = "3")]
3629    pub upper: ::core::option::Option<DoubleConstant>,
3630    #[prost(enumeration = "NumericBoundsCondition", tag = "4")]
3631    pub condition: i32,
3632    #[prost(message, optional, tag = "5")]
3633    pub persistence: ::core::option::Option<RangePersistence>,
3634}
3635#[derive(Clone, PartialEq, ::prost::Message)]
3636pub struct CategoricalMembershipRanges {
3637    #[prost(message, optional, boxed, tag = "1")]
3638    pub input: ::core::option::Option<::prost::alloc::boxed::Box<CategoricalExpression>>,
3639    #[prost(message, optional, tag = "2")]
3640    pub values: ::core::option::Option<ParameterizedStringSet>,
3641    #[prost(enumeration = "CategoricalMembershipOperation", tag = "3")]
3642    pub operation: i32,
3643    #[prost(message, optional, tag = "4")]
3644    pub persistence: ::core::option::Option<RangePersistence>,
3645}
3646#[derive(Clone, PartialEq, ::prost::Message)]
3647pub struct NumericEqualityRanges {
3648    #[prost(message, repeated, tag = "1")]
3649    pub inputs: ::prost::alloc::vec::Vec<NumericExpression>,
3650    #[prost(enumeration = "SeriesEqualityMode", tag = "2")]
3651    pub mode: i32,
3652    #[prost(message, optional, tag = "3")]
3653    pub tolerance: ::core::option::Option<DoubleConstant>,
3654    #[prost(message, optional, tag = "4")]
3655    pub persistence: ::core::option::Option<RangePersistence>,
3656    #[deprecated]
3657    #[prost(message, optional, tag = "5")]
3658    pub interpolation: ::core::option::Option<InterpolationConfiguration>,
3659}
3660#[derive(Clone, PartialEq, ::prost::Message)]
3661pub struct CategoricalEqualityRanges {
3662    #[prost(message, repeated, tag = "1")]
3663    pub inputs: ::prost::alloc::vec::Vec<CategoricalExpression>,
3664    #[prost(enumeration = "SeriesEqualityMode", tag = "2")]
3665    pub mode: i32,
3666    #[prost(message, optional, tag = "3")]
3667    pub persistence: ::core::option::Option<RangePersistence>,
3668    #[deprecated]
3669    #[prost(message, optional, tag = "4")]
3670    pub interpolation: ::core::option::Option<InterpolationConfiguration>,
3671}
3672#[derive(Clone, PartialEq, ::prost::Message)]
3673pub struct NumericCrossoverRanges {
3674    #[prost(message, optional, boxed, tag = "1")]
3675    pub left: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3676    #[prost(message, optional, boxed, tag = "2")]
3677    pub right: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3678}
3679#[derive(Clone, PartialEq, ::prost::Message)]
3680pub struct SeriesChangeRanges {
3681    #[prost(message, optional, boxed, tag = "1")]
3682    pub input: ::core::option::Option<::prost::alloc::boxed::Box<SeriesExpression>>,
3683}
3684#[derive(Clone, PartialEq, ::prost::Message)]
3685pub struct SeriesStalenessRanges {
3686    #[prost(message, optional, boxed, tag = "1")]
3687    pub input: ::core::option::Option<::prost::alloc::boxed::Box<SeriesExpression>>,
3688    #[prost(message, optional, tag = "2")]
3689    pub threshold: ::core::option::Option<DurationInput>,
3690    #[prost(message, optional, tag = "3")]
3691    pub start: ::core::option::Option<TimestampConstant>,
3692    #[deprecated]
3693    #[prost(message, optional, tag = "4")]
3694    pub end: ::core::option::Option<TimestampConstant>,
3695}
3696#[derive(Clone, PartialEq, ::prost::Message)]
3697pub struct RangeDurationFilter {
3698    #[prost(message, optional, boxed, tag = "1")]
3699    pub input: ::core::option::Option<::prost::alloc::boxed::Box<RangeExpression>>,
3700    #[prost(message, optional, tag = "2")]
3701    pub threshold: ::core::option::Option<DurationInput>,
3702    #[prost(enumeration = "ComparisonOperation", tag = "3")]
3703    pub comparison: i32,
3704    #[prost(enumeration = "UnboundedDurationComparison", optional, tag = "4")]
3705    pub unbounded: ::core::option::Option<i32>,
3706}
3707#[derive(Clone, PartialEq, ::prost::Message)]
3708pub struct NumericStabilityRanges {
3709    #[prost(message, optional, boxed, tag = "1")]
3710    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3711    #[prost(message, optional, tag = "2")]
3712    pub window: ::core::option::Option<DurationInput>,
3713    #[prost(message, optional, tag = "3")]
3714    pub min_points: ::core::option::Option<IntegerConstant>,
3715    #[prost(message, optional, tag = "4")]
3716    pub threshold: ::core::option::Option<SpreadThreshold>,
3717}
3718#[derive(Clone, PartialEq, ::prost::Message)]
3719pub struct NumericExtremaRanges {
3720    #[prost(message, optional, boxed, tag = "1")]
3721    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3722    #[prost(enumeration = "ExtremaSelection", tag = "2")]
3723    pub selection: i32,
3724    #[prost(message, optional, tag = "3")]
3725    pub min_prominence: ::core::option::Option<DoubleConstant>,
3726}
3727#[derive(Clone, PartialEq, ::prost::Message)]
3728pub struct RangeExpressionCollection {
3729    #[prost(message, repeated, tag = "1")]
3730    pub inputs: ::prost::alloc::vec::Vec<RangeExpression>,
3731}
3732#[derive(Clone, PartialEq, ::prost::Message)]
3733pub struct RangePaddingExpression {
3734    #[prost(message, optional, boxed, tag = "1")]
3735    pub input: ::core::option::Option<::prost::alloc::boxed::Box<RangeExpression>>,
3736    #[prost(message, optional, tag = "2")]
3737    pub padding: ::core::option::Option<DurationInput>,
3738    #[prost(enumeration = "RangePaddingSides", optional, tag = "3")]
3739    pub sides: ::core::option::Option<i32>,
3740}
3741#[derive(Clone, PartialEq, ::prost::Message)]
3742pub struct RangeStatisticsExpression {
3743    #[prost(message, optional, boxed, tag = "1")]
3744    pub ranges: ::core::option::Option<::prost::alloc::boxed::Box<RangeExpression>>,
3745    #[prost(message, optional, boxed, tag = "2")]
3746    pub input: ::core::option::Option<::prost::alloc::boxed::Box<NumericExpression>>,
3747    #[prost(oneof = "range_statistics_expression::Statistics", tags = "3, 4")]
3748    pub statistics: ::core::option::Option<range_statistics_expression::Statistics>,
3749}
3750/// Nested message and enum types in `RangeStatisticsExpression`.
3751pub mod range_statistics_expression {
3752    #[derive(Clone, PartialEq, ::prost::Oneof)]
3753    pub enum Statistics {
3754        #[prost(message, tag = "3")]
3755        Reduction(super::NumericReduction),
3756        #[prost(message, tag = "4")]
3757        All(super::AllStatistics),
3758    }
3759}
3760#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3761pub struct AllStatistics {}
3762#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3763#[repr(i32)]
3764pub enum ComputeAlignmentStrategy {
3765    Unspecified = 0,
3766    DriverSeries = 1,
3767    Union = 2,
3768}
3769impl ComputeAlignmentStrategy {
3770    /// String value of the enum field names used in the ProtoBuf definition.
3771    ///
3772    /// The values are not transformed in any way and thus are considered stable
3773    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3774    pub fn as_str_name(&self) -> &'static str {
3775        match self {
3776            Self::Unspecified => "COMPUTE_ALIGNMENT_STRATEGY_UNSPECIFIED",
3777            Self::DriverSeries => "COMPUTE_ALIGNMENT_STRATEGY_DRIVER_SERIES",
3778            Self::Union => "COMPUTE_ALIGNMENT_STRATEGY_UNION",
3779        }
3780    }
3781    /// Creates an enum from field names used in the ProtoBuf definition.
3782    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3783        match value {
3784            "COMPUTE_ALIGNMENT_STRATEGY_UNSPECIFIED" => Some(Self::Unspecified),
3785            "COMPUTE_ALIGNMENT_STRATEGY_DRIVER_SERIES" => Some(Self::DriverSeries),
3786            "COMPUTE_ALIGNMENT_STRATEGY_UNION" => Some(Self::Union),
3787            _ => None,
3788        }
3789    }
3790}
3791#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3792#[repr(i32)]
3793pub enum BuiltinCurveForm {
3794    Unspecified = 0,
3795    Exponential = 1,
3796    Logarithmic = 2,
3797    Power = 3,
3798}
3799impl BuiltinCurveForm {
3800    /// String value of the enum field names used in the ProtoBuf definition.
3801    ///
3802    /// The values are not transformed in any way and thus are considered stable
3803    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3804    pub fn as_str_name(&self) -> &'static str {
3805        match self {
3806            Self::Unspecified => "BUILTIN_CURVE_FORM_UNSPECIFIED",
3807            Self::Exponential => "BUILTIN_CURVE_FORM_EXPONENTIAL",
3808            Self::Logarithmic => "BUILTIN_CURVE_FORM_LOGARITHMIC",
3809            Self::Power => "BUILTIN_CURVE_FORM_POWER",
3810        }
3811    }
3812    /// Creates an enum from field names used in the ProtoBuf definition.
3813    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3814        match value {
3815            "BUILTIN_CURVE_FORM_UNSPECIFIED" => Some(Self::Unspecified),
3816            "BUILTIN_CURVE_FORM_EXPONENTIAL" => Some(Self::Exponential),
3817            "BUILTIN_CURVE_FORM_LOGARITHMIC" => Some(Self::Logarithmic),
3818            "BUILTIN_CURVE_FORM_POWER" => Some(Self::Power),
3819            _ => None,
3820        }
3821    }
3822}
3823#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3824#[repr(i32)]
3825pub enum UnboundedRangePolicy {
3826    Unspecified = 0,
3827    ClampToWindow = 1,
3828    Drop = 2,
3829}
3830impl UnboundedRangePolicy {
3831    /// String value of the enum field names used in the ProtoBuf definition.
3832    ///
3833    /// The values are not transformed in any way and thus are considered stable
3834    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3835    pub fn as_str_name(&self) -> &'static str {
3836        match self {
3837            Self::Unspecified => "UNBOUNDED_RANGE_POLICY_UNSPECIFIED",
3838            Self::ClampToWindow => "UNBOUNDED_RANGE_POLICY_CLAMP_TO_WINDOW",
3839            Self::Drop => "UNBOUNDED_RANGE_POLICY_DROP",
3840        }
3841    }
3842    /// Creates an enum from field names used in the ProtoBuf definition.
3843    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3844        match value {
3845            "UNBOUNDED_RANGE_POLICY_UNSPECIFIED" => Some(Self::Unspecified),
3846            "UNBOUNDED_RANGE_POLICY_CLAMP_TO_WINDOW" => Some(Self::ClampToWindow),
3847            "UNBOUNDED_RANGE_POLICY_DROP" => Some(Self::Drop),
3848            _ => None,
3849        }
3850    }
3851}
3852#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3853#[repr(i32)]
3854pub enum ChronologicalOrder {
3855    Unspecified = 0,
3856    Ascending = 1,
3857    Descending = 2,
3858}
3859impl ChronologicalOrder {
3860    /// String value of the enum field names used in the ProtoBuf definition.
3861    ///
3862    /// The values are not transformed in any way and thus are considered stable
3863    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3864    pub fn as_str_name(&self) -> &'static str {
3865        match self {
3866            Self::Unspecified => "CHRONOLOGICAL_ORDER_UNSPECIFIED",
3867            Self::Ascending => "CHRONOLOGICAL_ORDER_ASCENDING",
3868            Self::Descending => "CHRONOLOGICAL_ORDER_DESCENDING",
3869        }
3870    }
3871    /// Creates an enum from field names used in the ProtoBuf definition.
3872    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3873        match value {
3874            "CHRONOLOGICAL_ORDER_UNSPECIFIED" => Some(Self::Unspecified),
3875            "CHRONOLOGICAL_ORDER_ASCENDING" => Some(Self::Ascending),
3876            "CHRONOLOGICAL_ORDER_DESCENDING" => Some(Self::Descending),
3877            _ => None,
3878        }
3879    }
3880}
3881#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3882#[repr(i32)]
3883pub enum UnaryNumericOperation {
3884    Unspecified = 0,
3885    Abs = 1,
3886    Negate = 2,
3887    Cos = 3,
3888    Sin = 4,
3889    Tan = 5,
3890    Acos = 6,
3891    Asin = 7,
3892    Ln = 8,
3893    Log10 = 9,
3894    Sqrt = 10,
3895}
3896impl UnaryNumericOperation {
3897    /// String value of the enum field names used in the ProtoBuf definition.
3898    ///
3899    /// The values are not transformed in any way and thus are considered stable
3900    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3901    pub fn as_str_name(&self) -> &'static str {
3902        match self {
3903            Self::Unspecified => "UNARY_NUMERIC_OPERATION_UNSPECIFIED",
3904            Self::Abs => "UNARY_NUMERIC_OPERATION_ABS",
3905            Self::Negate => "UNARY_NUMERIC_OPERATION_NEGATE",
3906            Self::Cos => "UNARY_NUMERIC_OPERATION_COS",
3907            Self::Sin => "UNARY_NUMERIC_OPERATION_SIN",
3908            Self::Tan => "UNARY_NUMERIC_OPERATION_TAN",
3909            Self::Acos => "UNARY_NUMERIC_OPERATION_ACOS",
3910            Self::Asin => "UNARY_NUMERIC_OPERATION_ASIN",
3911            Self::Ln => "UNARY_NUMERIC_OPERATION_LN",
3912            Self::Log10 => "UNARY_NUMERIC_OPERATION_LOG10",
3913            Self::Sqrt => "UNARY_NUMERIC_OPERATION_SQRT",
3914        }
3915    }
3916    /// Creates an enum from field names used in the ProtoBuf definition.
3917    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3918        match value {
3919            "UNARY_NUMERIC_OPERATION_UNSPECIFIED" => Some(Self::Unspecified),
3920            "UNARY_NUMERIC_OPERATION_ABS" => Some(Self::Abs),
3921            "UNARY_NUMERIC_OPERATION_NEGATE" => Some(Self::Negate),
3922            "UNARY_NUMERIC_OPERATION_COS" => Some(Self::Cos),
3923            "UNARY_NUMERIC_OPERATION_SIN" => Some(Self::Sin),
3924            "UNARY_NUMERIC_OPERATION_TAN" => Some(Self::Tan),
3925            "UNARY_NUMERIC_OPERATION_ACOS" => Some(Self::Acos),
3926            "UNARY_NUMERIC_OPERATION_ASIN" => Some(Self::Asin),
3927            "UNARY_NUMERIC_OPERATION_LN" => Some(Self::Ln),
3928            "UNARY_NUMERIC_OPERATION_LOG10" => Some(Self::Log10),
3929            "UNARY_NUMERIC_OPERATION_SQRT" => Some(Self::Sqrt),
3930            _ => None,
3931        }
3932    }
3933}
3934#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3935#[repr(i32)]
3936pub enum BinaryNumericOperation {
3937    Unspecified = 0,
3938    Add = 1,
3939    Subtract = 2,
3940    Multiply = 3,
3941    Divide = 4,
3942    FloorDivide = 5,
3943    Power = 6,
3944    Modulo = 7,
3945    Atan2 = 8,
3946}
3947impl BinaryNumericOperation {
3948    /// String value of the enum field names used in the ProtoBuf definition.
3949    ///
3950    /// The values are not transformed in any way and thus are considered stable
3951    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3952    pub fn as_str_name(&self) -> &'static str {
3953        match self {
3954            Self::Unspecified => "BINARY_NUMERIC_OPERATION_UNSPECIFIED",
3955            Self::Add => "BINARY_NUMERIC_OPERATION_ADD",
3956            Self::Subtract => "BINARY_NUMERIC_OPERATION_SUBTRACT",
3957            Self::Multiply => "BINARY_NUMERIC_OPERATION_MULTIPLY",
3958            Self::Divide => "BINARY_NUMERIC_OPERATION_DIVIDE",
3959            Self::FloorDivide => "BINARY_NUMERIC_OPERATION_FLOOR_DIVIDE",
3960            Self::Power => "BINARY_NUMERIC_OPERATION_POWER",
3961            Self::Modulo => "BINARY_NUMERIC_OPERATION_MODULO",
3962            Self::Atan2 => "BINARY_NUMERIC_OPERATION_ATAN2",
3963        }
3964    }
3965    /// Creates an enum from field names used in the ProtoBuf definition.
3966    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3967        match value {
3968            "BINARY_NUMERIC_OPERATION_UNSPECIFIED" => Some(Self::Unspecified),
3969            "BINARY_NUMERIC_OPERATION_ADD" => Some(Self::Add),
3970            "BINARY_NUMERIC_OPERATION_SUBTRACT" => Some(Self::Subtract),
3971            "BINARY_NUMERIC_OPERATION_MULTIPLY" => Some(Self::Multiply),
3972            "BINARY_NUMERIC_OPERATION_DIVIDE" => Some(Self::Divide),
3973            "BINARY_NUMERIC_OPERATION_FLOOR_DIVIDE" => Some(Self::FloorDivide),
3974            "BINARY_NUMERIC_OPERATION_POWER" => Some(Self::Power),
3975            "BINARY_NUMERIC_OPERATION_MODULO" => Some(Self::Modulo),
3976            "BINARY_NUMERIC_OPERATION_ATAN2" => Some(Self::Atan2),
3977            _ => None,
3978        }
3979    }
3980}
3981#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3982#[repr(i32)]
3983pub enum NaryNumericOperation {
3984    Unspecified = 0,
3985    Max = 1,
3986    Mean = 2,
3987    Min = 3,
3988    Sum = 4,
3989    Product = 5,
3990}
3991impl NaryNumericOperation {
3992    /// String value of the enum field names used in the ProtoBuf definition.
3993    ///
3994    /// The values are not transformed in any way and thus are considered stable
3995    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3996    pub fn as_str_name(&self) -> &'static str {
3997        match self {
3998            Self::Unspecified => "NARY_NUMERIC_OPERATION_UNSPECIFIED",
3999            Self::Max => "NARY_NUMERIC_OPERATION_MAX",
4000            Self::Mean => "NARY_NUMERIC_OPERATION_MEAN",
4001            Self::Min => "NARY_NUMERIC_OPERATION_MIN",
4002            Self::Sum => "NARY_NUMERIC_OPERATION_SUM",
4003            Self::Product => "NARY_NUMERIC_OPERATION_PRODUCT",
4004        }
4005    }
4006    /// Creates an enum from field names used in the ProtoBuf definition.
4007    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4008        match value {
4009            "NARY_NUMERIC_OPERATION_UNSPECIFIED" => Some(Self::Unspecified),
4010            "NARY_NUMERIC_OPERATION_MAX" => Some(Self::Max),
4011            "NARY_NUMERIC_OPERATION_MEAN" => Some(Self::Mean),
4012            "NARY_NUMERIC_OPERATION_MIN" => Some(Self::Min),
4013            "NARY_NUMERIC_OPERATION_SUM" => Some(Self::Sum),
4014            "NARY_NUMERIC_OPERATION_PRODUCT" => Some(Self::Product),
4015            _ => None,
4016        }
4017    }
4018}
4019#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4020#[repr(i32)]
4021pub enum BitwiseOperation {
4022    Unspecified = 0,
4023    And = 1,
4024    Or = 2,
4025    Xor = 3,
4026    ShiftRight = 4,
4027    ShiftLeft = 5,
4028    Test = 6,
4029}
4030impl BitwiseOperation {
4031    /// String value of the enum field names used in the ProtoBuf definition.
4032    ///
4033    /// The values are not transformed in any way and thus are considered stable
4034    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4035    pub fn as_str_name(&self) -> &'static str {
4036        match self {
4037            Self::Unspecified => "BITWISE_OPERATION_UNSPECIFIED",
4038            Self::And => "BITWISE_OPERATION_AND",
4039            Self::Or => "BITWISE_OPERATION_OR",
4040            Self::Xor => "BITWISE_OPERATION_XOR",
4041            Self::ShiftRight => "BITWISE_OPERATION_SHIFT_RIGHT",
4042            Self::ShiftLeft => "BITWISE_OPERATION_SHIFT_LEFT",
4043            Self::Test => "BITWISE_OPERATION_TEST",
4044        }
4045    }
4046    /// Creates an enum from field names used in the ProtoBuf definition.
4047    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4048        match value {
4049            "BITWISE_OPERATION_UNSPECIFIED" => Some(Self::Unspecified),
4050            "BITWISE_OPERATION_AND" => Some(Self::And),
4051            "BITWISE_OPERATION_OR" => Some(Self::Or),
4052            "BITWISE_OPERATION_XOR" => Some(Self::Xor),
4053            "BITWISE_OPERATION_SHIFT_RIGHT" => Some(Self::ShiftRight),
4054            "BITWISE_OPERATION_SHIFT_LEFT" => Some(Self::ShiftLeft),
4055            "BITWISE_OPERATION_TEST" => Some(Self::Test),
4056            _ => None,
4057        }
4058    }
4059}
4060#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4061#[repr(i32)]
4062pub enum ComparisonOperation {
4063    Unspecified = 0,
4064    GreaterThan = 1,
4065    LessThan = 2,
4066    EqualTo = 3,
4067    NotEqualTo = 4,
4068    GreaterThanOrEqualTo = 5,
4069    LessThanOrEqualTo = 6,
4070}
4071impl ComparisonOperation {
4072    /// String value of the enum field names used in the ProtoBuf definition.
4073    ///
4074    /// The values are not transformed in any way and thus are considered stable
4075    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4076    pub fn as_str_name(&self) -> &'static str {
4077        match self {
4078            Self::Unspecified => "COMPARISON_OPERATION_UNSPECIFIED",
4079            Self::GreaterThan => "COMPARISON_OPERATION_GREATER_THAN",
4080            Self::LessThan => "COMPARISON_OPERATION_LESS_THAN",
4081            Self::EqualTo => "COMPARISON_OPERATION_EQUAL_TO",
4082            Self::NotEqualTo => "COMPARISON_OPERATION_NOT_EQUAL_TO",
4083            Self::GreaterThanOrEqualTo => "COMPARISON_OPERATION_GREATER_THAN_OR_EQUAL_TO",
4084            Self::LessThanOrEqualTo => "COMPARISON_OPERATION_LESS_THAN_OR_EQUAL_TO",
4085        }
4086    }
4087    /// Creates an enum from field names used in the ProtoBuf definition.
4088    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4089        match value {
4090            "COMPARISON_OPERATION_UNSPECIFIED" => Some(Self::Unspecified),
4091            "COMPARISON_OPERATION_GREATER_THAN" => Some(Self::GreaterThan),
4092            "COMPARISON_OPERATION_LESS_THAN" => Some(Self::LessThan),
4093            "COMPARISON_OPERATION_EQUAL_TO" => Some(Self::EqualTo),
4094            "COMPARISON_OPERATION_NOT_EQUAL_TO" => Some(Self::NotEqualTo),
4095            "COMPARISON_OPERATION_GREATER_THAN_OR_EQUAL_TO" => {
4096                Some(Self::GreaterThanOrEqualTo)
4097            }
4098            "COMPARISON_OPERATION_LESS_THAN_OR_EQUAL_TO" => Some(Self::LessThanOrEqualTo),
4099            _ => None,
4100        }
4101    }
4102}
4103#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4104#[repr(i32)]
4105pub enum LogicalOperation {
4106    Unspecified = 0,
4107    And = 1,
4108    Or = 2,
4109}
4110impl LogicalOperation {
4111    /// String value of the enum field names used in the ProtoBuf definition.
4112    ///
4113    /// The values are not transformed in any way and thus are considered stable
4114    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4115    pub fn as_str_name(&self) -> &'static str {
4116        match self {
4117            Self::Unspecified => "LOGICAL_OPERATION_UNSPECIFIED",
4118            Self::And => "LOGICAL_OPERATION_AND",
4119            Self::Or => "LOGICAL_OPERATION_OR",
4120        }
4121    }
4122    /// Creates an enum from field names used in the ProtoBuf definition.
4123    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4124        match value {
4125            "LOGICAL_OPERATION_UNSPECIFIED" => Some(Self::Unspecified),
4126            "LOGICAL_OPERATION_AND" => Some(Self::And),
4127            "LOGICAL_OPERATION_OR" => Some(Self::Or),
4128            _ => None,
4129        }
4130    }
4131}
4132#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4133#[repr(i32)]
4134pub enum NegativeValuePolicy {
4135    Unspecified = 0,
4136    Allow = 1,
4137    ClampToZero = 2,
4138    Exclude = 3,
4139}
4140impl NegativeValuePolicy {
4141    /// String value of the enum field names used in the ProtoBuf definition.
4142    ///
4143    /// The values are not transformed in any way and thus are considered stable
4144    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4145    pub fn as_str_name(&self) -> &'static str {
4146        match self {
4147            Self::Unspecified => "NEGATIVE_VALUE_POLICY_UNSPECIFIED",
4148            Self::Allow => "NEGATIVE_VALUE_POLICY_ALLOW",
4149            Self::ClampToZero => "NEGATIVE_VALUE_POLICY_CLAMP_TO_ZERO",
4150            Self::Exclude => "NEGATIVE_VALUE_POLICY_EXCLUDE",
4151        }
4152    }
4153    /// Creates an enum from field names used in the ProtoBuf definition.
4154    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4155        match value {
4156            "NEGATIVE_VALUE_POLICY_UNSPECIFIED" => Some(Self::Unspecified),
4157            "NEGATIVE_VALUE_POLICY_ALLOW" => Some(Self::Allow),
4158            "NEGATIVE_VALUE_POLICY_CLAMP_TO_ZERO" => Some(Self::ClampToZero),
4159            "NEGATIVE_VALUE_POLICY_EXCLUDE" => Some(Self::Exclude),
4160            _ => None,
4161        }
4162    }
4163}
4164#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4165#[repr(i32)]
4166pub enum PointLimitOrder {
4167    Unspecified = 0,
4168    Newest = 1,
4169    Oldest = 2,
4170}
4171impl PointLimitOrder {
4172    /// String value of the enum field names used in the ProtoBuf definition.
4173    ///
4174    /// The values are not transformed in any way and thus are considered stable
4175    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4176    pub fn as_str_name(&self) -> &'static str {
4177        match self {
4178            Self::Unspecified => "POINT_LIMIT_ORDER_UNSPECIFIED",
4179            Self::Newest => "POINT_LIMIT_ORDER_NEWEST",
4180            Self::Oldest => "POINT_LIMIT_ORDER_OLDEST",
4181        }
4182    }
4183    /// Creates an enum from field names used in the ProtoBuf definition.
4184    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4185        match value {
4186            "POINT_LIMIT_ORDER_UNSPECIFIED" => Some(Self::Unspecified),
4187            "POINT_LIMIT_ORDER_NEWEST" => Some(Self::Newest),
4188            "POINT_LIMIT_ORDER_OLDEST" => Some(Self::Oldest),
4189            _ => None,
4190        }
4191    }
4192}
4193#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4194#[repr(i32)]
4195pub enum ApproximateComparisonOperation {
4196    Unspecified = 0,
4197    EqualTo = 1,
4198    NotEqualTo = 2,
4199}
4200impl ApproximateComparisonOperation {
4201    /// String value of the enum field names used in the ProtoBuf definition.
4202    ///
4203    /// The values are not transformed in any way and thus are considered stable
4204    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4205    pub fn as_str_name(&self) -> &'static str {
4206        match self {
4207            Self::Unspecified => "APPROXIMATE_COMPARISON_OPERATION_UNSPECIFIED",
4208            Self::EqualTo => "APPROXIMATE_COMPARISON_OPERATION_EQUAL_TO",
4209            Self::NotEqualTo => "APPROXIMATE_COMPARISON_OPERATION_NOT_EQUAL_TO",
4210        }
4211    }
4212    /// Creates an enum from field names used in the ProtoBuf definition.
4213    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4214        match value {
4215            "APPROXIMATE_COMPARISON_OPERATION_UNSPECIFIED" => Some(Self::Unspecified),
4216            "APPROXIMATE_COMPARISON_OPERATION_EQUAL_TO" => Some(Self::EqualTo),
4217            "APPROXIMATE_COMPARISON_OPERATION_NOT_EQUAL_TO" => Some(Self::NotEqualTo),
4218            _ => None,
4219        }
4220    }
4221}
4222#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4223#[repr(i32)]
4224pub enum DuplicateMergeOperation {
4225    Unspecified = 0,
4226    Min = 1,
4227    Max = 2,
4228    Mean = 3,
4229    Sum = 4,
4230    Count = 5,
4231    StandardDeviation = 6,
4232    RootMeanSquare = 7,
4233    Reject = 8,
4234}
4235impl DuplicateMergeOperation {
4236    /// String value of the enum field names used in the ProtoBuf definition.
4237    ///
4238    /// The values are not transformed in any way and thus are considered stable
4239    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4240    pub fn as_str_name(&self) -> &'static str {
4241        match self {
4242            Self::Unspecified => "DUPLICATE_MERGE_OPERATION_UNSPECIFIED",
4243            Self::Min => "DUPLICATE_MERGE_OPERATION_MIN",
4244            Self::Max => "DUPLICATE_MERGE_OPERATION_MAX",
4245            Self::Mean => "DUPLICATE_MERGE_OPERATION_MEAN",
4246            Self::Sum => "DUPLICATE_MERGE_OPERATION_SUM",
4247            Self::Count => "DUPLICATE_MERGE_OPERATION_COUNT",
4248            Self::StandardDeviation => "DUPLICATE_MERGE_OPERATION_STANDARD_DEVIATION",
4249            Self::RootMeanSquare => "DUPLICATE_MERGE_OPERATION_ROOT_MEAN_SQUARE",
4250            Self::Reject => "DUPLICATE_MERGE_OPERATION_REJECT",
4251        }
4252    }
4253    /// Creates an enum from field names used in the ProtoBuf definition.
4254    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4255        match value {
4256            "DUPLICATE_MERGE_OPERATION_UNSPECIFIED" => Some(Self::Unspecified),
4257            "DUPLICATE_MERGE_OPERATION_MIN" => Some(Self::Min),
4258            "DUPLICATE_MERGE_OPERATION_MAX" => Some(Self::Max),
4259            "DUPLICATE_MERGE_OPERATION_MEAN" => Some(Self::Mean),
4260            "DUPLICATE_MERGE_OPERATION_SUM" => Some(Self::Sum),
4261            "DUPLICATE_MERGE_OPERATION_COUNT" => Some(Self::Count),
4262            "DUPLICATE_MERGE_OPERATION_STANDARD_DEVIATION" => {
4263                Some(Self::StandardDeviation)
4264            }
4265            "DUPLICATE_MERGE_OPERATION_ROOT_MEAN_SQUARE" => Some(Self::RootMeanSquare),
4266            "DUPLICATE_MERGE_OPERATION_REJECT" => Some(Self::Reject),
4267            _ => None,
4268        }
4269    }
4270}
4271#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4272#[repr(i32)]
4273pub enum LiteralBitwiseOperation {
4274    Unspecified = 0,
4275    And = 1,
4276    Or = 2,
4277    Xor = 3,
4278}
4279impl LiteralBitwiseOperation {
4280    /// String value of the enum field names used in the ProtoBuf definition.
4281    ///
4282    /// The values are not transformed in any way and thus are considered stable
4283    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4284    pub fn as_str_name(&self) -> &'static str {
4285        match self {
4286            Self::Unspecified => "LITERAL_BITWISE_OPERATION_UNSPECIFIED",
4287            Self::And => "LITERAL_BITWISE_OPERATION_AND",
4288            Self::Or => "LITERAL_BITWISE_OPERATION_OR",
4289            Self::Xor => "LITERAL_BITWISE_OPERATION_XOR",
4290        }
4291    }
4292    /// Creates an enum from field names used in the ProtoBuf definition.
4293    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4294        match value {
4295            "LITERAL_BITWISE_OPERATION_UNSPECIFIED" => Some(Self::Unspecified),
4296            "LITERAL_BITWISE_OPERATION_AND" => Some(Self::And),
4297            "LITERAL_BITWISE_OPERATION_OR" => Some(Self::Or),
4298            "LITERAL_BITWISE_OPERATION_XOR" => Some(Self::Xor),
4299            _ => None,
4300        }
4301    }
4302}
4303#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4304#[repr(i32)]
4305pub enum ShiftDirection {
4306    Unspecified = 0,
4307    Left = 1,
4308    Right = 2,
4309}
4310impl ShiftDirection {
4311    /// String value of the enum field names used in the ProtoBuf definition.
4312    ///
4313    /// The values are not transformed in any way and thus are considered stable
4314    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4315    pub fn as_str_name(&self) -> &'static str {
4316        match self {
4317            Self::Unspecified => "SHIFT_DIRECTION_UNSPECIFIED",
4318            Self::Left => "SHIFT_DIRECTION_LEFT",
4319            Self::Right => "SHIFT_DIRECTION_RIGHT",
4320        }
4321    }
4322    /// Creates an enum from field names used in the ProtoBuf definition.
4323    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4324        match value {
4325            "SHIFT_DIRECTION_UNSPECIFIED" => Some(Self::Unspecified),
4326            "SHIFT_DIRECTION_LEFT" => Some(Self::Left),
4327            "SHIFT_DIRECTION_RIGHT" => Some(Self::Right),
4328            _ => None,
4329        }
4330    }
4331}
4332#[derive(Clone, PartialEq, ::prost::Message)]
4333pub struct ScalarValue {
4334    #[prost(oneof = "scalar_value::Kind", tags = "1, 2, 3")]
4335    pub kind: ::core::option::Option<scalar_value::Kind>,
4336}
4337/// Nested message and enum types in `ScalarValue`.
4338pub mod scalar_value {
4339    #[derive(Clone, PartialEq, ::prost::Oneof)]
4340    pub enum Kind {
4341        #[prost(string, tag = "1")]
4342        StringValue(::prost::alloc::string::String),
4343        #[prost(double, tag = "2")]
4344        Float64Value(f64),
4345        #[prost(int64, tag = "3")]
4346        Int64Value(i64),
4347    }
4348}