Skip to main content

nominal_api/proto/
nominal.procedures.v1.rs

1// This file is @generated by prost-build.
2/// ProcedureState is the versioned state of a procedure template.
3#[derive(Clone, PartialEq, ::prost::Message)]
4pub struct ProcedureState {
5    /// TODO(niwong): global_fields is deprecated, remove in a future version.
6    #[prost(map = "string, message", tag = "1")]
7    pub global_fields: ::std::collections::HashMap<
8        ::prost::alloc::string::String,
9        FormField,
10    >,
11    /// Global fields are set at the beginning of the procedure execution.
12    /// These fields can be referenced by any step in the procedure by using {field_id}.
13    #[prost(message, repeated, tag = "5")]
14    pub new_global_fields: ::prost::alloc::vec::Vec<FormField>,
15    /// A map from node ID to the node.
16    #[prost(map = "string, message", tag = "2")]
17    pub nodes: ::std::collections::HashMap<
18        ::prost::alloc::string::String,
19        ProcedureNode,
20    >,
21    /// Section edges represent the visual grouping of sections and steps.
22    /// All keys are IDs for section nodes, and all values are lists of IDs for section or step nodes.
23    /// { A, \[B, C\] } means that section A visually groups nodes B and C together.
24    #[prost(map = "string, message", tag = "3")]
25    pub section_edges: ::std::collections::HashMap<
26        ::prost::alloc::string::String,
27        NodeList,
28    >,
29    /// Step edges represent the dependencies between steps.
30    /// All keys and values are IDs for step nodes.
31    /// { A, \[B, C\] } means that steps B and C depend on step A to complete to be started
32    #[prost(map = "string, message", tag = "4")]
33    pub step_edges: ::std::collections::HashMap<
34        ::prost::alloc::string::String,
35        NodeList,
36    >,
37}
38/// A simpler representation of the procedure graph that is used for display in a UI.
39#[derive(Clone, PartialEq, ::prost::Message)]
40pub struct ProcedureDisplayGraph {
41    /// Sections or steps that do not belong to any parent sections.
42    /// This is ordered in a topological ordering of steps.
43    #[prost(string, repeated, tag = "1")]
44    pub top_level_nodes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
45    /// Map of section node IDs to their topologically sorted children
46    #[prost(map = "string, message", tag = "2")]
47    pub section_to_sorted_children: ::std::collections::HashMap<
48        ::prost::alloc::string::String,
49        NodeList,
50    >,
51}
52/// A simplified version of procedure state that is currently used for procedure authoring.
53/// In this form, the graph is a completely linear structure where each step depends solely
54/// on the preceding step.
55#[derive(Clone, PartialEq, ::prost::Message)]
56pub struct NestedProcedure {
57    /// Title of the procedure
58    #[prost(string, tag = "1")]
59    pub title: ::prost::alloc::string::String,
60    /// Optional long-form description for the procedure
61    #[prost(string, optional, tag = "2")]
62    pub description: ::core::option::Option<::prost::alloc::string::String>,
63    /// Steps in the procedure
64    #[prost(message, repeated, tag = "3")]
65    pub steps: ::prost::alloc::vec::Vec<NestedProcedureNode>,
66    /// TODO(niwong): global_fields is deprecated, remove in a future version.
67    #[prost(map = "string, message", tag = "4")]
68    pub global_fields: ::std::collections::HashMap<
69        ::prost::alloc::string::String,
70        FormField,
71    >,
72    /// Global fields are set at the beginning of the procedure execution.
73    /// These fields can be referenced by any step in the procedure by using {field_id}.
74    #[prost(message, repeated, tag = "5")]
75    pub new_global_fields: ::prost::alloc::vec::Vec<FormField>,
76}
77/// A list of node IDs.
78#[derive(Clone, PartialEq, ::prost::Message)]
79pub struct NodeList {
80    #[prost(string, repeated, tag = "1")]
81    pub node_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
82}
83/// A procedure node is either a section or a step.
84#[derive(Clone, PartialEq, ::prost::Message)]
85pub struct ProcedureNode {
86    #[prost(oneof = "procedure_node::Node", tags = "1, 2")]
87    pub node: ::core::option::Option<procedure_node::Node>,
88}
89/// Nested message and enum types in `ProcedureNode`.
90pub mod procedure_node {
91    #[derive(Clone, PartialEq, ::prost::Oneof)]
92    pub enum Node {
93        /// A section node provides a visual grouping of other sections and steps.
94        #[prost(message, tag = "1")]
95        Section(super::ProcedureSectionNode),
96        /// A step node represents a step in the procedure.
97        /// It serves as a "template" for the ExecutionStep that will be created during procedure execution.
98        #[prost(message, tag = "2")]
99        Step(super::ProcedureStepNode),
100    }
101}
102/// A procedure section node visually groups other sections and steps.
103#[derive(Clone, PartialEq, ::prost::Message)]
104pub struct ProcedureSectionNode {
105    /// Unique identifier for this node in the procedure graph.
106    #[prost(string, tag = "1")]
107    pub id: ::prost::alloc::string::String,
108    /// Title of this section
109    #[prost(string, tag = "2")]
110    pub title: ::prost::alloc::string::String,
111    /// Optional long-form description for this section
112    #[prost(string, optional, tag = "3")]
113    pub description: ::core::option::Option<::prost::alloc::string::String>,
114}
115/// A procedure step node represents a step in the procedure.
116#[derive(Clone, PartialEq, ::prost::Message)]
117pub struct ProcedureStepNode {
118    /// Unique identifier for this node in the procedure graph.
119    #[prost(string, tag = "1")]
120    pub id: ::prost::alloc::string::String,
121    /// Title of this step
122    #[prost(string, tag = "2")]
123    pub title: ::prost::alloc::string::String,
124    /// The content of this step.
125    #[prost(message, optional, tag = "3")]
126    pub content: ::core::option::Option<ProcedureStepContent>,
127    /// Optional long-form description for this step
128    #[prost(string, optional, tag = "5")]
129    pub description: ::core::option::Option<::prost::alloc::string::String>,
130    /// is_required defaults to false, meaning that the step may be skipped
131    #[prost(bool, optional, tag = "6")]
132    pub is_required: ::core::option::Option<bool>,
133    /// Configuration for if and how the step should automatically transition from NOT_STARTED to IN_PROGRESS
134    /// By default, this will be `all_parents`.
135    #[prost(message, optional, tag = "7")]
136    pub auto_start: ::core::option::Option<AutoStartConfig>,
137    /// Configuration for if and how the step should automatically submit the step contents when requirements are met.
138    /// By default, this will be `disabled`.
139    #[prost(message, optional, tag = "8")]
140    pub initial_auto_proceed_config: ::core::option::Option<AutoProceedConfig>,
141    /// Configuration for whether the step will require a condition to be met for the step to be completed
142    /// By default, this is not set, meaning that the step will not wait on any conditions before completing.
143    #[prost(message, optional, tag = "9")]
144    pub success_condition: ::core::option::Option<SuccessCondition>,
145    /// Configuration for the actions to take when the step transitions to a completed state (SUCCEEDED, ERRORED, SKIPPED)
146    /// By default, there are no actions.
147    #[prost(message, repeated, tag = "10")]
148    pub completion_action_configs: ::prost::alloc::vec::Vec<CompletionActionConfig>,
149    /// Optional attachments for the step description
150    #[prost(string, repeated, tag = "11")]
151    pub attachments: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
152}
153/// A section or a step in a NestedProcedure.
154#[derive(Clone, PartialEq, ::prost::Message)]
155pub struct NestedProcedureNode {
156    /// The unique identifier for this step or section
157    #[prost(string, tag = "5")]
158    pub id: ::prost::alloc::string::String,
159    /// Title of this section or step.
160    #[prost(string, tag = "1")]
161    pub title: ::prost::alloc::string::String,
162    /// Optional long-form description for this section or step.
163    #[prost(string, optional, tag = "2")]
164    pub description: ::core::option::Option<::prost::alloc::string::String>,
165    /// If this node is a section, then it can contain other sections and steps.
166    #[prost(message, repeated, tag = "3")]
167    pub steps: ::prost::alloc::vec::Vec<NestedProcedureNode>,
168    /// If this node is a step, then this field contains the step definition.
169    #[prost(message, optional, tag = "4")]
170    pub step: ::core::option::Option<nested_procedure_node::NestedStepNode>,
171}
172/// Nested message and enum types in `NestedProcedureNode`.
173pub mod nested_procedure_node {
174    /// These fields' docs are identical to those of ProcedureStepNode.
175    #[derive(Clone, PartialEq, ::prost::Message)]
176    pub struct NestedStepNode {
177        #[prost(bool, optional, tag = "2")]
178        pub is_required: ::core::option::Option<bool>,
179        #[prost(message, optional, tag = "3")]
180        pub auto_start: ::core::option::Option<super::AutoStartConfig>,
181        #[prost(message, optional, tag = "4")]
182        pub initial_auto_proceed_config: ::core::option::Option<
183            super::AutoProceedConfig,
184        >,
185        #[prost(message, optional, tag = "5")]
186        pub success_condition: ::core::option::Option<super::SuccessCondition>,
187        #[prost(message, repeated, tag = "6")]
188        pub completion_action_configs: ::prost::alloc::vec::Vec<
189            super::CompletionActionConfig,
190        >,
191        /// Optional attachments for the step description
192        #[prost(string, repeated, tag = "51")]
193        pub attachments: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
194        /// This should be kept in sync with ProcedureStepContent.content
195        #[prost(oneof = "nested_step_node::Content", tags = "7, 8, 9, 10")]
196        pub content: ::core::option::Option<nested_step_node::Content>,
197    }
198    /// Nested message and enum types in `NestedStepNode`.
199    pub mod nested_step_node {
200        /// This should be kept in sync with ProcedureStepContent.content
201        #[derive(Clone, PartialEq, ::prost::Oneof)]
202        pub enum Content {
203            #[prost(message, tag = "7")]
204            Form(super::super::FormStep),
205            #[prost(message, tag = "8")]
206            StartIngest(super::super::StartIngestStep),
207            #[prost(message, tag = "9")]
208            SelectOrCreateAsset(super::super::SelectOrCreateAssetStep),
209            #[prost(message, tag = "10")]
210            Wait(super::super::WaitStep),
211        }
212    }
213}
214/// AutoStartConfig is a configuration that determines whether a step should be
215/// automatically moved from NOT_STARTED to IN_PROGRESS when some set of criteria are met.
216/// By default this will be `all_parents`
217#[derive(Clone, Copy, PartialEq, ::prost::Message)]
218pub struct AutoStartConfig {
219    #[prost(oneof = "auto_start_config::Config", tags = "1, 2")]
220    pub config: ::core::option::Option<auto_start_config::Config>,
221}
222/// Nested message and enum types in `AutoStartConfig`.
223pub mod auto_start_config {
224    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
225    pub struct AllParents {}
226    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
227    pub struct Disabled {}
228    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
229    pub enum Config {
230        /// The step will start automatically when all parent steps have passed.
231        #[prost(message, tag = "1")]
232        AllParents(AllParents),
233        /// The step will not start automatically.
234        #[prost(message, tag = "2")]
235        Disabled(Disabled),
236    }
237}
238/// AutoProceedConfig is a configuration that determines whether a step should
239/// automatically proceed (submit the contents and check success_conditions)
240/// when some set of criteria are met. By default this will be `disabled`.
241#[derive(Clone, Copy, PartialEq, ::prost::Message)]
242pub struct AutoProceedConfig {
243    #[prost(oneof = "auto_proceed_config::Config", tags = "1, 2")]
244    pub config: ::core::option::Option<auto_proceed_config::Config>,
245}
246/// Nested message and enum types in `AutoProceedConfig`.
247pub mod auto_proceed_config {
248    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
249    pub struct Disabled {}
250    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
251    pub struct Enabled {}
252    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
253    pub enum Config {
254        /// The step will not be automatically completed
255        #[prost(message, tag = "1")]
256        Disabled(Disabled),
257        /// The step will automatically submit the step contents once the requirements are met and
258        /// begin the transition to either PASSED or ERRORED.
259        #[prost(message, tag = "2")]
260        Enabled(Enabled),
261    }
262}
263/// The condition that must be met for a step to succeed after submitting its contents.
264#[derive(Clone, PartialEq, ::prost::Message)]
265pub struct SuccessCondition {
266    #[prost(oneof = "success_condition::Condition", tags = "1, 2, 3, 4, 5")]
267    pub condition: ::core::option::Option<success_condition::Condition>,
268}
269/// Nested message and enum types in `SuccessCondition`.
270pub mod success_condition {
271    #[derive(Clone, PartialEq, ::prost::Oneof)]
272    pub enum Condition {
273        #[prost(message, tag = "1")]
274        And(super::AndSuccessCondition),
275        #[prost(message, tag = "2")]
276        Timer(super::TimerSuccessCondition),
277        #[prost(message, tag = "3")]
278        IngestJob(super::IngestJobSuccessCondition),
279        #[prost(message, tag = "4")]
280        ChannelValidation(super::ChannelValidationSuccessCondition),
281        /// OrSuccessCondition or = 6;
282        #[prost(message, tag = "5")]
283        Webhook(super::WebhookSuccessCondition),
284    }
285}
286/// All conditions within must be met for the step to be succeeded.
287#[derive(Clone, PartialEq, ::prost::Message)]
288pub struct AndSuccessCondition {
289    #[prost(message, repeated, tag = "1")]
290    pub conditions: ::prost::alloc::vec::Vec<SuccessCondition>,
291}
292/// A timer condition that will succeed the step after a specified duration.
293#[derive(Clone, Copy, PartialEq, ::prost::Message)]
294pub struct TimerSuccessCondition {
295    /// Duration in seconds to wait before succeeding the step. This value must be non-negative.
296    /// This duration is a minimum bound; the actual duration may be longer.
297    #[prost(int32, tag = "1")]
298    pub duration_seconds: i32,
299}
300/// The step will succeed when the associated ingest job succeeds.
301/// If the ingest job fails, the step will move to ERRORED.
302#[derive(Clone, PartialEq, ::prost::Message)]
303pub struct IngestJobSuccessCondition {
304    /// The field ID that contains the IngestJobRid of the ingest job to monitor.
305    #[prost(string, tag = "1")]
306    pub field_id: ::prost::alloc::string::String,
307}
308/// Defines a success condition that compares channel data against a threshold value.
309/// The step succeeds when the comparison (channel_value COMPARATOR threshold) evaluates to true
310/// within the timeout period. For example, checking if a channel value is greater than 100.
311#[derive(Clone, PartialEq, ::prost::Message)]
312pub struct ChannelValidationSuccessCondition {
313    /// The channel to validate against the threshold.
314    #[prost(message, optional, tag = "1")]
315    pub channel: ::core::option::Option<
316        channel_validation_success_condition::ChannelLocator,
317    >,
318    /// The comparison operator to use.
319    /// COMPARATOR_UNSPECIFIED should never be used and will be rejected at runtime.
320    #[prost(enumeration = "channel_validation_success_condition::Comparator", tag = "2")]
321    pub comparator: i32,
322    /// The threshold value to compare the channel data against.
323    /// The comparison is: channel_value COMPARATOR threshold
324    /// Using double for better precision. Note: When using COMPARATOR_EQUAL or COMPARATOR_NOT_EQUAL
325    /// with floating-point channel data, be aware of potential precision issues inherent to IEEE 754.
326    #[prost(double, tag = "3")]
327    pub threshold: f64,
328    /// Maximum time in milliseconds to wait for the condition to be satisfied.
329    /// If the timeout expires before the comparison evaluates to true, the step moves to ERRORED.
330    /// Must be greater than zero and at most one hour (3,600,000 milliseconds).
331    #[prost(int32, tag = "4")]
332    pub timeout_millis: i32,
333    /// optionally specify a persistence of individual points
334    #[prost(uint32, optional, tag = "5")]
335    pub point_persistence: ::core::option::Option<u32>,
336    /// optionally specify a persistence duration in milliseconds (max 5 minutes) for which the condition must hold true
337    #[prost(uint32, optional, tag = "6")]
338    pub time_persistence: ::core::option::Option<u32>,
339}
340/// Nested message and enum types in `ChannelValidationSuccessCondition`.
341pub mod channel_validation_success_condition {
342    /// Locates a specific channel within a data source for validation.
343    /// Uses symbolic reference names that are resolved to concrete resources at execution time,
344    /// allowing procedure templates to be defined before the actual data sources exist.
345    /// If the data_source_ref or channel_name cannot be resolved at execution time, the step will
346    /// transition to ERRORED state immediately.
347    #[derive(Clone, PartialEq, ::prost::Message)]
348    pub struct ChannelLocator {
349        /// Symbolic name for the data source (e.g., "main", "test_data").
350        /// This name is resolved to a concrete DataSourceRid at execution time by looking up the name
351        /// in the data scopes (for assets) or data sources (for runs) specified by asset_or_run.
352        /// This is NOT a field reference - it's a literal string that must match a data source ref name.
353        /// Maps to Java type: io.nominal.scout.api.DataSourceRefName
354        #[prost(string, tag = "1")]
355        pub data_source_ref: ::prost::alloc::string::String,
356        /// The name of the channel within the data source to validate.
357        /// Maps to Java type: io.nominal.api.Channel
358        #[prost(string, tag = "2")]
359        pub channel_name: ::prost::alloc::string::String,
360        /// Optional series tags to filter the channel data.
361        /// Used to select specific series when multiple series exist for the same channel name.
362        /// Maps to Java types: io.nominal.api.TagName (key), io.nominal.api.TagValue (value)
363        #[prost(map = "string, string", tag = "3")]
364        pub tags: ::std::collections::HashMap<
365            ::prost::alloc::string::String,
366            ::prost::alloc::string::String,
367        >,
368        /// Specifies the context for evaluating the channel data.
369        /// Must specify exactly one of: asset reference (for asset-scoped data) or run reference (for run-scoped data).
370        #[prost(oneof = "channel_locator::AssetOrRun", tags = "4, 5")]
371        pub asset_or_run: ::core::option::Option<channel_locator::AssetOrRun>,
372    }
373    /// Nested message and enum types in `ChannelLocator`.
374    pub mod channel_locator {
375        /// Specifies the context for evaluating the channel data.
376        /// Must specify exactly one of: asset reference (for asset-scoped data) or run reference (for run-scoped data).
377        #[derive(Clone, PartialEq, ::prost::Oneof)]
378        pub enum AssetOrRun {
379            #[prost(message, tag = "4")]
380            Asset(super::super::AssetReference),
381            #[prost(message, tag = "5")]
382            Run(super::super::RunReference),
383        }
384    }
385    /// Comparison operator to evaluate channel value against threshold.
386    /// The condition is satisfied when: channel_value COMPARATOR threshold
387    /// Example: COMPARATOR_GREATER_THAN with threshold 100.0 means channel_value > 100.0
388    ///
389    /// Evaluation semantics: The most recent channel value within the timeout period is used for comparison.
390    /// If the channel has no data, the condition will continuously retry until timeout_millis expires.
391    #[derive(
392        Clone,
393        Copy,
394        Debug,
395        PartialEq,
396        Eq,
397        Hash,
398        PartialOrd,
399        Ord,
400        ::prost::Enumeration
401    )]
402    #[repr(i32)]
403    pub enum Comparator {
404        /// Unspecified comparator. This is an invalid state and should never be used.
405        /// Required by proto3 convention as the zero value. Will be rejected at runtime.
406        Unspecified = 0,
407        GreaterThan = 1,
408        GreaterThanOrEqual = 2,
409        LessThan = 3,
410        LessThanOrEqual = 4,
411        Equal = 5,
412        NotEqual = 6,
413    }
414    impl Comparator {
415        /// String value of the enum field names used in the ProtoBuf definition.
416        ///
417        /// The values are not transformed in any way and thus are considered stable
418        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
419        pub fn as_str_name(&self) -> &'static str {
420            match self {
421                Self::Unspecified => "COMPARATOR_UNSPECIFIED",
422                Self::GreaterThan => "COMPARATOR_GREATER_THAN",
423                Self::GreaterThanOrEqual => "COMPARATOR_GREATER_THAN_OR_EQUAL",
424                Self::LessThan => "COMPARATOR_LESS_THAN",
425                Self::LessThanOrEqual => "COMPARATOR_LESS_THAN_OR_EQUAL",
426                Self::Equal => "COMPARATOR_EQUAL",
427                Self::NotEqual => "COMPARATOR_NOT_EQUAL",
428            }
429        }
430        /// Creates an enum from field names used in the ProtoBuf definition.
431        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
432            match value {
433                "COMPARATOR_UNSPECIFIED" => Some(Self::Unspecified),
434                "COMPARATOR_GREATER_THAN" => Some(Self::GreaterThan),
435                "COMPARATOR_GREATER_THAN_OR_EQUAL" => Some(Self::GreaterThanOrEqual),
436                "COMPARATOR_LESS_THAN" => Some(Self::LessThan),
437                "COMPARATOR_LESS_THAN_OR_EQUAL" => Some(Self::LessThanOrEqual),
438                "COMPARATOR_EQUAL" => Some(Self::Equal),
439                "COMPARATOR_NOT_EQUAL" => Some(Self::NotEqual),
440                _ => None,
441            }
442        }
443    }
444}
445/// A webhook success condition that waits for external system approval via HTTP webhook.
446/// The step succeeds when the external system responds with 2xx status code.
447///
448/// Failure behavior:
449/// - 4xx responses: Permanent failure, no retry (CLIENT_ERROR)
450/// - 5xx responses: Retry with exponential backoff until max_retries (SERVER_ERROR_MAX_RETRIES_EXCEEDED)
451/// - Network errors: Retry until max_retries (NETWORK_ERROR_MAX_RETRIES_EXCEEDED)
452/// - Timeout: Retry until timeout_seconds exceeded (OVERALL_TIMEOUT_EXCEEDED)
453/// - Redirects: Followed automatically, fails if redirect loop detected (REDIRECT_LOOP)
454#[derive(Clone, PartialEq, ::prost::Message)]
455pub struct WebhookSuccessCondition {
456    /// RID reference to a WebhookIntegration (the advanced integration type with HMAC signing)
457    #[prost(string, tag = "1")]
458    pub integration_rid: ::prost::alloc::string::String,
459    /// Webhook delivery configuration. If not provided, server uses documented defaults.
460    #[prost(message, optional, tag = "2")]
461    pub delivery_config: ::core::option::Option<WebhookDeliveryConfig>,
462    /// Event type to send (e.g., "procedure.step_waiting")
463    #[prost(string, tag = "3")]
464    pub event_type: ::prost::alloc::string::String,
465    /// JSON payload template using Handlebars syntax (<https://handlebarsjs.com/>)
466    /// Supports variable references using {{variable_name}} syntax:
467    /// - {{execution_rid}} - Procedure execution RID
468    /// - {{step_id}} - Current step ID
469    /// - {{step_name}} - Current step name/title
470    /// - {{procedure_name}} - Procedure name
471    /// - {{field_id}} - Any global form field value (e.g., {{environment}}, {{approval_level}})
472    /// - {{asset_rid}} - Asset RID if step has asset context
473    /// - {{asset_name}} - Asset name if step has asset context
474    ///
475    /// Advanced features:
476    /// - Conditionals: {{#if environment}}production mode{{/if}}
477    /// - Loops: {{#each tags}}{{this}}{{/each}}
478    /// - Comparisons: {{#if (eq priority "HIGH")}}urgent{{/if}}
479    /// - Default values: {{default environment "unknown"}}
480    ///
481    /// Example template:
482    /// {
483    ///    "event": "approval_required",
484    ///    "execution_id": "{{execution_rid}}",
485    ///    "step": "{{step_name}}",
486    ///    "environment": "{{environment}}",
487    ///    {{#if asset_name}}
488    ///    "asset": "{{asset_name}}",
489    ///    {{/if}}
490    ///    "is_production": {{#if (eq environment "production")}}true{{else}}false{{/if}}
491    /// }
492    ///
493    /// Variables that cannot be resolved will be replaced with empty string.
494    /// Invalid JSON after template evaluation will cause the condition to fail with PAYLOAD_ERROR reason.
495    #[prost(string, tag = "4")]
496    pub payload_template: ::prost::alloc::string::String,
497}
498/// Configuration for webhook delivery retry logic and timeouts.
499#[derive(Clone, Copy, PartialEq, ::prost::Message)]
500pub struct WebhookDeliveryConfig {
501    /// Maximum delivery attempts (default: 3, max: 10)
502    #[prost(int32, optional, tag = "1")]
503    pub max_retries: ::core::option::Option<i32>,
504    /// Initial retry interval seconds (default: 15, min: 5, max: 300)
505    #[prost(int64, optional, tag = "2")]
506    pub retry_interval_seconds: ::core::option::Option<i64>,
507    /// Use exponential backoff (default: true)
508    #[prost(bool, optional, tag = "3")]
509    pub exponential_backoff: ::core::option::Option<bool>,
510    /// Max retry interval seconds (default: 300, max: 3600)
511    #[prost(int64, optional, tag = "4")]
512    pub max_retry_interval_seconds: ::core::option::Option<i64>,
513    /// Overall timeout seconds (default: 600, max: 86400)
514    #[prost(int64, optional, tag = "5")]
515    pub timeout_seconds: ::core::option::Option<i64>,
516}
517/// An action that will be taken when a step transitions to a completed state
518/// (succeeded, errored, or skipped). These actions are executed after the step
519/// contents are submitted and the PassCondition (if any) is satisfied. These
520/// actions are executed synchronously with the state transition and generally
521/// should be quick to complete.
522/// Almost all actions will be executed only if the step transitions to SUCCEEDED.
523/// The exception is CreateEvent, which will be executed for all terminal states.
524#[derive(Clone, PartialEq, ::prost::Message)]
525pub struct CompletionActionConfig {
526    #[prost(oneof = "completion_action_config::Config", tags = "1, 2, 3, 4, 5, 6")]
527    pub config: ::core::option::Option<completion_action_config::Config>,
528}
529/// Nested message and enum types in `CompletionActionConfig`.
530pub mod completion_action_config {
531    #[derive(Clone, PartialEq, ::prost::Oneof)]
532    pub enum Config {
533        #[prost(message, tag = "1")]
534        CreateEvent(super::CreateEventConfig),
535        #[prost(message, tag = "2")]
536        SendNotification(super::SendNotificationConfig),
537        #[prost(message, tag = "3")]
538        CreateRun(super::CreateRunConfig),
539        #[prost(message, tag = "4")]
540        ApplyWorkbookTemplates(super::ApplyWorkbookTemplatesConfig),
541        #[prost(message, tag = "5")]
542        ApplyChecklists(super::ApplyChecklistsConfig),
543        /// ...
544        #[prost(message, tag = "6")]
545        UpdateRun(super::UpdateRunConfig),
546    }
547}
548/// An action to create an event when a step is completed.
549/// The completion state of the step is mapped to the event's EventType as follows:
550/// - SUCCEEDED -> SUCCESS
551/// - ERRORED -> ERROR
552/// - SKIPPED -> INFO
553#[derive(Clone, PartialEq, ::prost::Message)]
554pub struct CreateEventConfig {
555    #[prost(string, tag = "1")]
556    pub name: ::prost::alloc::string::String,
557    #[prost(string, optional, tag = "2")]
558    pub description: ::core::option::Option<::prost::alloc::string::String>,
559    #[prost(string, repeated, tag = "3")]
560    pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
561    /// Deprecated in favor of property_refs
562    /// Properties will be overridden by any property_refs with the same key.
563    #[prost(map = "string, string", tag = "4")]
564    pub properties: ::std::collections::HashMap<
565        ::prost::alloc::string::String,
566        ::prost::alloc::string::String,
567    >,
568    /// Each asset_field_id will be resolved and added as an AssetRid to the created event
569    /// deprecated in favor of asset_references
570    #[prost(string, repeated, tag = "5")]
571    pub asset_field_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
572    /// The assets to associate the event with. There must be at least one.
573    /// asset_references takes precedence over (deprecated) asset_field_ids if both are set.
574    ///
575    /// TODO(niwong): re-add after client updates \[(buf.validate.field).repeated.min_items = 1\];
576    #[prost(message, repeated, tag = "6")]
577    pub asset_references: ::prost::alloc::vec::Vec<AssetReference>,
578    /// Properties to apply to the event
579    #[prost(message, repeated, tag = "7")]
580    pub property_refs: ::prost::alloc::vec::Vec<PropertyReference>,
581}
582/// An action to send a notification to one or more integrations when a step is completed.
583#[derive(Clone, PartialEq, ::prost::Message)]
584pub struct SendNotificationConfig {
585    /// The integration(s) to use to send the notification.
586    #[prost(message, optional, tag = "1")]
587    pub integrations: ::core::option::Option<MultiIntegrationReference>,
588    /// The optional title of the notification (length constrained to 130 chars by the IntegrationService).
589    #[prost(message, optional, tag = "2")]
590    pub title: ::core::option::Option<StringReference>,
591    /// The message body of the notification.
592    ///
593    /// We are omitting some optional parameters to the IntegrationService#sendMessage endpoint,
594    /// such as tags, priority, and opsGenieAlias. For all current integration types as of 2025-09-15
595    /// (besides OpsGenie), only title and message are used.
596    #[prost(message, optional, tag = "3")]
597    pub message: ::core::option::Option<StringReference>,
598}
599/// An action to create a run when a step is completed.
600#[derive(Clone, PartialEq, ::prost::Message)]
601pub struct CreateRunConfig {
602    /// If present, the run RID for this step will be available in outputs under this field ID.
603    #[prost(string, optional, tag = "1")]
604    pub run_output_field_id: ::core::option::Option<::prost::alloc::string::String>,
605    /// The assets to associate the run with. There must be at least one.
606    #[prost(message, optional, tag = "2")]
607    pub assets: ::core::option::Option<MultiAssetReference>,
608    /// The name of the run.
609    #[prost(message, optional, tag = "3")]
610    pub name: ::core::option::Option<StringReference>,
611    /// Optionally, a description for the run.
612    #[prost(message, optional, tag = "4")]
613    pub description: ::core::option::Option<StringReference>,
614    /// The time range for the run. If unset, the run will be created starting at now() with no end time.
615    #[prost(message, optional, tag = "5")]
616    pub time_range: ::core::option::Option<TimeRangeReference>,
617    /// Labels to apply on the run.
618    #[prost(message, optional, tag = "6")]
619    pub labels: ::core::option::Option<MultiStringReference>,
620    /// Properties to apply on the run.
621    ///
622    /// repeated UrlReference links;
623    /// repeated AttachmentRidReference attachments; // requires some sort of AttachmentRidField where FE handles upload
624    #[prost(message, repeated, tag = "7")]
625    pub properties: ::prost::alloc::vec::Vec<create_run_config::Property>,
626}
627/// Nested message and enum types in `CreateRunConfig`.
628pub mod create_run_config {
629    #[derive(Clone, PartialEq, ::prost::Message)]
630    pub struct Property {
631        #[prost(message, optional, tag = "1")]
632        pub key: ::core::option::Option<super::StringReference>,
633        #[prost(message, optional, tag = "2")]
634        pub value: ::core::option::Option<super::StringReference>,
635    }
636}
637/// An action to update an existing run when a step is completed (e.g. set end time to previous step end time).
638///
639/// option (buf.validate.message).cel = {
640///    id: "update_run_config.at_least_one_update"
641///    message: "At least one update field (name, description, time_range, labels, or properties) must be set"
642///    expression: "has(this.name) || has(this.description) || has(this.time_range) || has(this.labels) || this.properties.size() > 0"
643/// };
644#[derive(Clone, PartialEq, ::prost::Message)]
645pub struct UpdateRunConfig {
646    /// The run(s) to update. Typically but not limited to a reference to a run created earlier in the procedure
647    #[prost(message, optional, tag = "1")]
648    pub runs: ::core::option::Option<MultiRunReference>,
649    /// Optional PATCH-style updates. Only set fields that should change.
650    /// If unset, the run will not be updated.
651    #[prost(message, optional, tag = "2")]
652    pub name: ::core::option::Option<StringReference>,
653    #[prost(message, optional, tag = "3")]
654    pub description: ::core::option::Option<StringReference>,
655    #[prost(message, optional, tag = "4")]
656    pub time_range: ::core::option::Option<TimeRangeReference>,
657    /// TODO(ryanyost): support patch-behavior for labels
658    #[prost(message, optional, tag = "5")]
659    pub labels: ::core::option::Option<MultiStringReference>,
660    /// TODO(ryanyost): support patch-behavior for properties
661    #[prost(message, repeated, tag = "6")]
662    pub properties: ::prost::alloc::vec::Vec<PropertyReference>,
663    /// When true, time fields overwrite existing values. When false, start only moves earlier, end only moves later (aligns with runs API strictOverwrite).
664    #[prost(bool, optional, tag = "7")]
665    pub strict_overwrite: ::core::option::Option<bool>,
666}
667#[derive(Clone, PartialEq, ::prost::Message)]
668pub struct PropertyReference {
669    #[prost(message, optional, tag = "1")]
670    pub key: ::core::option::Option<StringReference>,
671    #[prost(message, optional, tag = "2")]
672    pub value: ::core::option::Option<StringReference>,
673}
674/// An action to apply one or more workbook templates to one or more runs when a step is completed.
675#[derive(Clone, PartialEq, ::prost::Message)]
676pub struct ApplyWorkbookTemplatesConfig {
677    /// The workbook templates to apply.
678    #[prost(message, optional, tag = "1")]
679    pub workbook_templates: ::core::option::Option<MultiWorkbookTemplateReference>,
680    /// The runs to apply the workbook templates to. There must be at least one.
681    #[prost(message, optional, tag = "2")]
682    pub runs: ::core::option::Option<MultiRunReference>,
683}
684/// An action to apply one or more checklists to one or more runs when a step is completed.
685#[derive(Clone, PartialEq, ::prost::Message)]
686pub struct ApplyChecklistsConfig {
687    /// The checklists to apply.
688    #[prost(message, optional, tag = "1")]
689    pub checklists: ::core::option::Option<MultiChecklistReference>,
690    /// The runs to apply the checklists to. There must be at least one.
691    #[prost(message, optional, tag = "2")]
692    pub runs: ::core::option::Option<MultiRunReference>,
693}
694/// The content of a procedure step. This typically involves some form of user interaction/input.
695#[derive(Clone, PartialEq, ::prost::Message)]
696pub struct ProcedureStepContent {
697    /// This should be kept in sync with NestedProcedureNode.NestedStepNode.content
698    #[prost(oneof = "procedure_step_content::Content", tags = "1, 2, 3, 4")]
699    pub content: ::core::option::Option<procedure_step_content::Content>,
700}
701/// Nested message and enum types in `ProcedureStepContent`.
702pub mod procedure_step_content {
703    /// This should be kept in sync with NestedProcedureNode.NestedStepNode.content
704    #[derive(Clone, PartialEq, ::prost::Oneof)]
705    pub enum Content {
706        #[prost(message, tag = "1")]
707        Form(super::FormStep),
708        #[prost(message, tag = "2")]
709        StartIngest(super::StartIngestStep),
710        #[prost(message, tag = "3")]
711        SelectOrCreateAsset(super::SelectOrCreateAssetStep),
712        /// ...
713        #[prost(message, tag = "4")]
714        Wait(super::WaitStep),
715    }
716}
717#[derive(Clone, Copy, PartialEq, ::prost::Message)]
718pub struct WaitStep {}
719/// A form step consists of a set of fields to be filled out by the user.
720#[derive(Clone, PartialEq, ::prost::Message)]
721pub struct FormStep {
722    #[prost(message, repeated, tag = "1")]
723    pub fields: ::prost::alloc::vec::Vec<FormField>,
724}
725/// The user will be prompted to start an ingest job in the frontend
726/// and the output of the step will be the rid of the created ingest job.
727#[derive(Clone, PartialEq, ::prost::Message)]
728pub struct StartIngestStep {
729    /// The asset to ingest data into.
730    #[prost(message, optional, tag = "1")]
731    pub asset: ::core::option::Option<AssetReference>,
732    /// The data scope within the asset to ingest data into.
733    #[prost(message, optional, tag = "2")]
734    pub ref_name: ::core::option::Option<StringReference>,
735    /// Restrict and pre-configure the type of ingest that can be started.
736    #[prost(message, optional, tag = "3")]
737    pub ingest_type_config: ::core::option::Option<start_ingest_step::IngestTypeConfig>,
738    /// If present, the ingest job RID for this step will be available in outputs under this field ID.
739    #[prost(string, optional, tag = "4")]
740    pub ingest_job_output_field_id: ::core::option::Option<
741        ::prost::alloc::string::String,
742    >,
743}
744/// Nested message and enum types in `StartIngestStep`.
745pub mod start_ingest_step {
746    #[derive(Clone, PartialEq, ::prost::Message)]
747    pub struct IngestTypeConfig {
748        #[prost(oneof = "ingest_type_config::Config", tags = "1, 2, 3, 4")]
749        pub config: ::core::option::Option<ingest_type_config::Config>,
750    }
751    /// Nested message and enum types in `IngestTypeConfig`.
752    pub mod ingest_type_config {
753        #[derive(Clone, PartialEq, ::prost::Message)]
754        pub struct ContainerizedExtractorIngestConfig {
755            /// The ingest job must use this specific containerized extractor.
756            #[prost(string, tag = "1")]
757            pub rid: ::prost::alloc::string::String,
758            /// The step will prompt the user to upload a file for each extractor input that doesn't have a FileInputBinding.
759            #[prost(message, repeated, tag = "2")]
760            pub file_input_bindings: ::prost::alloc::vec::Vec<
761                super::super::FileInputBinding,
762            >,
763        }
764        #[derive(Clone, PartialEq, ::prost::Message)]
765        pub struct DataflashIngestConfig {
766            /// File to ingest into the dataset. Should be a dataflash `.bin` file.
767            /// Uses tags configured on the asset data scope as additional file tags
768            #[prost(message, optional, tag = "1")]
769            pub file_input: ::core::option::Option<super::super::FileReference>,
770        }
771        #[derive(Clone, PartialEq, ::prost::Message)]
772        pub struct CsvIngestConfig {
773            /// header for timestamp column
774            #[prost(message, optional, tag = "1")]
775            pub timestamp_series_name: ::core::option::Option<
776                super::super::StringReference,
777            >,
778            #[prost(message, optional, tag = "2")]
779            pub timestamp_type: ::core::option::Option<
780                super::super::TimestampTypeParameter,
781            >,
782            /// File to ingest into the dataset. Should be a `.csv` or `.csv.gz` file.
783            /// Uses tags configured on the asset data scope as additional file tags
784            #[prost(message, optional, tag = "3")]
785            pub file_input: ::core::option::Option<super::super::FileReference>,
786        }
787        #[derive(Clone, PartialEq, ::prost::Message)]
788        pub struct ParquetIngestConfig {
789            /// header for timestamp column
790            #[prost(message, optional, tag = "1")]
791            pub timestamp_series_name: ::core::option::Option<
792                super::super::StringReference,
793            >,
794            #[prost(message, optional, tag = "2")]
795            pub timestamp_type: ::core::option::Option<
796                super::super::TimestampTypeParameter,
797            >,
798            /// File to ingest into the dataset. Should be a `.parquet` or `.parquet.gz` file or archive file.
799            /// Uses tags configured on the asset data scope as additional file tags
800            #[prost(message, optional, tag = "3")]
801            pub file_input: ::core::option::Option<super::super::FileReference>,
802        }
803        #[derive(Clone, PartialEq, ::prost::Oneof)]
804        pub enum Config {
805            /// The ingest job must be a containerized extractor ingest.
806            #[prost(message, tag = "1")]
807            ContainerizedExtractor(ContainerizedExtractorIngestConfig),
808            #[prost(message, tag = "2")]
809            Dataflash(DataflashIngestConfig),
810            #[prost(message, tag = "3")]
811            Csv(CsvIngestConfig),
812            #[prost(message, tag = "4")]
813            Parquet(ParquetIngestConfig),
814        }
815    }
816}
817#[derive(Clone, PartialEq, ::prost::Message)]
818pub struct FileInputBinding {
819    /// The input key. For containerized extractors, this is the environment variable name.
820    #[prost(string, tag = "1")]
821    pub environment_variable: ::prost::alloc::string::String,
822    /// The specific type of file
823    #[prost(message, optional, tag = "2")]
824    pub file_reference: ::core::option::Option<FileReference>,
825}
826#[derive(Clone, PartialEq, ::prost::Message)]
827pub struct FileReference {
828    #[prost(oneof = "file_reference::Option", tags = "1")]
829    pub option: ::core::option::Option<file_reference::Option>,
830}
831/// Nested message and enum types in `FileReference`.
832pub mod file_reference {
833    #[derive(Clone, PartialEq, ::prost::Oneof)]
834    pub enum Option {
835        /// Reference a field from a prior step
836        #[prost(string, tag = "1")]
837        FieldId(::prost::alloc::string::String),
838    }
839}
840#[derive(Clone, PartialEq, ::prost::Message)]
841pub struct TimestampTypeParameter {
842    #[prost(oneof = "timestamp_type_parameter::Option", tags = "1, 2")]
843    pub option: ::core::option::Option<timestamp_type_parameter::Option>,
844}
845/// Nested message and enum types in `TimestampTypeParameter`.
846pub mod timestamp_type_parameter {
847    /// Can allow for more configuration
848    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
849    pub struct UserInputOptions {}
850    #[derive(Clone, PartialEq, ::prost::Oneof)]
851    pub enum Option {
852        /// Timestamp type to always use for ingest.
853        #[prost(message, tag = "1")]
854        Constant(super::super::super::types::time::TimestampType),
855        /// If specified, allows user to enter timestamp metadata based on input options.
856        #[prost(message, tag = "2")]
857        UserInput(UserInputOptions),
858    }
859}
860/// The user will be prompted to select an existing asset or create a new asset.
861#[derive(Clone, PartialEq, ::prost::Message)]
862pub struct SelectOrCreateAssetStep {
863    /// If present, the AssetRid for this step will be available in outputs under this field ID.
864    #[prost(string, optional, tag = "1")]
865    pub asset_output_field_id: ::core::option::Option<::prost::alloc::string::String>,
866    /// If present, the user will be given the option to create a new asset restricted by these parameters.
867    #[prost(message, optional, tag = "2")]
868    pub create_asset_parameters: ::core::option::Option<
869        select_or_create_asset_step::CreateAssetParameters,
870    >,
871    /// The asset selection options for this step.
872    /// This can be omitted, in which case the asset can be chosen freely from all assets.
873    #[prost(oneof = "select_or_create_asset_step::Options", tags = "3")]
874    pub options: ::core::option::Option<select_or_create_asset_step::Options>,
875}
876/// Nested message and enum types in `SelectOrCreateAssetStep`.
877pub mod select_or_create_asset_step {
878    /// When creating an new asset, the title is always provided by the user and the
879    /// frontend should prompt for it. Other parameters for asset creation can be
880    /// specified here as either user-prompted or preset.
881    #[derive(Clone, PartialEq, ::prost::Message)]
882    pub struct CreateAssetParameters {
883        /// If set, the new asset will be created with this description.
884        #[prost(message, optional, tag = "2")]
885        pub description: ::core::option::Option<
886            create_asset_parameters::DescriptionParameter,
887        >,
888        /// If set, the new asset will be created with these labels.
889        #[prost(message, optional, tag = "3")]
890        pub labels: ::core::option::Option<create_asset_parameters::LabelsParameter>,
891        /// If set, the new asset will be created with these properties.
892        #[prost(message, optional, tag = "4")]
893        pub properties: ::core::option::Option<
894            create_asset_parameters::PropertiesParameter,
895        >,
896        /// Data scopes for the new asset. The keys are the ref names of the data scopes.
897        #[prost(map = "string, message", tag = "5")]
898        pub data_scopes: ::std::collections::HashMap<
899            ::prost::alloc::string::String,
900            create_asset_parameters::DataScopeParameter,
901        >,
902    }
903    /// Nested message and enum types in `CreateAssetParameters`.
904    pub mod create_asset_parameters {
905        #[derive(Clone, PartialEq, ::prost::Message)]
906        pub struct DescriptionParameter {
907            #[prost(oneof = "description_parameter::Option", tags = "1")]
908            pub option: ::core::option::Option<description_parameter::Option>,
909        }
910        /// Nested message and enum types in `DescriptionParameter`.
911        pub mod description_parameter {
912            #[derive(Clone, PartialEq, ::prost::Oneof)]
913            pub enum Option {
914                /// The description is always a constant string.
915                ///
916                /// Can allow for free-form / guardrailed (templated?) user input.
917                #[prost(string, tag = "1")]
918                Constant(::prost::alloc::string::String),
919            }
920        }
921        #[derive(Clone, PartialEq, ::prost::Message)]
922        pub struct LabelsParameter {
923            /// Labels to always apply on the new asset.
924            #[prost(string, repeated, tag = "1")]
925            pub constant: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
926            /// If allowing for user input, the frontend should leverage ResourceMetadataService#listPropertiesAndLabels
927            /// to provide the user with existing labels to choose from.
928            #[prost(message, optional, tag = "2")]
929            pub user_input: ::core::option::Option<labels_parameter::UserInputOptions>,
930        }
931        /// Nested message and enum types in `LabelsParameter`.
932        pub mod labels_parameter {
933            /// Can allow for more configuration - e.g. default set of starting labels? (which can be overrideen)
934            #[derive(Clone, Copy, PartialEq, ::prost::Message)]
935            pub struct UserInputOptions {}
936        }
937        #[derive(Clone, PartialEq, ::prost::Message)]
938        pub struct PropertiesParameter {
939            /// Properties to always apply on the new asset.
940            #[prost(map = "string, string", tag = "1")]
941            pub constant: ::std::collections::HashMap<
942                ::prost::alloc::string::String,
943                ::prost::alloc::string::String,
944            >,
945            /// If allowing for user input, the frontend should leverage ResourceMetadataService#listPropertiesAndLabels
946            /// to provide the user with existing property keys/values to choose from.
947            #[prost(message, optional, tag = "2")]
948            pub user_input: ::core::option::Option<
949                properties_parameter::UserInputOptions,
950            >,
951        }
952        /// Nested message and enum types in `PropertiesParameter`.
953        pub mod properties_parameter {
954            #[derive(Clone, PartialEq, ::prost::Message)]
955            pub struct UserInputOptions {
956                /// Each property key here must have a value provided by the user for asset creation.
957                #[prost(string, repeated, tag = "1")]
958                pub required_keys: ::prost::alloc::vec::Vec<
959                    ::prost::alloc::string::String,
960                >,
961                /// Each property key here will be suggested to the user but is not required for asset creation
962                ///
963                /// Can allow for more configuration - e.g. required k-v pairs, default k-v pairs?
964                #[prost(string, repeated, tag = "2")]
965                pub suggested_keys: ::prost::alloc::vec::Vec<
966                    ::prost::alloc::string::String,
967                >,
968            }
969        }
970        #[derive(Clone, PartialEq, ::prost::Message)]
971        pub struct DataScopeParameter {
972            #[prost(message, optional, tag = "21")]
973            pub series_tags: ::core::option::Option<super::super::TagsParameter>,
974            #[prost(oneof = "data_scope_parameter::DataSource", tags = "1, 2")]
975            pub data_source: ::core::option::Option<data_scope_parameter::DataSource>,
976        }
977        /// Nested message and enum types in `DataScopeParameter`.
978        pub mod data_scope_parameter {
979            /// The Dataset will be automatically named "{asset}-{ref_name}".
980            /// Can later allow for this to be specified.
981            /// Other CreateDataset options exist but are omitted for now
982            #[derive(Clone, Copy, PartialEq, ::prost::Message)]
983            pub struct NewDataset {}
984            #[derive(Clone, PartialEq, ::prost::Message)]
985            pub struct ExistingDataset {
986                /// The dataset options for this field.
987                /// This can be omitted, in which case the dataset can be chosen freely.
988                #[prost(oneof = "existing_dataset::Options", tags = "1")]
989                pub options: ::core::option::Option<existing_dataset::Options>,
990            }
991            /// Nested message and enum types in `ExistingDataset`.
992            pub mod existing_dataset {
993                /// The dataset options for this field.
994                /// This can be omitted, in which case the dataset can be chosen freely.
995                #[derive(Clone, PartialEq, ::prost::Oneof)]
996                pub enum Options {
997                    /// The dataset must be chosen from preset options.
998                    #[prost(message, tag = "1")]
999                    PresetOptions(super::super::super::super::PresetDatasetFieldOptions),
1000                }
1001            }
1002            #[derive(Clone, PartialEq, ::prost::Oneof)]
1003            pub enum DataSource {
1004                /// Creates a new empty dataset.
1005                #[prost(message, tag = "1")]
1006                NewDataset(NewDataset),
1007                /// Use existing dataset
1008                #[prost(message, tag = "2")]
1009                ExistingDataset(ExistingDataset),
1010            }
1011        }
1012    }
1013    /// The asset selection options for this step.
1014    /// This can be omitted, in which case the asset can be chosen freely from all assets.
1015    #[derive(Clone, PartialEq, ::prost::Oneof)]
1016    pub enum Options {
1017        /// The asset must be chosen from preset options.
1018        ///
1019        /// The asset must be chosen from a saved view.
1020        /// SavedViewRid saved_view = 4;
1021        #[prost(message, tag = "3")]
1022        PresetOptions(super::PresetAssetFieldOptions),
1023    }
1024}
1025/// A limited set of options to choose from, with an optional default option.
1026#[derive(Clone, PartialEq, ::prost::Message)]
1027pub struct PresetDatasetFieldOptions {
1028    /// The list of options to choose from.
1029    #[prost(message, repeated, tag = "1")]
1030    pub options: ::prost::alloc::vec::Vec<DatasetReference>,
1031    /// If set, this option will be selected by default, if it is present in the options.
1032    /// The user can still select a different option.
1033    #[prost(message, optional, tag = "2")]
1034    pub default_option: ::core::option::Option<DatasetReference>,
1035}
1036/// A reference to a single dataset
1037#[derive(Clone, PartialEq, ::prost::Message)]
1038pub struct DatasetReference {
1039    #[prost(oneof = "dataset_reference::Option", tags = "1, 2")]
1040    pub option: ::core::option::Option<dataset_reference::Option>,
1041}
1042/// Nested message and enum types in `DatasetReference`.
1043pub mod dataset_reference {
1044    #[derive(Clone, PartialEq, ::prost::Oneof)]
1045    pub enum Option {
1046        /// a constant DatasetRid
1047        #[prost(string, tag = "1")]
1048        Rid(::prost::alloc::string::String),
1049        /// The field reference that will contain a DatasetRid value. The execution will fail if the field is not set
1050        /// but the value is accessed.
1051        #[prost(string, tag = "2")]
1052        FieldId(::prost::alloc::string::String),
1053    }
1054}
1055#[derive(Clone, PartialEq, ::prost::Message)]
1056pub struct TagsParameter {
1057    /// Tags to always filter to on the dataset or asset data scope.
1058    #[prost(map = "string, string", tag = "1")]
1059    pub constant: ::std::collections::HashMap<
1060        ::prost::alloc::string::String,
1061        ::prost::alloc::string::String,
1062    >,
1063    /// If allowing for user input, the frontend should leverage DataSourceService#getAvailableTagKeys/Values
1064    /// to provide the user with existing series tag keys/values to choose from.
1065    #[prost(message, optional, tag = "2")]
1066    pub user_input: ::core::option::Option<tags_parameter::UserInputOptions>,
1067}
1068/// Nested message and enum types in `TagsParameter`.
1069pub mod tags_parameter {
1070    #[derive(Clone, PartialEq, ::prost::Message)]
1071    pub struct UserInputOptions {
1072        /// Each tag key here must have a value provided by the user
1073        #[prost(string, repeated, tag = "1")]
1074        pub required_keys: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1075        /// Each tag key here will be suggested to the user but is not required
1076        ///
1077        /// Can allow for more configuration - e.g. required k-v pairs, default k-v pairs?
1078        #[prost(string, repeated, tag = "2")]
1079        pub suggested_keys: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1080    }
1081}
1082/// A reference to multiple string values
1083#[derive(Clone, PartialEq, ::prost::Message)]
1084pub struct MultiStringReference {
1085    #[prost(oneof = "multi_string_reference::Option", tags = "1")]
1086    pub option: ::core::option::Option<multi_string_reference::Option>,
1087}
1088/// Nested message and enum types in `MultiStringReference`.
1089pub mod multi_string_reference {
1090    #[derive(Clone, PartialEq, ::prost::Oneof)]
1091    pub enum Option {
1092        /// The value is taken from a field in the current or previous steps.
1093        #[prost(string, tag = "1")]
1094        FieldId(::prost::alloc::string::String),
1095    }
1096}
1097/// A reference to a single string value
1098#[derive(Clone, PartialEq, ::prost::Message)]
1099pub struct StringReference {
1100    #[prost(oneof = "string_reference::Option", tags = "1, 2")]
1101    pub option: ::core::option::Option<string_reference::Option>,
1102}
1103/// Nested message and enum types in `StringReference`.
1104pub mod string_reference {
1105    #[derive(Clone, PartialEq, ::prost::Oneof)]
1106    pub enum Option {
1107        /// The value is a constant string
1108        #[prost(string, tag = "1")]
1109        Constant(::prost::alloc::string::String),
1110        /// The value is taken from a field in the current or previous steps.
1111        ///
1112        /// TODO(WB-1728): support string templating.
1113        /// string template = 3;
1114        #[prost(string, tag = "2")]
1115        FieldId(::prost::alloc::string::String),
1116    }
1117}
1118/// A reference to multiple assets
1119#[derive(Clone, PartialEq, ::prost::Message)]
1120pub struct MultiAssetReference {
1121    #[prost(oneof = "multi_asset_reference::Option", tags = "1")]
1122    pub option: ::core::option::Option<multi_asset_reference::Option>,
1123}
1124/// Nested message and enum types in `MultiAssetReference`.
1125pub mod multi_asset_reference {
1126    #[derive(Clone, PartialEq, ::prost::Message)]
1127    pub struct AssetReferenceList {
1128        #[prost(message, repeated, tag = "1")]
1129        pub references: ::prost::alloc::vec::Vec<super::AssetReference>,
1130    }
1131    #[derive(Clone, PartialEq, ::prost::Oneof)]
1132    pub enum Option {
1133        /// TODO: add support for a field that contains a list of asset RIDs
1134        #[prost(message, tag = "1")]
1135        List(AssetReferenceList),
1136    }
1137}
1138/// A reference to a single asset
1139#[derive(Clone, PartialEq, ::prost::Message)]
1140pub struct AssetReference {
1141    #[prost(oneof = "asset_reference::Option", tags = "1, 2")]
1142    pub option: ::core::option::Option<asset_reference::Option>,
1143}
1144/// Nested message and enum types in `AssetReference`.
1145pub mod asset_reference {
1146    #[derive(Clone, PartialEq, ::prost::Oneof)]
1147    pub enum Option {
1148        /// a constant AssetRid
1149        #[prost(string, tag = "1")]
1150        Rid(::prost::alloc::string::String),
1151        /// The field reference that will contain an AssetRid value. The execution will fail if the field is not set
1152        /// but the value is accessed.
1153        #[prost(string, tag = "2")]
1154        FieldId(::prost::alloc::string::String),
1155    }
1156}
1157/// A reference to a time range
1158#[derive(Clone, PartialEq, ::prost::Message)]
1159pub struct TimeRangeReference {
1160    #[prost(oneof = "time_range_reference::Option", tags = "1, 2")]
1161    pub option: ::core::option::Option<time_range_reference::Option>,
1162}
1163/// Nested message and enum types in `TimeRangeReference`.
1164pub mod time_range_reference {
1165    #[derive(Clone, PartialEq, ::prost::Message)]
1166    pub struct IngestJobList {
1167        /// Field ids that contain IngestJobRids.
1168        #[prost(string, repeated, tag = "1")]
1169        pub field_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1170    }
1171    #[derive(Clone, PartialEq, ::prost::Message)]
1172    pub struct RangeLiteral {
1173        /// If absent, the run's start time will not be set or modified.
1174        /// For CreateRunConfig, a start time is required (see message-level CEL constraint).
1175        #[prost(message, optional, tag = "1")]
1176        pub start: ::core::option::Option<super::TimestampReference>,
1177        #[prost(message, optional, tag = "2")]
1178        pub end: ::core::option::Option<super::TimestampReference>,
1179    }
1180    #[derive(Clone, PartialEq, ::prost::Oneof)]
1181    pub enum Option {
1182        /// The time range is the union of the time ranges ingested by all the specified ingest jobs.
1183        #[prost(message, tag = "1")]
1184        FromIngestJobs(IngestJobList),
1185        #[prost(message, tag = "2")]
1186        Literal(RangeLiteral),
1187    }
1188}
1189#[derive(Clone, PartialEq, ::prost::Message)]
1190pub struct TimestampReference {
1191    #[prost(oneof = "timestamp_reference::Option", tags = "1, 2")]
1192    pub option: ::core::option::Option<timestamp_reference::Option>,
1193}
1194/// Nested message and enum types in `TimestampReference`.
1195pub mod timestamp_reference {
1196    #[derive(Clone, PartialEq, ::prost::Oneof)]
1197    pub enum Option {
1198        /// A field reference that resolves to a timestamp from a step's execution state.
1199        /// Supported field names: started_at, succeeded_at, submitted_at, skipped_at, errored_at.
1200        /// Aliases: start_time (= started_at), end_time (= succeeded_at).
1201        #[prost(string, tag = "1")]
1202        FieldId(::prost::alloc::string::String),
1203        /// A literal/constant timestamp
1204        #[prost(message, tag = "2")]
1205        Constant(super::super::super::super::google::protobuf::Timestamp),
1206    }
1207}
1208/// A reference to multiple runs
1209#[derive(Clone, PartialEq, ::prost::Message)]
1210pub struct MultiRunReference {
1211    #[prost(oneof = "multi_run_reference::Option", tags = "1")]
1212    pub option: ::core::option::Option<multi_run_reference::Option>,
1213}
1214/// Nested message and enum types in `MultiRunReference`.
1215pub mod multi_run_reference {
1216    #[derive(Clone, PartialEq, ::prost::Message)]
1217    pub struct RunReferenceList {
1218        #[prost(message, repeated, tag = "1")]
1219        pub references: ::prost::alloc::vec::Vec<super::RunReference>,
1220    }
1221    #[derive(Clone, PartialEq, ::prost::Oneof)]
1222    pub enum Option {
1223        /// TODO: add support for a field that contains a list of run RIDs
1224        #[prost(message, tag = "1")]
1225        List(RunReferenceList),
1226    }
1227}
1228/// A reference to a single run
1229#[derive(Clone, PartialEq, ::prost::Message)]
1230pub struct RunReference {
1231    #[prost(oneof = "run_reference::Option", tags = "1")]
1232    pub option: ::core::option::Option<run_reference::Option>,
1233}
1234/// Nested message and enum types in `RunReference`.
1235pub mod run_reference {
1236    #[derive(Clone, PartialEq, ::prost::Oneof)]
1237    pub enum Option {
1238        /// The field id that will contain a RunRid value. The execution will fail if the field is not set properly.
1239        #[prost(string, tag = "1")]
1240        FieldId(::prost::alloc::string::String),
1241    }
1242}
1243/// A reference to multiple workbook templates
1244#[derive(Clone, PartialEq, ::prost::Message)]
1245pub struct MultiWorkbookTemplateReference {
1246    #[prost(oneof = "multi_workbook_template_reference::Option", tags = "1")]
1247    pub option: ::core::option::Option<multi_workbook_template_reference::Option>,
1248}
1249/// Nested message and enum types in `MultiWorkbookTemplateReference`.
1250pub mod multi_workbook_template_reference {
1251    #[derive(Clone, PartialEq, ::prost::Message)]
1252    pub struct WorkbookTemplateReferenceList {
1253        #[prost(message, repeated, tag = "1")]
1254        pub references: ::prost::alloc::vec::Vec<super::WorkbookTemplateReference>,
1255    }
1256    #[derive(Clone, PartialEq, ::prost::Oneof)]
1257    pub enum Option {
1258        /// TODO: add support for a field that contains a list of workbook template RIDs
1259        #[prost(message, tag = "1")]
1260        List(WorkbookTemplateReferenceList),
1261    }
1262}
1263/// A reference to a single workbook template
1264#[derive(Clone, PartialEq, ::prost::Message)]
1265pub struct WorkbookTemplateReference {
1266    #[prost(oneof = "workbook_template_reference::Option", tags = "1")]
1267    pub option: ::core::option::Option<workbook_template_reference::Option>,
1268}
1269/// Nested message and enum types in `WorkbookTemplateReference`.
1270pub mod workbook_template_reference {
1271    #[derive(Clone, PartialEq, ::prost::Oneof)]
1272    pub enum Option {
1273        /// A constant workbook template RID.
1274        ///
1275        /// string field_id = 2;
1276        #[prost(string, tag = "1")]
1277        Rid(::prost::alloc::string::String),
1278    }
1279}
1280/// A reference to multiple checklists
1281#[derive(Clone, PartialEq, ::prost::Message)]
1282pub struct MultiChecklistReference {
1283    #[prost(oneof = "multi_checklist_reference::Option", tags = "1")]
1284    pub option: ::core::option::Option<multi_checklist_reference::Option>,
1285}
1286/// Nested message and enum types in `MultiChecklistReference`.
1287pub mod multi_checklist_reference {
1288    #[derive(Clone, PartialEq, ::prost::Message)]
1289    pub struct ChecklistReferenceList {
1290        #[prost(message, repeated, tag = "1")]
1291        pub references: ::prost::alloc::vec::Vec<super::ChecklistReference>,
1292    }
1293    #[derive(Clone, PartialEq, ::prost::Oneof)]
1294    pub enum Option {
1295        /// TODO: add support for a field that contains a list of checklist RIDs
1296        #[prost(message, tag = "1")]
1297        List(ChecklistReferenceList),
1298    }
1299}
1300/// A reference to a single checklist
1301#[derive(Clone, PartialEq, ::prost::Message)]
1302pub struct ChecklistReference {
1303    #[prost(oneof = "checklist_reference::Option", tags = "1")]
1304    pub option: ::core::option::Option<checklist_reference::Option>,
1305}
1306/// Nested message and enum types in `ChecklistReference`.
1307pub mod checklist_reference {
1308    #[derive(Clone, PartialEq, ::prost::Oneof)]
1309    pub enum Option {
1310        /// A constant checklist RID.
1311        ///
1312        /// string field_id = 2;
1313        #[prost(string, tag = "1")]
1314        Rid(::prost::alloc::string::String),
1315    }
1316}
1317/// A reference to multiple notification Integrations
1318#[derive(Clone, PartialEq, ::prost::Message)]
1319pub struct MultiIntegrationReference {
1320    #[prost(oneof = "multi_integration_reference::Option", tags = "1")]
1321    pub option: ::core::option::Option<multi_integration_reference::Option>,
1322}
1323/// Nested message and enum types in `MultiIntegrationReference`.
1324pub mod multi_integration_reference {
1325    #[derive(Clone, PartialEq, ::prost::Message)]
1326    pub struct IntegrationReferenceList {
1327        #[prost(message, repeated, tag = "1")]
1328        pub references: ::prost::alloc::vec::Vec<super::IntegrationReference>,
1329    }
1330    #[derive(Clone, PartialEq, ::prost::Oneof)]
1331    pub enum Option {
1332        #[prost(message, tag = "1")]
1333        List(IntegrationReferenceList),
1334    }
1335}
1336/// A reference to a notification Integration
1337#[derive(Clone, PartialEq, ::prost::Message)]
1338pub struct IntegrationReference {
1339    #[prost(oneof = "integration_reference::Option", tags = "1")]
1340    pub option: ::core::option::Option<integration_reference::Option>,
1341}
1342/// Nested message and enum types in `IntegrationReference`.
1343pub mod integration_reference {
1344    #[derive(Clone, PartialEq, ::prost::Oneof)]
1345    pub enum Option {
1346        /// A constant integration RID.
1347        ///
1348        /// string field_id = 2;
1349        #[prost(string, tag = "1")]
1350        Rid(::prost::alloc::string::String),
1351    }
1352}
1353/// A field to be filled out by the user.
1354#[derive(Clone, PartialEq, ::prost::Message)]
1355pub struct FormField {
1356    /// This field's id can be used by downstream steps to refer to the value.
1357    #[prost(string, tag = "1")]
1358    pub id: ::prost::alloc::string::String,
1359    /// UI label for the field component. Overrides any label defined in the specific FormField type.
1360    #[prost(string, optional, tag = "11")]
1361    pub label: ::core::option::Option<::prost::alloc::string::String>,
1362    /// Help text describing how to use this input field.
1363    #[prost(string, optional, tag = "12")]
1364    pub description: ::core::option::Option<::prost::alloc::string::String>,
1365    #[prost(oneof = "form_field::Field", tags = "2, 3, 4, 5, 6, 7, 8, 9, 10")]
1366    pub field: ::core::option::Option<form_field::Field>,
1367}
1368/// Nested message and enum types in `FormField`.
1369pub mod form_field {
1370    #[derive(Clone, PartialEq, ::prost::Oneof)]
1371    pub enum Field {
1372        #[prost(message, tag = "2")]
1373        Asset(super::AssetField),
1374        #[prost(message, tag = "3")]
1375        Checkbox(super::CheckboxField),
1376        #[prost(message, tag = "4")]
1377        Text(super::TextField),
1378        #[prost(message, tag = "5")]
1379        Int(super::IntField),
1380        #[prost(message, tag = "6")]
1381        Double(super::DoubleField),
1382        #[prost(message, tag = "7")]
1383        SingleEnum(super::SingleEnumField),
1384        #[prost(message, tag = "8")]
1385        MultiEnum(super::MultiEnumField),
1386        #[prost(message, tag = "9")]
1387        FileUpload(super::FileUploadField),
1388        #[prost(message, tag = "10")]
1389        MultiFileUpload(super::MultiFileUploadField),
1390    }
1391}
1392/// A limited set of options to choose from, with an optional default option.
1393#[derive(Clone, PartialEq, ::prost::Message)]
1394pub struct PresetAssetFieldOptions {
1395    /// The list of options to choose from.
1396    #[prost(message, repeated, tag = "1")]
1397    pub options: ::prost::alloc::vec::Vec<AssetReference>,
1398    /// If set, this option will be selected by default, if it is present in the options.
1399    /// The user can still select a different option.
1400    #[prost(message, optional, tag = "2")]
1401    pub default_option: ::core::option::Option<AssetReference>,
1402}
1403/// A field to select a single asset.
1404#[derive(Clone, PartialEq, ::prost::Message)]
1405pub struct AssetField {
1406    /// Helper text to guide selection of the asset
1407    /// deprecated in favor of label directly on FormField
1408    #[prost(string, tag = "1")]
1409    pub label: ::prost::alloc::string::String,
1410    /// Whether this field is required to be set complete the step.
1411    #[prost(bool, tag = "2")]
1412    pub is_required: bool,
1413    /// The asset options for this field.
1414    /// This can be omitted, in which case the asset can be chosen freely from all assets.
1415    #[prost(oneof = "asset_field::Options", tags = "3")]
1416    pub options: ::core::option::Option<asset_field::Options>,
1417}
1418/// Nested message and enum types in `AssetField`.
1419pub mod asset_field {
1420    /// The asset options for this field.
1421    /// This can be omitted, in which case the asset can be chosen freely from all assets.
1422    #[derive(Clone, PartialEq, ::prost::Oneof)]
1423    pub enum Options {
1424        /// The asset must be chosen from a saved view.
1425        /// SavedViewRid saved_view = 5;
1426        /// TODO(pchen): do we want to provide single string types from AssetFieldOption to simplify the Nested
1427        /// or do we want to explicitly modify the types Nested spec uses?
1428        #[prost(message, tag = "3")]
1429        PresetOptions(super::PresetAssetFieldOptions),
1430    }
1431}
1432/// A field to capture a boolean value.
1433#[derive(Clone, PartialEq, ::prost::Message)]
1434pub struct CheckboxField {
1435    /// Label to show for this checkbox field
1436    /// deprecated in favor of label directly on FormField
1437    #[prost(string, tag = "1")]
1438    pub label: ::prost::alloc::string::String,
1439    /// If set, the checkbox value must be checked (`true`) to complete the step.
1440    #[prost(bool, tag = "2")]
1441    pub is_required: bool,
1442}
1443#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1444pub struct TextFieldSimpleInputType {}
1445#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1446pub struct TextFieldMarkdownInputType {}
1447/// A field to capture a string value.
1448#[derive(Clone, PartialEq, ::prost::Message)]
1449pub struct TextField {
1450    /// Label to show for this text field
1451    /// deprecated in favor of label directly on FormField
1452    #[prost(string, tag = "1")]
1453    pub label: ::prost::alloc::string::String,
1454    /// if set, validate that input is at least this many characters
1455    /// `is_required` can be achieved by setting `min_length >= 1`
1456    #[prost(uint32, optional, tag = "4")]
1457    pub min_length: ::core::option::Option<u32>,
1458    /// if set, validate that input is at most this many characters
1459    #[prost(uint32, optional, tag = "5")]
1460    pub max_length: ::core::option::Option<u32>,
1461    /// type of form input to render. Defaults to SIMPLE.
1462    #[prost(oneof = "text_field::InputType", tags = "2, 3")]
1463    pub input_type: ::core::option::Option<text_field::InputType>,
1464}
1465/// Nested message and enum types in `TextField`.
1466pub mod text_field {
1467    /// type of form input to render. Defaults to SIMPLE.
1468    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1469    pub enum InputType {
1470        /// renders a simple html text input field
1471        #[prost(message, tag = "2")]
1472        Simple(super::TextFieldSimpleInputType),
1473        /// renders a Markdown editor for longer inputs with formatting capabilities
1474        #[prost(message, tag = "3")]
1475        Markdown(super::TextFieldMarkdownInputType),
1476    }
1477}
1478/// A field to capture an int value.
1479#[derive(Clone, PartialEq, ::prost::Message)]
1480pub struct IntField {
1481    /// Label to show for this int field
1482    /// deprecated in favor of label directly on FormField
1483    #[prost(string, tag = "1")]
1484    pub label: ::prost::alloc::string::String,
1485    /// Whether this field is required to be set complete the step.
1486    #[prost(bool, tag = "2")]
1487    pub is_required: bool,
1488    /// if set, validate that input is at least this value
1489    #[prost(int64, optional, tag = "3")]
1490    pub gte_value: ::core::option::Option<i64>,
1491    /// if set, validate that input is at most this value
1492    #[prost(int64, optional, tag = "4")]
1493    pub lte_value: ::core::option::Option<i64>,
1494}
1495/// A field to capture a double value.
1496#[derive(Clone, PartialEq, ::prost::Message)]
1497pub struct DoubleField {
1498    /// Label to show for this double field
1499    /// deprecated in favor of label directly on FormField
1500    #[prost(string, tag = "1")]
1501    pub label: ::prost::alloc::string::String,
1502    /// Whether this field is required to be set complete the step.
1503    #[prost(bool, tag = "2")]
1504    pub is_required: bool,
1505    /// if set, a validation on the lower bound of the input value
1506    #[prost(oneof = "double_field::LowerBound", tags = "3, 4")]
1507    pub lower_bound: ::core::option::Option<double_field::LowerBound>,
1508    /// if set, a validation on the upper bound of the input value
1509    #[prost(oneof = "double_field::UpperBound", tags = "5, 6")]
1510    pub upper_bound: ::core::option::Option<double_field::UpperBound>,
1511}
1512/// Nested message and enum types in `DoubleField`.
1513pub mod double_field {
1514    /// if set, a validation on the lower bound of the input value
1515    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1516    pub enum LowerBound {
1517        /// greater than
1518        #[prost(double, tag = "3")]
1519        GtValue(f64),
1520        /// greater than or equal to
1521        #[prost(double, tag = "4")]
1522        GteValue(f64),
1523    }
1524    /// if set, a validation on the upper bound of the input value
1525    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1526    pub enum UpperBound {
1527        /// less than
1528        #[prost(double, tag = "5")]
1529        LtValue(f64),
1530        /// less than or equal to
1531        #[prost(double, tag = "6")]
1532        LteValue(f64),
1533    }
1534}
1535#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1536pub struct EnumFieldButtonsInputType {}
1537#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1538pub struct EnumFieldMenuInputType {}
1539/// A field to capture one of several options.
1540#[derive(Clone, PartialEq, ::prost::Message)]
1541pub struct SingleEnumField {
1542    /// Label to show for this options field
1543    /// deprecated in favor of label directly on FormField
1544    #[prost(string, tag = "1")]
1545    pub label: ::prost::alloc::string::String,
1546    /// List of predefined options that can be selected by the user
1547    #[prost(string, repeated, tag = "2")]
1548    pub options: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1549    /// Whether a user can create and specify a new custom option not in the list of options.
1550    #[prost(bool, tag = "5")]
1551    pub allow_custom: bool,
1552    /// Whether a selection is required
1553    #[prost(bool, tag = "6")]
1554    pub is_required: bool,
1555    /// type of form input to render.
1556    #[prost(oneof = "single_enum_field::InputType", tags = "3, 4")]
1557    pub input_type: ::core::option::Option<single_enum_field::InputType>,
1558}
1559/// Nested message and enum types in `SingleEnumField`.
1560pub mod single_enum_field {
1561    /// type of form input to render.
1562    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1563    pub enum InputType {
1564        /// renders a radio button component
1565        #[prost(message, tag = "3")]
1566        Buttons(super::EnumFieldButtonsInputType),
1567        /// renders a typical drop down menu
1568        #[prost(message, tag = "4")]
1569        Dropdown(super::EnumFieldMenuInputType),
1570    }
1571}
1572/// A field to capture one or more of several options.
1573#[derive(Clone, PartialEq, ::prost::Message)]
1574pub struct MultiEnumField {
1575    /// Label to show for this options field
1576    /// deprecated in favor of label directly on FormField
1577    #[prost(string, tag = "1")]
1578    pub label: ::prost::alloc::string::String,
1579    /// List of predefined options that can be selected by the user
1580    #[prost(string, repeated, tag = "2")]
1581    pub options: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1582    /// Whether a user can create and specify a new custom option not in the list of options.
1583    #[prost(bool, tag = "6")]
1584    pub allow_custom: bool,
1585    /// If set, the user must select at least this many options
1586    /// `is_required` behavior can be achieved by setting `min_count` = 1
1587    #[prost(uint32, optional, tag = "7")]
1588    pub min_count: ::core::option::Option<u32>,
1589    /// If set, the user can select at most this many options
1590    #[prost(uint32, optional, tag = "8")]
1591    pub max_count: ::core::option::Option<u32>,
1592    /// type of form input to render.
1593    #[prost(oneof = "multi_enum_field::InputType", tags = "3, 4")]
1594    pub input_type: ::core::option::Option<multi_enum_field::InputType>,
1595}
1596/// Nested message and enum types in `MultiEnumField`.
1597pub mod multi_enum_field {
1598    /// type of form input to render.
1599    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1600    pub enum InputType {
1601        /// renders a collection of checkboxes
1602        #[prost(message, tag = "3")]
1603        Buttons(super::EnumFieldButtonsInputType),
1604        /// renders a typical drop down menu
1605        #[prost(message, tag = "4")]
1606        Dropdown(super::EnumFieldMenuInputType),
1607    }
1608}
1609/// A field to process the uploading of a file
1610#[derive(Clone, PartialEq, ::prost::Message)]
1611pub struct FileUploadField {
1612    /// If a file is required
1613    #[prost(bool, tag = "1")]
1614    pub is_required: bool,
1615    /// Optional list of case insensitive suffixes to filter files. (ie "csv", "parquet", or "json")
1616    #[prost(string, repeated, tag = "2")]
1617    pub suffix_filters: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1618}
1619/// A field to process the uploading of a dynamic set of files
1620#[derive(Clone, PartialEq, ::prost::Message)]
1621pub struct MultiFileUploadField {
1622    /// Count of required files
1623    #[prost(uint32, optional, tag = "1")]
1624    pub min_count: ::core::option::Option<u32>,
1625    /// File count limit
1626    #[prost(uint32, optional, tag = "2")]
1627    pub max_count: ::core::option::Option<u32>,
1628    /// Optional list of case insensitive suffixes to filter files. (ie "csv", "parquet", or "json")
1629    #[prost(string, repeated, tag = "3")]
1630    pub suffix_filters: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1631}
1632/// Metadata about a procedure that is not part of the versioned state.
1633#[derive(Clone, PartialEq, ::prost::Message)]
1634pub struct ProcedureMetadata {
1635    #[prost(string, tag = "1")]
1636    pub rid: ::prost::alloc::string::String,
1637    #[prost(string, tag = "2")]
1638    pub title: ::prost::alloc::string::String,
1639    #[prost(string, optional, tag = "3")]
1640    pub description: ::core::option::Option<::prost::alloc::string::String>,
1641    #[prost(string, repeated, tag = "4")]
1642    pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1643    #[prost(map = "string, string", tag = "5")]
1644    pub properties: ::std::collections::HashMap<
1645        ::prost::alloc::string::String,
1646        ::prost::alloc::string::String,
1647    >,
1648    #[prost(bool, tag = "6")]
1649    pub is_archived: bool,
1650    #[prost(bool, tag = "7")]
1651    pub is_published: bool,
1652    #[prost(message, optional, tag = "8")]
1653    pub created_at: ::core::option::Option<
1654        super::super::super::google::protobuf::Timestamp,
1655    >,
1656    #[prost(string, tag = "9")]
1657    pub created_by: ::prost::alloc::string::String,
1658    #[prost(message, optional, tag = "10")]
1659    pub updated_at: ::core::option::Option<
1660        super::super::super::google::protobuf::Timestamp,
1661    >,
1662    #[prost(string, tag = "11")]
1663    pub updated_by: ::prost::alloc::string::String,
1664    #[prost(string, tag = "12")]
1665    pub workspace: ::prost::alloc::string::String,
1666}
1667/// A procedure describes a series of steps to be performed, typically in a specific order,
1668#[derive(Clone, PartialEq, ::prost::Message)]
1669pub struct Procedure {
1670    /// The RID of the procedure.
1671    #[prost(string, tag = "1")]
1672    pub rid: ::prost::alloc::string::String,
1673    /// The commit ID of this version of the procedure.
1674    #[prost(string, tag = "2")]
1675    pub commit: ::prost::alloc::string::String,
1676    /// Metadata about the procedure.
1677    #[prost(message, optional, tag = "3")]
1678    pub metadata: ::core::option::Option<ProcedureMetadata>,
1679    /// The versioned state of the procedure.
1680    #[prost(message, optional, tag = "4")]
1681    pub state: ::core::option::Option<ProcedureState>,
1682}
1683#[derive(Clone, PartialEq, ::prost::Message)]
1684pub struct CreateProcedureRequest {
1685    #[prost(string, tag = "1")]
1686    pub title: ::prost::alloc::string::String,
1687    #[prost(string, optional, tag = "2")]
1688    pub description: ::core::option::Option<::prost::alloc::string::String>,
1689    #[prost(string, repeated, tag = "3")]
1690    pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1691    #[prost(map = "string, string", tag = "4")]
1692    pub properties: ::std::collections::HashMap<
1693        ::prost::alloc::string::String,
1694        ::prost::alloc::string::String,
1695    >,
1696    #[prost(message, optional, tag = "5")]
1697    pub state: ::core::option::Option<ProcedureState>,
1698    #[prost(bool, optional, tag = "6")]
1699    pub is_published: ::core::option::Option<bool>,
1700    #[prost(string, tag = "7")]
1701    pub workspace: ::prost::alloc::string::String,
1702    #[prost(string, tag = "8")]
1703    pub commit_message: ::prost::alloc::string::String,
1704    #[prost(string, optional, tag = "9")]
1705    pub initial_branch_name: ::core::option::Option<::prost::alloc::string::String>,
1706}
1707#[derive(Clone, PartialEq, ::prost::Message)]
1708pub struct CreateProcedureResponse {
1709    #[prost(message, optional, tag = "1")]
1710    pub procedure: ::core::option::Option<Procedure>,
1711    #[prost(string, optional, tag = "2")]
1712    pub branch_name: ::core::option::Option<::prost::alloc::string::String>,
1713}
1714#[derive(Clone, PartialEq, ::prost::Message)]
1715pub struct GetProcedureRequest {
1716    #[prost(string, tag = "1")]
1717    pub rid: ::prost::alloc::string::String,
1718    #[prost(message, optional, tag = "2")]
1719    pub branch_or_commit: ::core::option::Option<
1720        super::super::versioning::v1::BranchOrCommit,
1721    >,
1722    /// If true, the display graph will be included in the response.
1723    /// Default is false.
1724    #[prost(bool, tag = "3")]
1725    pub include_display_graph: bool,
1726}
1727#[derive(Clone, PartialEq, ::prost::Message)]
1728pub struct GetProcedureResponse {
1729    #[prost(message, optional, tag = "1")]
1730    pub procedure: ::core::option::Option<Procedure>,
1731    /// Included if include_display_graph was set to true
1732    #[prost(message, optional, tag = "2")]
1733    pub display_graph: ::core::option::Option<ProcedureDisplayGraph>,
1734}
1735#[derive(Clone, PartialEq, ::prost::Message)]
1736pub struct BatchGetProcedureMetadataRequest {
1737    #[prost(string, repeated, tag = "1")]
1738    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1739}
1740#[derive(Clone, PartialEq, ::prost::Message)]
1741pub struct BatchGetProcedureMetadataResponse {
1742    #[prost(message, repeated, tag = "1")]
1743    pub procedure_metadatas: ::prost::alloc::vec::Vec<ProcedureMetadata>,
1744}
1745#[derive(Clone, PartialEq, ::prost::Message)]
1746pub struct UpdateProcedureMetadataRequest {
1747    #[prost(string, tag = "1")]
1748    pub rid: ::prost::alloc::string::String,
1749    #[prost(string, optional, tag = "2")]
1750    pub title: ::core::option::Option<::prost::alloc::string::String>,
1751    #[prost(string, optional, tag = "3")]
1752    pub description: ::core::option::Option<::prost::alloc::string::String>,
1753    #[prost(message, optional, tag = "4")]
1754    pub labels: ::core::option::Option<super::super::types::LabelUpdateWrapper>,
1755    #[prost(message, optional, tag = "5")]
1756    pub properties: ::core::option::Option<super::super::types::PropertyUpdateWrapper>,
1757    #[prost(bool, optional, tag = "6")]
1758    pub is_archived: ::core::option::Option<bool>,
1759    #[prost(bool, optional, tag = "7")]
1760    pub is_published: ::core::option::Option<bool>,
1761}
1762#[derive(Clone, PartialEq, ::prost::Message)]
1763pub struct UpdateProcedureMetadataResponse {
1764    #[prost(message, optional, tag = "1")]
1765    pub procedure_metadata: ::core::option::Option<ProcedureMetadata>,
1766}
1767#[derive(Clone, PartialEq, ::prost::Message)]
1768pub struct ParseNestedProcedureRequest {
1769    #[prost(message, optional, tag = "1")]
1770    pub nested_procedure: ::core::option::Option<NestedProcedure>,
1771    /// If true, the display graph will be included in the response.
1772    /// Default is false.
1773    #[prost(bool, tag = "3")]
1774    pub include_display_graph: bool,
1775}
1776#[derive(Clone, PartialEq, ::prost::Message)]
1777pub struct ParseNestedProcedureResponse {
1778    #[prost(message, optional, tag = "1")]
1779    pub procedure: ::core::option::Option<Procedure>,
1780    /// Included if include_display_graph was set to true
1781    #[prost(message, optional, tag = "2")]
1782    pub display_graph: ::core::option::Option<ProcedureDisplayGraph>,
1783}
1784#[derive(Clone, PartialEq, ::prost::Message)]
1785pub struct GetProcedureAsNestedRequest {
1786    #[prost(string, tag = "1")]
1787    pub rid: ::prost::alloc::string::String,
1788    #[prost(message, optional, tag = "2")]
1789    pub branch_or_commit: ::core::option::Option<
1790        super::super::versioning::v1::BranchOrCommit,
1791    >,
1792}
1793#[derive(Clone, PartialEq, ::prost::Message)]
1794pub struct GetProcedureAsNestedResponse {
1795    #[prost(message, optional, tag = "1")]
1796    pub nested_procedure: ::core::option::Option<NestedProcedure>,
1797}
1798#[derive(Clone, PartialEq, ::prost::Message)]
1799pub struct MergeToMainRequest {
1800    #[prost(string, tag = "1")]
1801    pub rid: ::prost::alloc::string::String,
1802    #[prost(string, tag = "2")]
1803    pub branch: ::prost::alloc::string::String,
1804    /// If present, this commit ID must match the latest commit on main for the merge to succeed.
1805    #[prost(string, optional, tag = "3")]
1806    pub latest_commit_on_main: ::core::option::Option<::prost::alloc::string::String>,
1807    #[prost(string, tag = "4")]
1808    pub message: ::prost::alloc::string::String,
1809}
1810#[derive(Clone, PartialEq, ::prost::Message)]
1811pub struct MergeToMainResponse {
1812    #[prost(message, optional, tag = "1")]
1813    pub procedure: ::core::option::Option<Procedure>,
1814}
1815#[derive(Clone, PartialEq, ::prost::Message)]
1816pub struct SaveWorkingStateRequest {
1817    #[prost(string, tag = "1")]
1818    pub rid: ::prost::alloc::string::String,
1819    #[prost(string, optional, tag = "2")]
1820    pub branch: ::core::option::Option<::prost::alloc::string::String>,
1821    #[prost(string, tag = "3")]
1822    pub message: ::prost::alloc::string::String,
1823    /// If present, this commit ID must match the latest commit on the branch for the save to succeed.
1824    #[prost(string, optional, tag = "4")]
1825    pub latest_commit_on_branch: ::core::option::Option<::prost::alloc::string::String>,
1826    #[prost(message, optional, tag = "5")]
1827    pub state: ::core::option::Option<ProcedureState>,
1828}
1829#[derive(Clone, PartialEq, ::prost::Message)]
1830pub struct SaveWorkingStateResponse {
1831    #[prost(message, optional, tag = "1")]
1832    pub procedure: ::core::option::Option<Procedure>,
1833}
1834#[derive(Clone, PartialEq, ::prost::Message)]
1835pub struct CommitRequest {
1836    #[prost(string, tag = "1")]
1837    pub rid: ::prost::alloc::string::String,
1838    #[prost(string, optional, tag = "2")]
1839    pub branch: ::core::option::Option<::prost::alloc::string::String>,
1840    /// If present, this commit ID must match the latest commit on the branch for the commit to succeed.
1841    #[prost(string, optional, tag = "3")]
1842    pub latest_commit_on_branch: ::core::option::Option<::prost::alloc::string::String>,
1843    #[prost(string, tag = "4")]
1844    pub message: ::prost::alloc::string::String,
1845    #[prost(message, optional, tag = "5")]
1846    pub state: ::core::option::Option<ProcedureState>,
1847}
1848#[derive(Clone, PartialEq, ::prost::Message)]
1849pub struct CommitResponse {
1850    #[prost(message, optional, tag = "1")]
1851    pub procedure: ::core::option::Option<Procedure>,
1852}
1853#[derive(Clone, PartialEq, ::prost::Message)]
1854pub struct ProcedureSearchQuery {
1855    #[prost(oneof = "procedure_search_query::Query", tags = "1, 2, 3, 4, 5, 6, 7, 8")]
1856    pub query: ::core::option::Option<procedure_search_query::Query>,
1857}
1858/// Nested message and enum types in `ProcedureSearchQuery`.
1859pub mod procedure_search_query {
1860    #[derive(Clone, PartialEq, ::prost::Message)]
1861    pub struct ProcedureSearchAndQuery {
1862        #[prost(message, repeated, tag = "1")]
1863        pub queries: ::prost::alloc::vec::Vec<super::ProcedureSearchQuery>,
1864    }
1865    #[derive(Clone, PartialEq, ::prost::Message)]
1866    pub struct ProcedureSearchOrQuery {
1867        #[prost(message, repeated, tag = "1")]
1868        pub queries: ::prost::alloc::vec::Vec<super::ProcedureSearchQuery>,
1869    }
1870    #[derive(Clone, PartialEq, ::prost::Oneof)]
1871    pub enum Query {
1872        #[prost(string, tag = "1")]
1873        SearchText(::prost::alloc::string::String),
1874        #[prost(string, tag = "2")]
1875        Label(::prost::alloc::string::String),
1876        #[prost(message, tag = "3")]
1877        Property(super::super::super::types::Property),
1878        #[prost(message, tag = "4")]
1879        And(ProcedureSearchAndQuery),
1880        #[prost(message, tag = "5")]
1881        Or(ProcedureSearchOrQuery),
1882        #[prost(string, tag = "6")]
1883        Workspace(::prost::alloc::string::String),
1884        #[prost(string, tag = "7")]
1885        CreatedBy(::prost::alloc::string::String),
1886        #[prost(bool, tag = "8")]
1887        IsArchived(bool),
1888    }
1889}
1890#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1891pub struct SearchProceduresSortOptions {
1892    /// Defaults to true (descending)
1893    #[prost(bool, optional, tag = "1")]
1894    pub is_descending: ::core::option::Option<bool>,
1895    /// Defaults to CREATED_AT
1896    #[prost(enumeration = "SearchProceduresSortField", optional, tag = "2")]
1897    pub sort_field: ::core::option::Option<i32>,
1898}
1899#[derive(Clone, PartialEq, ::prost::Message)]
1900pub struct SearchProceduresRequest {
1901    #[prost(message, optional, tag = "1")]
1902    pub query: ::core::option::Option<ProcedureSearchQuery>,
1903    /// If not set, default is to sort by created_at descending
1904    #[prost(message, optional, tag = "2")]
1905    pub sort_options: ::core::option::Option<SearchProceduresSortOptions>,
1906    /// Page sizes greater than 1_000 will be rejected. Default pageSize is 100.
1907    #[prost(int32, optional, tag = "3")]
1908    pub page_size: ::core::option::Option<i32>,
1909    #[prost(string, optional, tag = "4")]
1910    pub next_page_token: ::core::option::Option<::prost::alloc::string::String>,
1911}
1912#[derive(Clone, PartialEq, ::prost::Message)]
1913pub struct SearchProceduresResponse {
1914    #[prost(message, repeated, tag = "1")]
1915    pub procedure_metadata: ::prost::alloc::vec::Vec<ProcedureMetadata>,
1916    #[prost(string, optional, tag = "2")]
1917    pub next_page_token: ::core::option::Option<::prost::alloc::string::String>,
1918}
1919#[derive(Clone, PartialEq, ::prost::Message)]
1920pub struct ArchiveProceduresRequest {
1921    #[prost(string, repeated, tag = "1")]
1922    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1923}
1924#[derive(Clone, PartialEq, ::prost::Message)]
1925pub struct ArchiveProceduresResponse {
1926    #[prost(string, repeated, tag = "1")]
1927    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1928}
1929#[derive(Clone, PartialEq, ::prost::Message)]
1930pub struct UnarchiveProceduresRequest {
1931    #[prost(string, repeated, tag = "1")]
1932    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1933}
1934#[derive(Clone, PartialEq, ::prost::Message)]
1935pub struct UnarchiveProceduresResponse {
1936    #[prost(string, repeated, tag = "1")]
1937    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1938}
1939#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1940#[repr(i32)]
1941pub enum SearchProceduresSortField {
1942    Unspecified = 0,
1943    Name = 1,
1944    CreatedAt = 2,
1945    UpdatedAt = 3,
1946}
1947impl SearchProceduresSortField {
1948    /// String value of the enum field names used in the ProtoBuf definition.
1949    ///
1950    /// The values are not transformed in any way and thus are considered stable
1951    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1952    pub fn as_str_name(&self) -> &'static str {
1953        match self {
1954            Self::Unspecified => "SEARCH_PROCEDURES_SORT_FIELD_UNSPECIFIED",
1955            Self::Name => "SEARCH_PROCEDURES_SORT_FIELD_NAME",
1956            Self::CreatedAt => "SEARCH_PROCEDURES_SORT_FIELD_CREATED_AT",
1957            Self::UpdatedAt => "SEARCH_PROCEDURES_SORT_FIELD_UPDATED_AT",
1958        }
1959    }
1960    /// Creates an enum from field names used in the ProtoBuf definition.
1961    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1962        match value {
1963            "SEARCH_PROCEDURES_SORT_FIELD_UNSPECIFIED" => Some(Self::Unspecified),
1964            "SEARCH_PROCEDURES_SORT_FIELD_NAME" => Some(Self::Name),
1965            "SEARCH_PROCEDURES_SORT_FIELD_CREATED_AT" => Some(Self::CreatedAt),
1966            "SEARCH_PROCEDURES_SORT_FIELD_UPDATED_AT" => Some(Self::UpdatedAt),
1967            _ => None,
1968        }
1969    }
1970}
1971#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1972#[repr(i32)]
1973pub enum ProceduresServiceError {
1974    Unspecified = 0,
1975    NotFound = 1,
1976    CommitNotFound = 2,
1977    CannotMergeMain = 3,
1978    CannotCommitToArchivedProcedure = 4,
1979    InvalidGraph = 5,
1980    InvalidSearchToken = 6,
1981}
1982impl ProceduresServiceError {
1983    /// String value of the enum field names used in the ProtoBuf definition.
1984    ///
1985    /// The values are not transformed in any way and thus are considered stable
1986    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1987    pub fn as_str_name(&self) -> &'static str {
1988        match self {
1989            Self::Unspecified => "PROCEDURES_SERVICE_ERROR_UNSPECIFIED",
1990            Self::NotFound => "PROCEDURES_SERVICE_ERROR_NOT_FOUND",
1991            Self::CommitNotFound => "PROCEDURES_SERVICE_ERROR_COMMIT_NOT_FOUND",
1992            Self::CannotMergeMain => "PROCEDURES_SERVICE_ERROR_CANNOT_MERGE_MAIN",
1993            Self::CannotCommitToArchivedProcedure => {
1994                "PROCEDURES_SERVICE_ERROR_CANNOT_COMMIT_TO_ARCHIVED_PROCEDURE"
1995            }
1996            Self::InvalidGraph => "PROCEDURES_SERVICE_ERROR_INVALID_GRAPH",
1997            Self::InvalidSearchToken => "PROCEDURES_SERVICE_ERROR_INVALID_SEARCH_TOKEN",
1998        }
1999    }
2000    /// Creates an enum from field names used in the ProtoBuf definition.
2001    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2002        match value {
2003            "PROCEDURES_SERVICE_ERROR_UNSPECIFIED" => Some(Self::Unspecified),
2004            "PROCEDURES_SERVICE_ERROR_NOT_FOUND" => Some(Self::NotFound),
2005            "PROCEDURES_SERVICE_ERROR_COMMIT_NOT_FOUND" => Some(Self::CommitNotFound),
2006            "PROCEDURES_SERVICE_ERROR_CANNOT_MERGE_MAIN" => Some(Self::CannotMergeMain),
2007            "PROCEDURES_SERVICE_ERROR_CANNOT_COMMIT_TO_ARCHIVED_PROCEDURE" => {
2008                Some(Self::CannotCommitToArchivedProcedure)
2009            }
2010            "PROCEDURES_SERVICE_ERROR_INVALID_GRAPH" => Some(Self::InvalidGraph),
2011            "PROCEDURES_SERVICE_ERROR_INVALID_SEARCH_TOKEN" => {
2012                Some(Self::InvalidSearchToken)
2013            }
2014            _ => None,
2015        }
2016    }
2017}
2018/// Generated client implementations.
2019pub mod procedures_service_client {
2020    #![allow(
2021        unused_variables,
2022        dead_code,
2023        missing_docs,
2024        clippy::wildcard_imports,
2025        clippy::let_unit_value,
2026    )]
2027    use tonic::codegen::*;
2028    use tonic::codegen::http::Uri;
2029    /// Service for creating and managing procedure templates, which are versioned collections
2030    /// of steps to be performed, typically in a specific order.
2031    #[derive(Debug, Clone)]
2032    pub struct ProceduresServiceClient<T> {
2033        inner: tonic::client::Grpc<T>,
2034    }
2035    impl ProceduresServiceClient<tonic::transport::Channel> {
2036        /// Attempt to create a new client by connecting to a given endpoint.
2037        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
2038        where
2039            D: TryInto<tonic::transport::Endpoint>,
2040            D::Error: Into<StdError>,
2041        {
2042            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
2043            Ok(Self::new(conn))
2044        }
2045    }
2046    impl<T> ProceduresServiceClient<T>
2047    where
2048        T: tonic::client::GrpcService<tonic::body::Body>,
2049        T::Error: Into<StdError>,
2050        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
2051        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
2052    {
2053        pub fn new(inner: T) -> Self {
2054            let inner = tonic::client::Grpc::new(inner);
2055            Self { inner }
2056        }
2057        pub fn with_origin(inner: T, origin: Uri) -> Self {
2058            let inner = tonic::client::Grpc::with_origin(inner, origin);
2059            Self { inner }
2060        }
2061        pub fn with_interceptor<F>(
2062            inner: T,
2063            interceptor: F,
2064        ) -> ProceduresServiceClient<InterceptedService<T, F>>
2065        where
2066            F: tonic::service::Interceptor,
2067            T::ResponseBody: Default,
2068            T: tonic::codegen::Service<
2069                http::Request<tonic::body::Body>,
2070                Response = http::Response<
2071                    <T as tonic::client::GrpcService<tonic::body::Body>>::ResponseBody,
2072                >,
2073            >,
2074            <T as tonic::codegen::Service<
2075                http::Request<tonic::body::Body>,
2076            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
2077        {
2078            ProceduresServiceClient::new(InterceptedService::new(inner, interceptor))
2079        }
2080        /// Compress requests with the given encoding.
2081        ///
2082        /// This requires the server to support it otherwise it might respond with an
2083        /// error.
2084        #[must_use]
2085        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
2086            self.inner = self.inner.send_compressed(encoding);
2087            self
2088        }
2089        /// Enable decompressing responses.
2090        #[must_use]
2091        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
2092            self.inner = self.inner.accept_compressed(encoding);
2093            self
2094        }
2095        /// Limits the maximum size of a decoded message.
2096        ///
2097        /// Default: `4MB`
2098        #[must_use]
2099        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
2100            self.inner = self.inner.max_decoding_message_size(limit);
2101            self
2102        }
2103        /// Limits the maximum size of an encoded message.
2104        ///
2105        /// Default: `usize::MAX`
2106        #[must_use]
2107        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
2108            self.inner = self.inner.max_encoding_message_size(limit);
2109            self
2110        }
2111        /// Create a new procedure
2112        pub async fn create_procedure(
2113            &mut self,
2114            request: impl tonic::IntoRequest<super::CreateProcedureRequest>,
2115        ) -> std::result::Result<
2116            tonic::Response<super::CreateProcedureResponse>,
2117            tonic::Status,
2118        > {
2119            self.inner
2120                .ready()
2121                .await
2122                .map_err(|e| {
2123                    tonic::Status::unknown(
2124                        format!("Service was not ready: {}", e.into()),
2125                    )
2126                })?;
2127            let codec = tonic::codec::ProstCodec::default();
2128            let path = http::uri::PathAndQuery::from_static(
2129                "/nominal.procedures.v1.ProceduresService/CreateProcedure",
2130            );
2131            let mut req = request.into_request();
2132            req.extensions_mut()
2133                .insert(
2134                    GrpcMethod::new(
2135                        "nominal.procedures.v1.ProceduresService",
2136                        "CreateProcedure",
2137                    ),
2138                );
2139            self.inner.unary(req, path, codec).await
2140        }
2141        /// Get a procedure by its RID
2142        pub async fn get_procedure(
2143            &mut self,
2144            request: impl tonic::IntoRequest<super::GetProcedureRequest>,
2145        ) -> std::result::Result<
2146            tonic::Response<super::GetProcedureResponse>,
2147            tonic::Status,
2148        > {
2149            self.inner
2150                .ready()
2151                .await
2152                .map_err(|e| {
2153                    tonic::Status::unknown(
2154                        format!("Service was not ready: {}", e.into()),
2155                    )
2156                })?;
2157            let codec = tonic::codec::ProstCodec::default();
2158            let path = http::uri::PathAndQuery::from_static(
2159                "/nominal.procedures.v1.ProceduresService/GetProcedure",
2160            );
2161            let mut req = request.into_request();
2162            req.extensions_mut()
2163                .insert(
2164                    GrpcMethod::new(
2165                        "nominal.procedures.v1.ProceduresService",
2166                        "GetProcedure",
2167                    ),
2168                );
2169            self.inner.unary(req, path, codec).await
2170        }
2171        /// Get metadata for multiple procedure by RIDs.
2172        /// Unauthorized RIDs will be omitted from the response.
2173        /// Order is not guaranteed to match the request.
2174        pub async fn batch_get_procedure_metadata(
2175            &mut self,
2176            request: impl tonic::IntoRequest<super::BatchGetProcedureMetadataRequest>,
2177        ) -> std::result::Result<
2178            tonic::Response<super::BatchGetProcedureMetadataResponse>,
2179            tonic::Status,
2180        > {
2181            self.inner
2182                .ready()
2183                .await
2184                .map_err(|e| {
2185                    tonic::Status::unknown(
2186                        format!("Service was not ready: {}", e.into()),
2187                    )
2188                })?;
2189            let codec = tonic::codec::ProstCodec::default();
2190            let path = http::uri::PathAndQuery::from_static(
2191                "/nominal.procedures.v1.ProceduresService/BatchGetProcedureMetadata",
2192            );
2193            let mut req = request.into_request();
2194            req.extensions_mut()
2195                .insert(
2196                    GrpcMethod::new(
2197                        "nominal.procedures.v1.ProceduresService",
2198                        "BatchGetProcedureMetadata",
2199                    ),
2200                );
2201            self.inner.unary(req, path, codec).await
2202        }
2203        /// Update the metadata of a procedure
2204        pub async fn update_procedure_metadata(
2205            &mut self,
2206            request: impl tonic::IntoRequest<super::UpdateProcedureMetadataRequest>,
2207        ) -> std::result::Result<
2208            tonic::Response<super::UpdateProcedureMetadataResponse>,
2209            tonic::Status,
2210        > {
2211            self.inner
2212                .ready()
2213                .await
2214                .map_err(|e| {
2215                    tonic::Status::unknown(
2216                        format!("Service was not ready: {}", e.into()),
2217                    )
2218                })?;
2219            let codec = tonic::codec::ProstCodec::default();
2220            let path = http::uri::PathAndQuery::from_static(
2221                "/nominal.procedures.v1.ProceduresService/UpdateProcedureMetadata",
2222            );
2223            let mut req = request.into_request();
2224            req.extensions_mut()
2225                .insert(
2226                    GrpcMethod::new(
2227                        "nominal.procedures.v1.ProceduresService",
2228                        "UpdateProcedureMetadata",
2229                    ),
2230                );
2231            self.inner.unary(req, path, codec).await
2232        }
2233        /// Parse a procedure from a nested procedure structure
2234        pub async fn parse_nested_procedure(
2235            &mut self,
2236            request: impl tonic::IntoRequest<super::ParseNestedProcedureRequest>,
2237        ) -> std::result::Result<
2238            tonic::Response<super::ParseNestedProcedureResponse>,
2239            tonic::Status,
2240        > {
2241            self.inner
2242                .ready()
2243                .await
2244                .map_err(|e| {
2245                    tonic::Status::unknown(
2246                        format!("Service was not ready: {}", e.into()),
2247                    )
2248                })?;
2249            let codec = tonic::codec::ProstCodec::default();
2250            let path = http::uri::PathAndQuery::from_static(
2251                "/nominal.procedures.v1.ProceduresService/ParseNestedProcedure",
2252            );
2253            let mut req = request.into_request();
2254            req.extensions_mut()
2255                .insert(
2256                    GrpcMethod::new(
2257                        "nominal.procedures.v1.ProceduresService",
2258                        "ParseNestedProcedure",
2259                    ),
2260                );
2261            self.inner.unary(req, path, codec).await
2262        }
2263        /// Get procedure as nested procedure
2264        /// TODO(pchen): in the future, not all graphs will be representable as nested procedures
2265        pub async fn get_procedure_as_nested(
2266            &mut self,
2267            request: impl tonic::IntoRequest<super::GetProcedureAsNestedRequest>,
2268        ) -> std::result::Result<
2269            tonic::Response<super::GetProcedureAsNestedResponse>,
2270            tonic::Status,
2271        > {
2272            self.inner
2273                .ready()
2274                .await
2275                .map_err(|e| {
2276                    tonic::Status::unknown(
2277                        format!("Service was not ready: {}", e.into()),
2278                    )
2279                })?;
2280            let codec = tonic::codec::ProstCodec::default();
2281            let path = http::uri::PathAndQuery::from_static(
2282                "/nominal.procedures.v1.ProceduresService/GetProcedureAsNested",
2283            );
2284            let mut req = request.into_request();
2285            req.extensions_mut()
2286                .insert(
2287                    GrpcMethod::new(
2288                        "nominal.procedures.v1.ProceduresService",
2289                        "GetProcedureAsNested",
2290                    ),
2291                );
2292            self.inner.unary(req, path, codec).await
2293        }
2294        /// Merge a branch of a procedure to main
2295        pub async fn merge_to_main(
2296            &mut self,
2297            request: impl tonic::IntoRequest<super::MergeToMainRequest>,
2298        ) -> std::result::Result<
2299            tonic::Response<super::MergeToMainResponse>,
2300            tonic::Status,
2301        > {
2302            self.inner
2303                .ready()
2304                .await
2305                .map_err(|e| {
2306                    tonic::Status::unknown(
2307                        format!("Service was not ready: {}", e.into()),
2308                    )
2309                })?;
2310            let codec = tonic::codec::ProstCodec::default();
2311            let path = http::uri::PathAndQuery::from_static(
2312                "/nominal.procedures.v1.ProceduresService/MergeToMain",
2313            );
2314            let mut req = request.into_request();
2315            req.extensions_mut()
2316                .insert(
2317                    GrpcMethod::new(
2318                        "nominal.procedures.v1.ProceduresService",
2319                        "MergeToMain",
2320                    ),
2321                );
2322            self.inner.unary(req, path, codec).await
2323        }
2324        /// Save the working state of a procedure
2325        pub async fn save_working_state(
2326            &mut self,
2327            request: impl tonic::IntoRequest<super::SaveWorkingStateRequest>,
2328        ) -> std::result::Result<
2329            tonic::Response<super::SaveWorkingStateResponse>,
2330            tonic::Status,
2331        > {
2332            self.inner
2333                .ready()
2334                .await
2335                .map_err(|e| {
2336                    tonic::Status::unknown(
2337                        format!("Service was not ready: {}", e.into()),
2338                    )
2339                })?;
2340            let codec = tonic::codec::ProstCodec::default();
2341            let path = http::uri::PathAndQuery::from_static(
2342                "/nominal.procedures.v1.ProceduresService/SaveWorkingState",
2343            );
2344            let mut req = request.into_request();
2345            req.extensions_mut()
2346                .insert(
2347                    GrpcMethod::new(
2348                        "nominal.procedures.v1.ProceduresService",
2349                        "SaveWorkingState",
2350                    ),
2351                );
2352            self.inner.unary(req, path, codec).await
2353        }
2354        /// Commit a procedure to a branch
2355        pub async fn commit(
2356            &mut self,
2357            request: impl tonic::IntoRequest<super::CommitRequest>,
2358        ) -> std::result::Result<tonic::Response<super::CommitResponse>, tonic::Status> {
2359            self.inner
2360                .ready()
2361                .await
2362                .map_err(|e| {
2363                    tonic::Status::unknown(
2364                        format!("Service was not ready: {}", e.into()),
2365                    )
2366                })?;
2367            let codec = tonic::codec::ProstCodec::default();
2368            let path = http::uri::PathAndQuery::from_static(
2369                "/nominal.procedures.v1.ProceduresService/Commit",
2370            );
2371            let mut req = request.into_request();
2372            req.extensions_mut()
2373                .insert(
2374                    GrpcMethod::new("nominal.procedures.v1.ProceduresService", "Commit"),
2375                );
2376            self.inner.unary(req, path, codec).await
2377        }
2378        /// Searches all procedures, returning paged results
2379        pub async fn search_procedures(
2380            &mut self,
2381            request: impl tonic::IntoRequest<super::SearchProceduresRequest>,
2382        ) -> std::result::Result<
2383            tonic::Response<super::SearchProceduresResponse>,
2384            tonic::Status,
2385        > {
2386            self.inner
2387                .ready()
2388                .await
2389                .map_err(|e| {
2390                    tonic::Status::unknown(
2391                        format!("Service was not ready: {}", e.into()),
2392                    )
2393                })?;
2394            let codec = tonic::codec::ProstCodec::default();
2395            let path = http::uri::PathAndQuery::from_static(
2396                "/nominal.procedures.v1.ProceduresService/SearchProcedures",
2397            );
2398            let mut req = request.into_request();
2399            req.extensions_mut()
2400                .insert(
2401                    GrpcMethod::new(
2402                        "nominal.procedures.v1.ProceduresService",
2403                        "SearchProcedures",
2404                    ),
2405                );
2406            self.inner.unary(req, path, codec).await
2407        }
2408        /// Archive procedures
2409        pub async fn archive_procedures(
2410            &mut self,
2411            request: impl tonic::IntoRequest<super::ArchiveProceduresRequest>,
2412        ) -> std::result::Result<
2413            tonic::Response<super::ArchiveProceduresResponse>,
2414            tonic::Status,
2415        > {
2416            self.inner
2417                .ready()
2418                .await
2419                .map_err(|e| {
2420                    tonic::Status::unknown(
2421                        format!("Service was not ready: {}", e.into()),
2422                    )
2423                })?;
2424            let codec = tonic::codec::ProstCodec::default();
2425            let path = http::uri::PathAndQuery::from_static(
2426                "/nominal.procedures.v1.ProceduresService/ArchiveProcedures",
2427            );
2428            let mut req = request.into_request();
2429            req.extensions_mut()
2430                .insert(
2431                    GrpcMethod::new(
2432                        "nominal.procedures.v1.ProceduresService",
2433                        "ArchiveProcedures",
2434                    ),
2435                );
2436            self.inner.unary(req, path, codec).await
2437        }
2438        /// Unarchive procedures
2439        pub async fn unarchive_procedures(
2440            &mut self,
2441            request: impl tonic::IntoRequest<super::UnarchiveProceduresRequest>,
2442        ) -> std::result::Result<
2443            tonic::Response<super::UnarchiveProceduresResponse>,
2444            tonic::Status,
2445        > {
2446            self.inner
2447                .ready()
2448                .await
2449                .map_err(|e| {
2450                    tonic::Status::unknown(
2451                        format!("Service was not ready: {}", e.into()),
2452                    )
2453                })?;
2454            let codec = tonic::codec::ProstCodec::default();
2455            let path = http::uri::PathAndQuery::from_static(
2456                "/nominal.procedures.v1.ProceduresService/UnarchiveProcedures",
2457            );
2458            let mut req = request.into_request();
2459            req.extensions_mut()
2460                .insert(
2461                    GrpcMethod::new(
2462                        "nominal.procedures.v1.ProceduresService",
2463                        "UnarchiveProcedures",
2464                    ),
2465                );
2466            self.inner.unary(req, path, codec).await
2467        }
2468    }
2469}