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")]
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        /// ...
542        #[prost(message, tag = "5")]
543        ApplyChecklists(super::ApplyChecklistsConfig),
544    }
545}
546/// An action to create an event when a step is completed.
547/// The completion state of the step is mapped to the event's EventType as follows:
548/// - SUCCEEDED -> SUCCESS
549/// - ERRORED -> ERROR
550/// - SKIPPED -> INFO
551#[derive(Clone, PartialEq, ::prost::Message)]
552pub struct CreateEventConfig {
553    #[prost(string, tag = "1")]
554    pub name: ::prost::alloc::string::String,
555    #[prost(string, optional, tag = "2")]
556    pub description: ::core::option::Option<::prost::alloc::string::String>,
557    #[prost(string, repeated, tag = "3")]
558    pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
559    /// Deprecated in favor of property_refs
560    /// Properties will be overridden by any property_refs with the same key.
561    #[prost(map = "string, string", tag = "4")]
562    pub properties: ::std::collections::HashMap<
563        ::prost::alloc::string::String,
564        ::prost::alloc::string::String,
565    >,
566    /// Each asset_field_id will be resolved and added as an AssetRid to the created event
567    /// deprecated in favor of asset_references
568    #[prost(string, repeated, tag = "5")]
569    pub asset_field_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
570    /// The assets to associate the event with. There must be at least one.
571    /// asset_references takes precedence over (deprecated) asset_field_ids if both are set.
572    ///
573    /// TODO(niwong): re-add after client updates \[(buf.validate.field).repeated.min_items = 1\];
574    #[prost(message, repeated, tag = "6")]
575    pub asset_references: ::prost::alloc::vec::Vec<AssetReference>,
576    /// Properties to apply to the event
577    #[prost(message, repeated, tag = "7")]
578    pub property_refs: ::prost::alloc::vec::Vec<PropertyReference>,
579}
580/// An action to send a notification to one or more integrations when a step is completed.
581#[derive(Clone, PartialEq, ::prost::Message)]
582pub struct SendNotificationConfig {
583    /// The integration(s) to use to send the notification.
584    #[prost(message, optional, tag = "1")]
585    pub integrations: ::core::option::Option<MultiIntegrationReference>,
586    /// The optional title of the notification (length constrained to 130 chars by the IntegrationService).
587    #[prost(message, optional, tag = "2")]
588    pub title: ::core::option::Option<StringReference>,
589    /// The message body of the notification.
590    ///
591    /// We are omitting some optional parameters to the IntegrationService#sendMessage endpoint,
592    /// such as tags, priority, and opsGenieAlias. For all current integration types as of 2025-09-15
593    /// (besides OpsGenie), only title and message are used.
594    #[prost(message, optional, tag = "3")]
595    pub message: ::core::option::Option<StringReference>,
596}
597/// An action to create a run when a step is completed.
598#[derive(Clone, PartialEq, ::prost::Message)]
599pub struct CreateRunConfig {
600    /// If present, the run RID for this step will be available in outputs under this field ID.
601    #[prost(string, optional, tag = "1")]
602    pub run_output_field_id: ::core::option::Option<::prost::alloc::string::String>,
603    /// The assets to associate the run with. There must be at least one.
604    #[prost(message, optional, tag = "2")]
605    pub assets: ::core::option::Option<MultiAssetReference>,
606    /// The name of the run.
607    #[prost(message, optional, tag = "3")]
608    pub name: ::core::option::Option<StringReference>,
609    /// Optionally, a description for the run.
610    #[prost(message, optional, tag = "4")]
611    pub description: ::core::option::Option<StringReference>,
612    /// The time range for the run. If unset, the run will be created with a zero-width time range at now().
613    #[prost(message, optional, tag = "5")]
614    pub time_range: ::core::option::Option<TimeRangeReference>,
615    /// Labels to apply on the run.
616    #[prost(message, optional, tag = "6")]
617    pub labels: ::core::option::Option<MultiStringReference>,
618    /// Properties to apply on the run.
619    ///
620    /// repeated UrlReference links;
621    /// repeated AttachmentRidReference attachments; // requires some sort of AttachmentRidField where FE handles upload
622    #[prost(message, repeated, tag = "7")]
623    pub properties: ::prost::alloc::vec::Vec<create_run_config::Property>,
624}
625/// Nested message and enum types in `CreateRunConfig`.
626pub mod create_run_config {
627    #[derive(Clone, PartialEq, ::prost::Message)]
628    pub struct Property {
629        #[prost(message, optional, tag = "1")]
630        pub key: ::core::option::Option<super::StringReference>,
631        #[prost(message, optional, tag = "2")]
632        pub value: ::core::option::Option<super::StringReference>,
633    }
634}
635/// An action to update an existing run when a step is completed (e.g. set end time to previous step end time).
636///
637/// option (buf.validate.message).cel = {
638///    id: "update_run_config.at_least_one_update"
639///    message: "At least one update field (name, description, time_range, labels, or properties) must be set"
640///    expression: "has(this.name) || has(this.description) || has(this.time_range) || has(this.labels) || this.properties.size() > 0"
641/// };
642#[derive(Clone, PartialEq, ::prost::Message)]
643pub struct UpdateRunConfig {
644    /// The run(s) to update. Typically but not limited to a reference to a run created earlier in the procedure
645    #[prost(message, optional, tag = "1")]
646    pub runs: ::core::option::Option<MultiRunReference>,
647    /// Optional PATCH-style updates. Only set fields that should change.
648    /// If unset, the run will not be updated.
649    #[prost(message, optional, tag = "2")]
650    pub name: ::core::option::Option<StringReference>,
651    #[prost(message, optional, tag = "3")]
652    pub description: ::core::option::Option<StringReference>,
653    #[prost(message, optional, tag = "4")]
654    pub time_range: ::core::option::Option<TimeRangeReference>,
655    /// TODO(ryanyost): support patch-behavior for labels
656    #[prost(message, optional, tag = "5")]
657    pub labels: ::core::option::Option<MultiStringReference>,
658    /// TODO(ryanyost): support patch-behavior for properties
659    #[prost(message, repeated, tag = "6")]
660    pub properties: ::prost::alloc::vec::Vec<PropertyReference>,
661    /// When true, time fields overwrite existing values. When false, start only moves earlier, end only moves later (aligns with runs API strictOverwrite).
662    #[prost(bool, optional, tag = "7")]
663    pub strict_overwrite: ::core::option::Option<bool>,
664}
665#[derive(Clone, PartialEq, ::prost::Message)]
666pub struct PropertyReference {
667    #[prost(message, optional, tag = "1")]
668    pub key: ::core::option::Option<StringReference>,
669    #[prost(message, optional, tag = "2")]
670    pub value: ::core::option::Option<StringReference>,
671}
672/// An action to apply one or more workbook templates to one or more runs when a step is completed.
673#[derive(Clone, PartialEq, ::prost::Message)]
674pub struct ApplyWorkbookTemplatesConfig {
675    /// The workbook templates to apply.
676    #[prost(message, optional, tag = "1")]
677    pub workbook_templates: ::core::option::Option<MultiWorkbookTemplateReference>,
678    /// The runs to apply the workbook templates to. There must be at least one.
679    #[prost(message, optional, tag = "2")]
680    pub runs: ::core::option::Option<MultiRunReference>,
681}
682/// An action to apply one or more checklists to one or more runs when a step is completed.
683#[derive(Clone, PartialEq, ::prost::Message)]
684pub struct ApplyChecklistsConfig {
685    /// The checklists to apply.
686    #[prost(message, optional, tag = "1")]
687    pub checklists: ::core::option::Option<MultiChecklistReference>,
688    /// The runs to apply the checklists to. There must be at least one.
689    #[prost(message, optional, tag = "2")]
690    pub runs: ::core::option::Option<MultiRunReference>,
691}
692/// The content of a procedure step. This typically involves some form of user interaction/input.
693#[derive(Clone, PartialEq, ::prost::Message)]
694pub struct ProcedureStepContent {
695    /// This should be kept in sync with NestedProcedureNode.NestedStepNode.content
696    #[prost(oneof = "procedure_step_content::Content", tags = "1, 2, 3, 4")]
697    pub content: ::core::option::Option<procedure_step_content::Content>,
698}
699/// Nested message and enum types in `ProcedureStepContent`.
700pub mod procedure_step_content {
701    /// This should be kept in sync with NestedProcedureNode.NestedStepNode.content
702    #[derive(Clone, PartialEq, ::prost::Oneof)]
703    pub enum Content {
704        #[prost(message, tag = "1")]
705        Form(super::FormStep),
706        #[prost(message, tag = "2")]
707        StartIngest(super::StartIngestStep),
708        #[prost(message, tag = "3")]
709        SelectOrCreateAsset(super::SelectOrCreateAssetStep),
710        /// ...
711        #[prost(message, tag = "4")]
712        Wait(super::WaitStep),
713    }
714}
715#[derive(Clone, Copy, PartialEq, ::prost::Message)]
716pub struct WaitStep {}
717/// A form step consists of a set of fields to be filled out by the user.
718#[derive(Clone, PartialEq, ::prost::Message)]
719pub struct FormStep {
720    #[prost(message, repeated, tag = "1")]
721    pub fields: ::prost::alloc::vec::Vec<FormField>,
722}
723/// The user will be prompted to start an ingest job in the frontend
724/// and the output of the step will be the rid of the created ingest job.
725#[derive(Clone, PartialEq, ::prost::Message)]
726pub struct StartIngestStep {
727    /// The asset to ingest data into.
728    #[prost(message, optional, tag = "1")]
729    pub asset: ::core::option::Option<AssetReference>,
730    /// The data scope within the asset to ingest data into.
731    #[prost(message, optional, tag = "2")]
732    pub ref_name: ::core::option::Option<StringReference>,
733    /// Restrict and pre-configure the type of ingest that can be started.
734    #[prost(message, optional, tag = "3")]
735    pub ingest_type_config: ::core::option::Option<start_ingest_step::IngestTypeConfig>,
736    /// If present, the ingest job RID for this step will be available in outputs under this field ID.
737    #[prost(string, optional, tag = "4")]
738    pub ingest_job_output_field_id: ::core::option::Option<
739        ::prost::alloc::string::String,
740    >,
741}
742/// Nested message and enum types in `StartIngestStep`.
743pub mod start_ingest_step {
744    #[derive(Clone, PartialEq, ::prost::Message)]
745    pub struct IngestTypeConfig {
746        #[prost(oneof = "ingest_type_config::Config", tags = "1, 2, 3, 4")]
747        pub config: ::core::option::Option<ingest_type_config::Config>,
748    }
749    /// Nested message and enum types in `IngestTypeConfig`.
750    pub mod ingest_type_config {
751        #[derive(Clone, PartialEq, ::prost::Message)]
752        pub struct ContainerizedExtractorIngestConfig {
753            /// The ingest job must use this specific containerized extractor.
754            #[prost(string, tag = "1")]
755            pub rid: ::prost::alloc::string::String,
756            /// The step will prompt the user to upload a file for each extractor input that doesn't have a FileInputBinding.
757            #[prost(message, repeated, tag = "2")]
758            pub file_input_bindings: ::prost::alloc::vec::Vec<
759                super::super::FileInputBinding,
760            >,
761        }
762        #[derive(Clone, PartialEq, ::prost::Message)]
763        pub struct DataflashIngestConfig {
764            /// File to ingest into the dataset. Should be a dataflash `.bin` file.
765            /// Uses tags configured on the asset data scope as additional file tags
766            #[prost(message, optional, tag = "1")]
767            pub file_input: ::core::option::Option<super::super::FileReference>,
768        }
769        #[derive(Clone, PartialEq, ::prost::Message)]
770        pub struct CsvIngestConfig {
771            /// header for timestamp column
772            #[prost(message, optional, tag = "1")]
773            pub timestamp_series_name: ::core::option::Option<
774                super::super::StringReference,
775            >,
776            #[prost(message, optional, tag = "2")]
777            pub timestamp_type: ::core::option::Option<
778                super::super::TimestampTypeParameter,
779            >,
780            /// File to ingest into the dataset. Should be a `.csv` or `.csv.gz` file.
781            /// Uses tags configured on the asset data scope as additional file tags
782            #[prost(message, optional, tag = "3")]
783            pub file_input: ::core::option::Option<super::super::FileReference>,
784        }
785        #[derive(Clone, PartialEq, ::prost::Message)]
786        pub struct ParquetIngestConfig {
787            /// header for timestamp column
788            #[prost(message, optional, tag = "1")]
789            pub timestamp_series_name: ::core::option::Option<
790                super::super::StringReference,
791            >,
792            #[prost(message, optional, tag = "2")]
793            pub timestamp_type: ::core::option::Option<
794                super::super::TimestampTypeParameter,
795            >,
796            /// File to ingest into the dataset. Should be a `.parquet` or `.parquet.gz` file or archive file.
797            /// Uses tags configured on the asset data scope as additional file tags
798            #[prost(message, optional, tag = "3")]
799            pub file_input: ::core::option::Option<super::super::FileReference>,
800        }
801        #[derive(Clone, PartialEq, ::prost::Oneof)]
802        pub enum Config {
803            /// The ingest job must be a containerized extractor ingest.
804            #[prost(message, tag = "1")]
805            ContainerizedExtractor(ContainerizedExtractorIngestConfig),
806            #[prost(message, tag = "2")]
807            Dataflash(DataflashIngestConfig),
808            #[prost(message, tag = "3")]
809            Csv(CsvIngestConfig),
810            #[prost(message, tag = "4")]
811            Parquet(ParquetIngestConfig),
812        }
813    }
814}
815#[derive(Clone, PartialEq, ::prost::Message)]
816pub struct FileInputBinding {
817    /// The input key. For containerized extractors, this is the environment variable name.
818    #[prost(string, tag = "1")]
819    pub environment_variable: ::prost::alloc::string::String,
820    /// The specific type of file
821    #[prost(message, optional, tag = "2")]
822    pub file_reference: ::core::option::Option<FileReference>,
823}
824#[derive(Clone, PartialEq, ::prost::Message)]
825pub struct FileReference {
826    #[prost(oneof = "file_reference::Option", tags = "1")]
827    pub option: ::core::option::Option<file_reference::Option>,
828}
829/// Nested message and enum types in `FileReference`.
830pub mod file_reference {
831    #[derive(Clone, PartialEq, ::prost::Oneof)]
832    pub enum Option {
833        /// Reference a field from a prior step
834        #[prost(string, tag = "1")]
835        FieldId(::prost::alloc::string::String),
836    }
837}
838#[derive(Clone, PartialEq, ::prost::Message)]
839pub struct TimestampTypeParameter {
840    #[prost(oneof = "timestamp_type_parameter::Option", tags = "1, 2")]
841    pub option: ::core::option::Option<timestamp_type_parameter::Option>,
842}
843/// Nested message and enum types in `TimestampTypeParameter`.
844pub mod timestamp_type_parameter {
845    /// Can allow for more configuration
846    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
847    pub struct UserInputOptions {}
848    #[derive(Clone, PartialEq, ::prost::Oneof)]
849    pub enum Option {
850        /// Timestamp type to always use for ingest.
851        #[prost(message, tag = "1")]
852        Constant(super::TimestampType),
853        /// If specified, allows user to enter timestamp metadata based on input options.
854        #[prost(message, tag = "2")]
855        UserInput(UserInputOptions),
856    }
857}
858#[derive(Clone, PartialEq, ::prost::Message)]
859pub struct TimestampType {
860    #[prost(oneof = "timestamp_type::Option", tags = "1, 2")]
861    pub option: ::core::option::Option<timestamp_type::Option>,
862}
863/// Nested message and enum types in `TimestampType`.
864pub mod timestamp_type {
865    #[derive(Clone, PartialEq, ::prost::Oneof)]
866    pub enum Option {
867        #[prost(message, tag = "1")]
868        Relative(super::RelativeTimestamp),
869        #[prost(message, tag = "2")]
870        Absolute(super::AbsoluteTimestamp),
871    }
872}
873#[derive(Clone, PartialEq, ::prost::Message)]
874pub struct RelativeTimestamp {
875    #[prost(string, tag = "1")]
876    pub time_unit: ::prost::alloc::string::String,
877    /// Starting timestamp to use when indexing the file.
878    #[prost(message, optional, tag = "2")]
879    pub offset: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
880}
881#[derive(Clone, PartialEq, ::prost::Message)]
882pub struct AbsoluteTimestamp {
883    #[prost(oneof = "absolute_timestamp::Option", tags = "1, 2, 3")]
884    pub option: ::core::option::Option<absolute_timestamp::Option>,
885}
886/// Nested message and enum types in `AbsoluteTimestamp`.
887pub mod absolute_timestamp {
888    #[derive(Clone, PartialEq, ::prost::Oneof)]
889    pub enum Option {
890        #[prost(message, tag = "1")]
891        Iso8601(super::Iso8601Timestamp),
892        #[prost(message, tag = "2")]
893        EpochOfTimeUnit(super::EpochTimestamp),
894        #[prost(message, tag = "3")]
895        CustomFormat(super::CustomTimestamp),
896    }
897}
898#[derive(Clone, Copy, PartialEq, ::prost::Message)]
899pub struct Iso8601Timestamp {}
900#[derive(Clone, PartialEq, ::prost::Message)]
901pub struct EpochTimestamp {
902    #[prost(string, tag = "1")]
903    pub time_unit: ::prost::alloc::string::String,
904}
905#[derive(Clone, PartialEq, ::prost::Message)]
906pub struct CustomTimestamp {
907    /// The format string should be in the format of the `DateTimeFormatter` class in Java.
908    #[prost(string, tag = "1")]
909    pub format: ::prost::alloc::string::String,
910    /// Default year is accepted as an optional field for cases like IRIG time format.
911    /// Will be overridden by year in time format.
912    #[prost(int32, optional, tag = "2")]
913    pub default_year: ::core::option::Option<i32>,
914    /// Default day of year is accepted as an optional field for cases like IRIG time format.
915    /// Will be overridden by day of year in time format.
916    #[prost(int32, optional, tag = "3")]
917    pub default_day_of_year: ::core::option::Option<i32>,
918}
919/// The user will be prompted to select an existing asset or create a new asset.
920#[derive(Clone, PartialEq, ::prost::Message)]
921pub struct SelectOrCreateAssetStep {
922    /// If present, the AssetRid for this step will be available in outputs under this field ID.
923    #[prost(string, optional, tag = "1")]
924    pub asset_output_field_id: ::core::option::Option<::prost::alloc::string::String>,
925    /// If present, the user will be given the option to create a new asset restricted by these parameters.
926    #[prost(message, optional, tag = "2")]
927    pub create_asset_parameters: ::core::option::Option<
928        select_or_create_asset_step::CreateAssetParameters,
929    >,
930    /// The asset selection options for this step.
931    /// This can be omitted, in which case the asset can be chosen freely from all assets.
932    #[prost(oneof = "select_or_create_asset_step::Options", tags = "3")]
933    pub options: ::core::option::Option<select_or_create_asset_step::Options>,
934}
935/// Nested message and enum types in `SelectOrCreateAssetStep`.
936pub mod select_or_create_asset_step {
937    /// When creating an new asset, the title is always provided by the user and the
938    /// frontend should prompt for it. Other parameters for asset creation can be
939    /// specified here as either user-prompted or preset.
940    #[derive(Clone, PartialEq, ::prost::Message)]
941    pub struct CreateAssetParameters {
942        /// If set, the new asset will be created with this description.
943        #[prost(message, optional, tag = "2")]
944        pub description: ::core::option::Option<
945            create_asset_parameters::DescriptionParameter,
946        >,
947        /// If set, the new asset will be created with these labels.
948        #[prost(message, optional, tag = "3")]
949        pub labels: ::core::option::Option<create_asset_parameters::LabelsParameter>,
950        /// If set, the new asset will be created with these properties.
951        #[prost(message, optional, tag = "4")]
952        pub properties: ::core::option::Option<
953            create_asset_parameters::PropertiesParameter,
954        >,
955        /// Data scopes for the new asset. The keys are the ref names of the data scopes.
956        #[prost(map = "string, message", tag = "5")]
957        pub data_scopes: ::std::collections::HashMap<
958            ::prost::alloc::string::String,
959            create_asset_parameters::DataScopeParameter,
960        >,
961    }
962    /// Nested message and enum types in `CreateAssetParameters`.
963    pub mod create_asset_parameters {
964        #[derive(Clone, PartialEq, ::prost::Message)]
965        pub struct DescriptionParameter {
966            #[prost(oneof = "description_parameter::Option", tags = "1")]
967            pub option: ::core::option::Option<description_parameter::Option>,
968        }
969        /// Nested message and enum types in `DescriptionParameter`.
970        pub mod description_parameter {
971            #[derive(Clone, PartialEq, ::prost::Oneof)]
972            pub enum Option {
973                /// The description is always a constant string.
974                ///
975                /// Can allow for free-form / guardrailed (templated?) user input.
976                #[prost(string, tag = "1")]
977                Constant(::prost::alloc::string::String),
978            }
979        }
980        #[derive(Clone, PartialEq, ::prost::Message)]
981        pub struct LabelsParameter {
982            /// Labels to always apply on the new asset.
983            #[prost(string, repeated, tag = "1")]
984            pub constant: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
985            /// If allowing for user input, the frontend should leverage ResourceMetadataService#listPropertiesAndLabels
986            /// to provide the user with existing labels to choose from.
987            #[prost(message, optional, tag = "2")]
988            pub user_input: ::core::option::Option<labels_parameter::UserInputOptions>,
989        }
990        /// Nested message and enum types in `LabelsParameter`.
991        pub mod labels_parameter {
992            /// Can allow for more configuration - e.g. default set of starting labels? (which can be overrideen)
993            #[derive(Clone, Copy, PartialEq, ::prost::Message)]
994            pub struct UserInputOptions {}
995        }
996        #[derive(Clone, PartialEq, ::prost::Message)]
997        pub struct PropertiesParameter {
998            /// Properties to always apply on the new asset.
999            #[prost(map = "string, string", tag = "1")]
1000            pub constant: ::std::collections::HashMap<
1001                ::prost::alloc::string::String,
1002                ::prost::alloc::string::String,
1003            >,
1004            /// If allowing for user input, the frontend should leverage ResourceMetadataService#listPropertiesAndLabels
1005            /// to provide the user with existing property keys/values to choose from.
1006            #[prost(message, optional, tag = "2")]
1007            pub user_input: ::core::option::Option<
1008                properties_parameter::UserInputOptions,
1009            >,
1010        }
1011        /// Nested message and enum types in `PropertiesParameter`.
1012        pub mod properties_parameter {
1013            #[derive(Clone, PartialEq, ::prost::Message)]
1014            pub struct UserInputOptions {
1015                /// Each property key here must have a value provided by the user for asset creation.
1016                #[prost(string, repeated, tag = "1")]
1017                pub required_keys: ::prost::alloc::vec::Vec<
1018                    ::prost::alloc::string::String,
1019                >,
1020                /// Each property key here will be suggested to the user but is not required for asset creation
1021                ///
1022                /// Can allow for more configuration - e.g. required k-v pairs, default k-v pairs?
1023                #[prost(string, repeated, tag = "2")]
1024                pub suggested_keys: ::prost::alloc::vec::Vec<
1025                    ::prost::alloc::string::String,
1026                >,
1027            }
1028        }
1029        #[derive(Clone, PartialEq, ::prost::Message)]
1030        pub struct DataScopeParameter {
1031            #[prost(message, optional, tag = "21")]
1032            pub series_tags: ::core::option::Option<super::super::TagsParameter>,
1033            #[prost(oneof = "data_scope_parameter::DataSource", tags = "1, 2")]
1034            pub data_source: ::core::option::Option<data_scope_parameter::DataSource>,
1035        }
1036        /// Nested message and enum types in `DataScopeParameter`.
1037        pub mod data_scope_parameter {
1038            /// The Dataset will be automatically named "{asset}-{ref_name}".
1039            /// Can later allow for this to be specified.
1040            /// Other CreateDataset options exist but are omitted for now
1041            #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1042            pub struct NewDataset {}
1043            #[derive(Clone, PartialEq, ::prost::Message)]
1044            pub struct ExistingDataset {
1045                /// The dataset options for this field.
1046                /// This can be omitted, in which case the dataset can be chosen freely.
1047                #[prost(oneof = "existing_dataset::Options", tags = "1")]
1048                pub options: ::core::option::Option<existing_dataset::Options>,
1049            }
1050            /// Nested message and enum types in `ExistingDataset`.
1051            pub mod existing_dataset {
1052                /// The dataset options for this field.
1053                /// This can be omitted, in which case the dataset can be chosen freely.
1054                #[derive(Clone, PartialEq, ::prost::Oneof)]
1055                pub enum Options {
1056                    /// The dataset must be chosen from preset options.
1057                    #[prost(message, tag = "1")]
1058                    PresetOptions(super::super::super::super::PresetDatasetFieldOptions),
1059                }
1060            }
1061            #[derive(Clone, PartialEq, ::prost::Oneof)]
1062            pub enum DataSource {
1063                /// Creates a new empty dataset.
1064                #[prost(message, tag = "1")]
1065                NewDataset(NewDataset),
1066                /// Use existing dataset
1067                #[prost(message, tag = "2")]
1068                ExistingDataset(ExistingDataset),
1069            }
1070        }
1071    }
1072    /// The asset selection options for this step.
1073    /// This can be omitted, in which case the asset can be chosen freely from all assets.
1074    #[derive(Clone, PartialEq, ::prost::Oneof)]
1075    pub enum Options {
1076        /// The asset must be chosen from preset options.
1077        ///
1078        /// The asset must be chosen from a saved view.
1079        /// SavedViewRid saved_view = 4;
1080        #[prost(message, tag = "3")]
1081        PresetOptions(super::PresetAssetFieldOptions),
1082    }
1083}
1084/// A limited set of options to choose from, with an optional default option.
1085#[derive(Clone, PartialEq, ::prost::Message)]
1086pub struct PresetDatasetFieldOptions {
1087    /// The list of options to choose from.
1088    #[prost(message, repeated, tag = "1")]
1089    pub options: ::prost::alloc::vec::Vec<DatasetReference>,
1090    /// If set, this option will be selected by default, if it is present in the options.
1091    /// The user can still select a different option.
1092    #[prost(message, optional, tag = "2")]
1093    pub default_option: ::core::option::Option<DatasetReference>,
1094}
1095/// A reference to a single dataset
1096#[derive(Clone, PartialEq, ::prost::Message)]
1097pub struct DatasetReference {
1098    #[prost(oneof = "dataset_reference::Option", tags = "1, 2")]
1099    pub option: ::core::option::Option<dataset_reference::Option>,
1100}
1101/// Nested message and enum types in `DatasetReference`.
1102pub mod dataset_reference {
1103    #[derive(Clone, PartialEq, ::prost::Oneof)]
1104    pub enum Option {
1105        /// a constant DatasetRid
1106        #[prost(string, tag = "1")]
1107        Rid(::prost::alloc::string::String),
1108        /// The field reference that will contain a DatasetRid value. The execution will fail if the field is not set
1109        /// but the value is accessed.
1110        #[prost(string, tag = "2")]
1111        FieldId(::prost::alloc::string::String),
1112    }
1113}
1114#[derive(Clone, PartialEq, ::prost::Message)]
1115pub struct TagsParameter {
1116    /// Tags to always filter to on the dataset or asset data scope.
1117    #[prost(map = "string, string", tag = "1")]
1118    pub constant: ::std::collections::HashMap<
1119        ::prost::alloc::string::String,
1120        ::prost::alloc::string::String,
1121    >,
1122    /// If allowing for user input, the frontend should leverage DataSourceService#getAvailableTagKeys/Values
1123    /// to provide the user with existing series tag keys/values to choose from.
1124    #[prost(message, optional, tag = "2")]
1125    pub user_input: ::core::option::Option<tags_parameter::UserInputOptions>,
1126}
1127/// Nested message and enum types in `TagsParameter`.
1128pub mod tags_parameter {
1129    #[derive(Clone, PartialEq, ::prost::Message)]
1130    pub struct UserInputOptions {
1131        /// Each tag key here must have a value provided by the user
1132        #[prost(string, repeated, tag = "1")]
1133        pub required_keys: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1134        /// Each tag key here will be suggested to the user but is not required
1135        ///
1136        /// Can allow for more configuration - e.g. required k-v pairs, default k-v pairs?
1137        #[prost(string, repeated, tag = "2")]
1138        pub suggested_keys: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1139    }
1140}
1141/// A reference to multiple string values
1142#[derive(Clone, PartialEq, ::prost::Message)]
1143pub struct MultiStringReference {
1144    #[prost(oneof = "multi_string_reference::Option", tags = "1")]
1145    pub option: ::core::option::Option<multi_string_reference::Option>,
1146}
1147/// Nested message and enum types in `MultiStringReference`.
1148pub mod multi_string_reference {
1149    #[derive(Clone, PartialEq, ::prost::Oneof)]
1150    pub enum Option {
1151        /// The value is taken from a field in the current or previous steps.
1152        #[prost(string, tag = "1")]
1153        FieldId(::prost::alloc::string::String),
1154    }
1155}
1156/// A reference to a single string value
1157#[derive(Clone, PartialEq, ::prost::Message)]
1158pub struct StringReference {
1159    #[prost(oneof = "string_reference::Option", tags = "1, 2")]
1160    pub option: ::core::option::Option<string_reference::Option>,
1161}
1162/// Nested message and enum types in `StringReference`.
1163pub mod string_reference {
1164    #[derive(Clone, PartialEq, ::prost::Oneof)]
1165    pub enum Option {
1166        /// The value is a constant string
1167        #[prost(string, tag = "1")]
1168        Constant(::prost::alloc::string::String),
1169        /// The value is taken from a field in the current or previous steps.
1170        ///
1171        /// TODO(WB-1728): support string templating.
1172        /// string template = 3;
1173        #[prost(string, tag = "2")]
1174        FieldId(::prost::alloc::string::String),
1175    }
1176}
1177/// A reference to multiple assets
1178#[derive(Clone, PartialEq, ::prost::Message)]
1179pub struct MultiAssetReference {
1180    #[prost(oneof = "multi_asset_reference::Option", tags = "1")]
1181    pub option: ::core::option::Option<multi_asset_reference::Option>,
1182}
1183/// Nested message and enum types in `MultiAssetReference`.
1184pub mod multi_asset_reference {
1185    #[derive(Clone, PartialEq, ::prost::Message)]
1186    pub struct AssetReferenceList {
1187        #[prost(message, repeated, tag = "1")]
1188        pub references: ::prost::alloc::vec::Vec<super::AssetReference>,
1189    }
1190    #[derive(Clone, PartialEq, ::prost::Oneof)]
1191    pub enum Option {
1192        /// TODO: add support for a field that contains a list of asset RIDs
1193        #[prost(message, tag = "1")]
1194        List(AssetReferenceList),
1195    }
1196}
1197/// A reference to a single asset
1198#[derive(Clone, PartialEq, ::prost::Message)]
1199pub struct AssetReference {
1200    #[prost(oneof = "asset_reference::Option", tags = "1, 2")]
1201    pub option: ::core::option::Option<asset_reference::Option>,
1202}
1203/// Nested message and enum types in `AssetReference`.
1204pub mod asset_reference {
1205    #[derive(Clone, PartialEq, ::prost::Oneof)]
1206    pub enum Option {
1207        /// a constant AssetRid
1208        #[prost(string, tag = "1")]
1209        Rid(::prost::alloc::string::String),
1210        /// The field reference that will contain an AssetRid value. The execution will fail if the field is not set
1211        /// but the value is accessed.
1212        #[prost(string, tag = "2")]
1213        FieldId(::prost::alloc::string::String),
1214    }
1215}
1216/// A reference to a time range
1217#[derive(Clone, PartialEq, ::prost::Message)]
1218pub struct TimeRangeReference {
1219    #[prost(oneof = "time_range_reference::Option", tags = "1")]
1220    pub option: ::core::option::Option<time_range_reference::Option>,
1221}
1222/// Nested message and enum types in `TimeRangeReference`.
1223pub mod time_range_reference {
1224    #[derive(Clone, PartialEq, ::prost::Message)]
1225    pub struct IngestJobList {
1226        /// Field ids that contain IngestJobRids.
1227        #[prost(string, repeated, tag = "1")]
1228        pub field_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1229    }
1230    #[derive(Clone, PartialEq, ::prost::Message)]
1231    pub struct RangeLiteral {
1232        #[prost(message, optional, tag = "1")]
1233        pub start: ::core::option::Option<super::TimestampReference>,
1234        #[prost(message, optional, tag = "2")]
1235        pub end: ::core::option::Option<super::TimestampReference>,
1236    }
1237    #[derive(Clone, PartialEq, ::prost::Oneof)]
1238    pub enum Option {
1239        /// The time range is the union of the time ranges ingested by all the specified ingest jobs.
1240        ///
1241        /// RangeLiteral literal = 2; // TODO(ryanyost): fails CI if included, comment out until implemented
1242        #[prost(message, tag = "1")]
1243        FromIngestJobs(IngestJobList),
1244    }
1245}
1246#[derive(Clone, PartialEq, ::prost::Message)]
1247pub struct TimestampReference {
1248    #[prost(oneof = "timestamp_reference::Option", tags = "1, 2")]
1249    pub option: ::core::option::Option<timestamp_reference::Option>,
1250}
1251/// Nested message and enum types in `TimestampReference`.
1252pub mod timestamp_reference {
1253    #[derive(Clone, PartialEq, ::prost::Oneof)]
1254    pub enum Option {
1255        /// A field reference that resolves to a timestamp
1256        /// e.g. {step_id}.start_time, {step_id}.end_time, {step_id}.submitted_at, etc.
1257        #[prost(string, tag = "1")]
1258        FieldId(::prost::alloc::string::String),
1259        /// A literal/constant timestamp
1260        #[prost(message, tag = "2")]
1261        Constant(super::super::super::super::google::protobuf::Timestamp),
1262    }
1263}
1264/// A reference to multiple runs
1265#[derive(Clone, PartialEq, ::prost::Message)]
1266pub struct MultiRunReference {
1267    #[prost(oneof = "multi_run_reference::Option", tags = "1")]
1268    pub option: ::core::option::Option<multi_run_reference::Option>,
1269}
1270/// Nested message and enum types in `MultiRunReference`.
1271pub mod multi_run_reference {
1272    #[derive(Clone, PartialEq, ::prost::Message)]
1273    pub struct RunReferenceList {
1274        #[prost(message, repeated, tag = "1")]
1275        pub references: ::prost::alloc::vec::Vec<super::RunReference>,
1276    }
1277    #[derive(Clone, PartialEq, ::prost::Oneof)]
1278    pub enum Option {
1279        /// TODO: add support for a field that contains a list of run RIDs
1280        #[prost(message, tag = "1")]
1281        List(RunReferenceList),
1282    }
1283}
1284/// A reference to a single run
1285#[derive(Clone, PartialEq, ::prost::Message)]
1286pub struct RunReference {
1287    #[prost(oneof = "run_reference::Option", tags = "1")]
1288    pub option: ::core::option::Option<run_reference::Option>,
1289}
1290/// Nested message and enum types in `RunReference`.
1291pub mod run_reference {
1292    #[derive(Clone, PartialEq, ::prost::Oneof)]
1293    pub enum Option {
1294        /// The field id that will contain a RunRid value. The execution will fail if the field is not set properly.
1295        #[prost(string, tag = "1")]
1296        FieldId(::prost::alloc::string::String),
1297    }
1298}
1299/// A reference to multiple workbook templates
1300#[derive(Clone, PartialEq, ::prost::Message)]
1301pub struct MultiWorkbookTemplateReference {
1302    #[prost(oneof = "multi_workbook_template_reference::Option", tags = "1")]
1303    pub option: ::core::option::Option<multi_workbook_template_reference::Option>,
1304}
1305/// Nested message and enum types in `MultiWorkbookTemplateReference`.
1306pub mod multi_workbook_template_reference {
1307    #[derive(Clone, PartialEq, ::prost::Message)]
1308    pub struct WorkbookTemplateReferenceList {
1309        #[prost(message, repeated, tag = "1")]
1310        pub references: ::prost::alloc::vec::Vec<super::WorkbookTemplateReference>,
1311    }
1312    #[derive(Clone, PartialEq, ::prost::Oneof)]
1313    pub enum Option {
1314        /// TODO: add support for a field that contains a list of workbook template RIDs
1315        #[prost(message, tag = "1")]
1316        List(WorkbookTemplateReferenceList),
1317    }
1318}
1319/// A reference to a single workbook template
1320#[derive(Clone, PartialEq, ::prost::Message)]
1321pub struct WorkbookTemplateReference {
1322    #[prost(oneof = "workbook_template_reference::Option", tags = "1")]
1323    pub option: ::core::option::Option<workbook_template_reference::Option>,
1324}
1325/// Nested message and enum types in `WorkbookTemplateReference`.
1326pub mod workbook_template_reference {
1327    #[derive(Clone, PartialEq, ::prost::Oneof)]
1328    pub enum Option {
1329        /// A constant workbook template RID.
1330        ///
1331        /// string field_id = 2;
1332        #[prost(string, tag = "1")]
1333        Rid(::prost::alloc::string::String),
1334    }
1335}
1336/// A reference to multiple checklists
1337#[derive(Clone, PartialEq, ::prost::Message)]
1338pub struct MultiChecklistReference {
1339    #[prost(oneof = "multi_checklist_reference::Option", tags = "1")]
1340    pub option: ::core::option::Option<multi_checklist_reference::Option>,
1341}
1342/// Nested message and enum types in `MultiChecklistReference`.
1343pub mod multi_checklist_reference {
1344    #[derive(Clone, PartialEq, ::prost::Message)]
1345    pub struct ChecklistReferenceList {
1346        #[prost(message, repeated, tag = "1")]
1347        pub references: ::prost::alloc::vec::Vec<super::ChecklistReference>,
1348    }
1349    #[derive(Clone, PartialEq, ::prost::Oneof)]
1350    pub enum Option {
1351        /// TODO: add support for a field that contains a list of checklist RIDs
1352        #[prost(message, tag = "1")]
1353        List(ChecklistReferenceList),
1354    }
1355}
1356/// A reference to a single checklist
1357#[derive(Clone, PartialEq, ::prost::Message)]
1358pub struct ChecklistReference {
1359    #[prost(oneof = "checklist_reference::Option", tags = "1")]
1360    pub option: ::core::option::Option<checklist_reference::Option>,
1361}
1362/// Nested message and enum types in `ChecklistReference`.
1363pub mod checklist_reference {
1364    #[derive(Clone, PartialEq, ::prost::Oneof)]
1365    pub enum Option {
1366        /// A constant checklist RID.
1367        ///
1368        /// string field_id = 2;
1369        #[prost(string, tag = "1")]
1370        Rid(::prost::alloc::string::String),
1371    }
1372}
1373/// A reference to multiple notification Integrations
1374#[derive(Clone, PartialEq, ::prost::Message)]
1375pub struct MultiIntegrationReference {
1376    #[prost(oneof = "multi_integration_reference::Option", tags = "1")]
1377    pub option: ::core::option::Option<multi_integration_reference::Option>,
1378}
1379/// Nested message and enum types in `MultiIntegrationReference`.
1380pub mod multi_integration_reference {
1381    #[derive(Clone, PartialEq, ::prost::Message)]
1382    pub struct IntegrationReferenceList {
1383        #[prost(message, repeated, tag = "1")]
1384        pub references: ::prost::alloc::vec::Vec<super::IntegrationReference>,
1385    }
1386    #[derive(Clone, PartialEq, ::prost::Oneof)]
1387    pub enum Option {
1388        #[prost(message, tag = "1")]
1389        List(IntegrationReferenceList),
1390    }
1391}
1392/// A reference to a notification Integration
1393#[derive(Clone, PartialEq, ::prost::Message)]
1394pub struct IntegrationReference {
1395    #[prost(oneof = "integration_reference::Option", tags = "1")]
1396    pub option: ::core::option::Option<integration_reference::Option>,
1397}
1398/// Nested message and enum types in `IntegrationReference`.
1399pub mod integration_reference {
1400    #[derive(Clone, PartialEq, ::prost::Oneof)]
1401    pub enum Option {
1402        /// A constant integration RID.
1403        ///
1404        /// string field_id = 2;
1405        #[prost(string, tag = "1")]
1406        Rid(::prost::alloc::string::String),
1407    }
1408}
1409/// A field to be filled out by the user.
1410#[derive(Clone, PartialEq, ::prost::Message)]
1411pub struct FormField {
1412    /// This field's id can be used by downstream steps to refer to the value.
1413    #[prost(string, tag = "1")]
1414    pub id: ::prost::alloc::string::String,
1415    /// UI label for the field component. Overrides any label defined in the specific FormField type.
1416    #[prost(string, optional, tag = "11")]
1417    pub label: ::core::option::Option<::prost::alloc::string::String>,
1418    /// Help text describing how to use this input field.
1419    #[prost(string, optional, tag = "12")]
1420    pub description: ::core::option::Option<::prost::alloc::string::String>,
1421    #[prost(oneof = "form_field::Field", tags = "2, 3, 4, 5, 6, 7, 8, 9, 10")]
1422    pub field: ::core::option::Option<form_field::Field>,
1423}
1424/// Nested message and enum types in `FormField`.
1425pub mod form_field {
1426    #[derive(Clone, PartialEq, ::prost::Oneof)]
1427    pub enum Field {
1428        #[prost(message, tag = "2")]
1429        Asset(super::AssetField),
1430        #[prost(message, tag = "3")]
1431        Checkbox(super::CheckboxField),
1432        #[prost(message, tag = "4")]
1433        Text(super::TextField),
1434        #[prost(message, tag = "5")]
1435        Int(super::IntField),
1436        #[prost(message, tag = "6")]
1437        Double(super::DoubleField),
1438        #[prost(message, tag = "7")]
1439        SingleEnum(super::SingleEnumField),
1440        #[prost(message, tag = "8")]
1441        MultiEnum(super::MultiEnumField),
1442        #[prost(message, tag = "9")]
1443        FileUpload(super::FileUploadField),
1444        #[prost(message, tag = "10")]
1445        MultiFileUpload(super::MultiFileUploadField),
1446    }
1447}
1448/// A limited set of options to choose from, with an optional default option.
1449#[derive(Clone, PartialEq, ::prost::Message)]
1450pub struct PresetAssetFieldOptions {
1451    /// The list of options to choose from.
1452    #[prost(message, repeated, tag = "1")]
1453    pub options: ::prost::alloc::vec::Vec<AssetReference>,
1454    /// If set, this option will be selected by default, if it is present in the options.
1455    /// The user can still select a different option.
1456    #[prost(message, optional, tag = "2")]
1457    pub default_option: ::core::option::Option<AssetReference>,
1458}
1459/// A field to select a single asset.
1460#[derive(Clone, PartialEq, ::prost::Message)]
1461pub struct AssetField {
1462    /// Helper text to guide selection of the asset
1463    /// deprecated in favor of label directly on FormField
1464    #[prost(string, tag = "1")]
1465    pub label: ::prost::alloc::string::String,
1466    /// Whether this field is required to be set complete the step.
1467    #[prost(bool, tag = "2")]
1468    pub is_required: bool,
1469    /// The asset options for this field.
1470    /// This can be omitted, in which case the asset can be chosen freely from all assets.
1471    #[prost(oneof = "asset_field::Options", tags = "3")]
1472    pub options: ::core::option::Option<asset_field::Options>,
1473}
1474/// Nested message and enum types in `AssetField`.
1475pub mod asset_field {
1476    /// The asset options for this field.
1477    /// This can be omitted, in which case the asset can be chosen freely from all assets.
1478    #[derive(Clone, PartialEq, ::prost::Oneof)]
1479    pub enum Options {
1480        /// The asset must be chosen from a saved view.
1481        /// SavedViewRid saved_view = 5;
1482        /// TODO(pchen): do we want to provide single string types from AssetFieldOption to simplify the Nested
1483        /// or do we want to explicitly modify the types Nested spec uses?
1484        #[prost(message, tag = "3")]
1485        PresetOptions(super::PresetAssetFieldOptions),
1486    }
1487}
1488/// A field to capture a boolean value.
1489#[derive(Clone, PartialEq, ::prost::Message)]
1490pub struct CheckboxField {
1491    /// Label to show for this checkbox field
1492    /// deprecated in favor of label directly on FormField
1493    #[prost(string, tag = "1")]
1494    pub label: ::prost::alloc::string::String,
1495    /// If set, the checkbox value must be checked (`true`) to complete the step.
1496    #[prost(bool, tag = "2")]
1497    pub is_required: bool,
1498}
1499#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1500pub struct TextFieldSimpleInputType {}
1501#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1502pub struct TextFieldMarkdownInputType {}
1503/// A field to capture a string value.
1504#[derive(Clone, PartialEq, ::prost::Message)]
1505pub struct TextField {
1506    /// Label to show for this text field
1507    /// deprecated in favor of label directly on FormField
1508    #[prost(string, tag = "1")]
1509    pub label: ::prost::alloc::string::String,
1510    /// if set, validate that input is at least this many characters
1511    /// `is_required` can be achieved by setting `min_length >= 1`
1512    #[prost(uint32, optional, tag = "4")]
1513    pub min_length: ::core::option::Option<u32>,
1514    /// if set, validate that input is at most this many characters
1515    #[prost(uint32, optional, tag = "5")]
1516    pub max_length: ::core::option::Option<u32>,
1517    /// type of form input to render. Defaults to SIMPLE.
1518    #[prost(oneof = "text_field::InputType", tags = "2, 3")]
1519    pub input_type: ::core::option::Option<text_field::InputType>,
1520}
1521/// Nested message and enum types in `TextField`.
1522pub mod text_field {
1523    /// type of form input to render. Defaults to SIMPLE.
1524    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1525    pub enum InputType {
1526        /// renders a simple html text input field
1527        #[prost(message, tag = "2")]
1528        Simple(super::TextFieldSimpleInputType),
1529        /// renders a Markdown editor for longer inputs with formatting capabilities
1530        #[prost(message, tag = "3")]
1531        Markdown(super::TextFieldMarkdownInputType),
1532    }
1533}
1534/// A field to capture an int value.
1535#[derive(Clone, PartialEq, ::prost::Message)]
1536pub struct IntField {
1537    /// Label to show for this int field
1538    /// deprecated in favor of label directly on FormField
1539    #[prost(string, tag = "1")]
1540    pub label: ::prost::alloc::string::String,
1541    /// Whether this field is required to be set complete the step.
1542    #[prost(bool, tag = "2")]
1543    pub is_required: bool,
1544    /// if set, validate that input is at least this value
1545    #[prost(int64, optional, tag = "3")]
1546    pub gte_value: ::core::option::Option<i64>,
1547    /// if set, validate that input is at most this value
1548    #[prost(int64, optional, tag = "4")]
1549    pub lte_value: ::core::option::Option<i64>,
1550}
1551/// A field to capture a double value.
1552#[derive(Clone, PartialEq, ::prost::Message)]
1553pub struct DoubleField {
1554    /// Label to show for this double field
1555    /// deprecated in favor of label directly on FormField
1556    #[prost(string, tag = "1")]
1557    pub label: ::prost::alloc::string::String,
1558    /// Whether this field is required to be set complete the step.
1559    #[prost(bool, tag = "2")]
1560    pub is_required: bool,
1561    /// if set, a validation on the lower bound of the input value
1562    #[prost(oneof = "double_field::LowerBound", tags = "3, 4")]
1563    pub lower_bound: ::core::option::Option<double_field::LowerBound>,
1564    /// if set, a validation on the upper bound of the input value
1565    #[prost(oneof = "double_field::UpperBound", tags = "5, 6")]
1566    pub upper_bound: ::core::option::Option<double_field::UpperBound>,
1567}
1568/// Nested message and enum types in `DoubleField`.
1569pub mod double_field {
1570    /// if set, a validation on the lower bound of the input value
1571    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1572    pub enum LowerBound {
1573        /// greater than
1574        #[prost(double, tag = "3")]
1575        GtValue(f64),
1576        /// greater than or equal to
1577        #[prost(double, tag = "4")]
1578        GteValue(f64),
1579    }
1580    /// if set, a validation on the upper bound of the input value
1581    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1582    pub enum UpperBound {
1583        /// less than
1584        #[prost(double, tag = "5")]
1585        LtValue(f64),
1586        /// less than or equal to
1587        #[prost(double, tag = "6")]
1588        LteValue(f64),
1589    }
1590}
1591#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1592pub struct EnumFieldButtonsInputType {}
1593#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1594pub struct EnumFieldMenuInputType {}
1595/// A field to capture one of several options.
1596#[derive(Clone, PartialEq, ::prost::Message)]
1597pub struct SingleEnumField {
1598    /// Label to show for this options field
1599    /// deprecated in favor of label directly on FormField
1600    #[prost(string, tag = "1")]
1601    pub label: ::prost::alloc::string::String,
1602    /// List of predefined options that can be selected by the user
1603    #[prost(string, repeated, tag = "2")]
1604    pub options: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1605    /// Whether a user can create and specify a new custom option not in the list of options.
1606    #[prost(bool, tag = "5")]
1607    pub allow_custom: bool,
1608    /// Whether a selection is required
1609    #[prost(bool, tag = "6")]
1610    pub is_required: bool,
1611    /// type of form input to render.
1612    #[prost(oneof = "single_enum_field::InputType", tags = "3, 4")]
1613    pub input_type: ::core::option::Option<single_enum_field::InputType>,
1614}
1615/// Nested message and enum types in `SingleEnumField`.
1616pub mod single_enum_field {
1617    /// type of form input to render.
1618    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1619    pub enum InputType {
1620        /// renders a radio button component
1621        #[prost(message, tag = "3")]
1622        Buttons(super::EnumFieldButtonsInputType),
1623        /// renders a typical drop down menu
1624        #[prost(message, tag = "4")]
1625        Dropdown(super::EnumFieldMenuInputType),
1626    }
1627}
1628/// A field to capture one or more of several options.
1629#[derive(Clone, PartialEq, ::prost::Message)]
1630pub struct MultiEnumField {
1631    /// Label to show for this options field
1632    /// deprecated in favor of label directly on FormField
1633    #[prost(string, tag = "1")]
1634    pub label: ::prost::alloc::string::String,
1635    /// List of predefined options that can be selected by the user
1636    #[prost(string, repeated, tag = "2")]
1637    pub options: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1638    /// Whether a user can create and specify a new custom option not in the list of options.
1639    #[prost(bool, tag = "6")]
1640    pub allow_custom: bool,
1641    /// If set, the user must select at least this many options
1642    /// `is_required` behavior can be achieved by setting `min_count` = 1
1643    #[prost(uint32, optional, tag = "7")]
1644    pub min_count: ::core::option::Option<u32>,
1645    /// If set, the user can select at most this many options
1646    #[prost(uint32, optional, tag = "8")]
1647    pub max_count: ::core::option::Option<u32>,
1648    /// type of form input to render.
1649    #[prost(oneof = "multi_enum_field::InputType", tags = "3, 4")]
1650    pub input_type: ::core::option::Option<multi_enum_field::InputType>,
1651}
1652/// Nested message and enum types in `MultiEnumField`.
1653pub mod multi_enum_field {
1654    /// type of form input to render.
1655    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1656    pub enum InputType {
1657        /// renders a collection of checkboxes
1658        #[prost(message, tag = "3")]
1659        Buttons(super::EnumFieldButtonsInputType),
1660        /// renders a typical drop down menu
1661        #[prost(message, tag = "4")]
1662        Dropdown(super::EnumFieldMenuInputType),
1663    }
1664}
1665/// A field to process the uploading of a file
1666#[derive(Clone, PartialEq, ::prost::Message)]
1667pub struct FileUploadField {
1668    /// If a file is required
1669    #[prost(bool, tag = "1")]
1670    pub is_required: bool,
1671    /// Optional list of case insensitive suffixes to filter files. (ie "csv", "parquet", or "json")
1672    #[prost(string, repeated, tag = "2")]
1673    pub suffix_filters: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1674}
1675/// A field to process the uploading of a dynamic set of files
1676#[derive(Clone, PartialEq, ::prost::Message)]
1677pub struct MultiFileUploadField {
1678    /// Count of required files
1679    #[prost(uint32, optional, tag = "1")]
1680    pub min_count: ::core::option::Option<u32>,
1681    /// File count limit
1682    #[prost(uint32, optional, tag = "2")]
1683    pub max_count: ::core::option::Option<u32>,
1684    /// Optional list of case insensitive suffixes to filter files. (ie "csv", "parquet", or "json")
1685    #[prost(string, repeated, tag = "3")]
1686    pub suffix_filters: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1687}
1688/// Metadata about a procedure that is not part of the versioned state.
1689#[derive(Clone, PartialEq, ::prost::Message)]
1690pub struct ProcedureMetadata {
1691    #[prost(string, tag = "1")]
1692    pub rid: ::prost::alloc::string::String,
1693    #[prost(string, tag = "2")]
1694    pub title: ::prost::alloc::string::String,
1695    #[prost(string, optional, tag = "3")]
1696    pub description: ::core::option::Option<::prost::alloc::string::String>,
1697    #[prost(string, repeated, tag = "4")]
1698    pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1699    #[prost(map = "string, string", tag = "5")]
1700    pub properties: ::std::collections::HashMap<
1701        ::prost::alloc::string::String,
1702        ::prost::alloc::string::String,
1703    >,
1704    #[prost(bool, tag = "6")]
1705    pub is_archived: bool,
1706    #[prost(bool, tag = "7")]
1707    pub is_published: bool,
1708    #[prost(message, optional, tag = "8")]
1709    pub created_at: ::core::option::Option<
1710        super::super::super::google::protobuf::Timestamp,
1711    >,
1712    #[prost(string, tag = "9")]
1713    pub created_by: ::prost::alloc::string::String,
1714    #[prost(message, optional, tag = "10")]
1715    pub updated_at: ::core::option::Option<
1716        super::super::super::google::protobuf::Timestamp,
1717    >,
1718    #[prost(string, tag = "11")]
1719    pub updated_by: ::prost::alloc::string::String,
1720    #[prost(string, tag = "12")]
1721    pub workspace: ::prost::alloc::string::String,
1722}
1723/// A procedure describes a series of steps to be performed, typically in a specific order,
1724#[derive(Clone, PartialEq, ::prost::Message)]
1725pub struct Procedure {
1726    /// The RID of the procedure.
1727    #[prost(string, tag = "1")]
1728    pub rid: ::prost::alloc::string::String,
1729    /// The commit ID of this version of the procedure.
1730    #[prost(string, tag = "2")]
1731    pub commit: ::prost::alloc::string::String,
1732    /// Metadata about the procedure.
1733    #[prost(message, optional, tag = "3")]
1734    pub metadata: ::core::option::Option<ProcedureMetadata>,
1735    /// The versioned state of the procedure.
1736    #[prost(message, optional, tag = "4")]
1737    pub state: ::core::option::Option<ProcedureState>,
1738}
1739#[derive(Clone, PartialEq, ::prost::Message)]
1740pub struct CreateProcedureRequest {
1741    #[prost(string, tag = "1")]
1742    pub title: ::prost::alloc::string::String,
1743    #[prost(string, optional, tag = "2")]
1744    pub description: ::core::option::Option<::prost::alloc::string::String>,
1745    #[prost(string, repeated, tag = "3")]
1746    pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1747    #[prost(map = "string, string", tag = "4")]
1748    pub properties: ::std::collections::HashMap<
1749        ::prost::alloc::string::String,
1750        ::prost::alloc::string::String,
1751    >,
1752    #[prost(message, optional, tag = "5")]
1753    pub state: ::core::option::Option<ProcedureState>,
1754    #[prost(bool, optional, tag = "6")]
1755    pub is_published: ::core::option::Option<bool>,
1756    #[prost(string, tag = "7")]
1757    pub workspace: ::prost::alloc::string::String,
1758    #[prost(string, tag = "8")]
1759    pub commit_message: ::prost::alloc::string::String,
1760    #[prost(string, optional, tag = "9")]
1761    pub initial_branch_name: ::core::option::Option<::prost::alloc::string::String>,
1762}
1763#[derive(Clone, PartialEq, ::prost::Message)]
1764pub struct CreateProcedureResponse {
1765    #[prost(message, optional, tag = "1")]
1766    pub procedure: ::core::option::Option<Procedure>,
1767    #[prost(string, optional, tag = "2")]
1768    pub branch_name: ::core::option::Option<::prost::alloc::string::String>,
1769}
1770#[derive(Clone, PartialEq, ::prost::Message)]
1771pub struct GetProcedureRequest {
1772    #[prost(string, tag = "1")]
1773    pub rid: ::prost::alloc::string::String,
1774    #[prost(message, optional, tag = "2")]
1775    pub branch_or_commit: ::core::option::Option<
1776        super::super::versioning::v1::BranchOrCommit,
1777    >,
1778    /// If true, the display graph will be included in the response.
1779    /// Default is false.
1780    #[prost(bool, tag = "3")]
1781    pub include_display_graph: bool,
1782}
1783#[derive(Clone, PartialEq, ::prost::Message)]
1784pub struct GetProcedureResponse {
1785    #[prost(message, optional, tag = "1")]
1786    pub procedure: ::core::option::Option<Procedure>,
1787    /// Included if include_display_graph was set to true
1788    #[prost(message, optional, tag = "2")]
1789    pub display_graph: ::core::option::Option<ProcedureDisplayGraph>,
1790}
1791#[derive(Clone, PartialEq, ::prost::Message)]
1792pub struct BatchGetProcedureMetadataRequest {
1793    #[prost(string, repeated, tag = "1")]
1794    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1795}
1796#[derive(Clone, PartialEq, ::prost::Message)]
1797pub struct BatchGetProcedureMetadataResponse {
1798    #[prost(message, repeated, tag = "1")]
1799    pub procedure_metadatas: ::prost::alloc::vec::Vec<ProcedureMetadata>,
1800}
1801#[derive(Clone, PartialEq, ::prost::Message)]
1802pub struct UpdateProcedureMetadataRequest {
1803    #[prost(string, tag = "1")]
1804    pub rid: ::prost::alloc::string::String,
1805    #[prost(string, optional, tag = "2")]
1806    pub title: ::core::option::Option<::prost::alloc::string::String>,
1807    #[prost(string, optional, tag = "3")]
1808    pub description: ::core::option::Option<::prost::alloc::string::String>,
1809    #[prost(message, optional, tag = "4")]
1810    pub labels: ::core::option::Option<super::super::types::LabelUpdateWrapper>,
1811    #[prost(message, optional, tag = "5")]
1812    pub properties: ::core::option::Option<super::super::types::PropertyUpdateWrapper>,
1813    #[prost(bool, optional, tag = "6")]
1814    pub is_archived: ::core::option::Option<bool>,
1815    #[prost(bool, optional, tag = "7")]
1816    pub is_published: ::core::option::Option<bool>,
1817}
1818#[derive(Clone, PartialEq, ::prost::Message)]
1819pub struct UpdateProcedureMetadataResponse {
1820    #[prost(message, optional, tag = "1")]
1821    pub procedure_metadata: ::core::option::Option<ProcedureMetadata>,
1822}
1823#[derive(Clone, PartialEq, ::prost::Message)]
1824pub struct ParseNestedProcedureRequest {
1825    #[prost(message, optional, tag = "1")]
1826    pub nested_procedure: ::core::option::Option<NestedProcedure>,
1827    /// If true, the display graph will be included in the response.
1828    /// Default is false.
1829    #[prost(bool, tag = "3")]
1830    pub include_display_graph: bool,
1831}
1832#[derive(Clone, PartialEq, ::prost::Message)]
1833pub struct ParseNestedProcedureResponse {
1834    #[prost(message, optional, tag = "1")]
1835    pub procedure: ::core::option::Option<Procedure>,
1836    /// Included if include_display_graph was set to true
1837    #[prost(message, optional, tag = "2")]
1838    pub display_graph: ::core::option::Option<ProcedureDisplayGraph>,
1839}
1840#[derive(Clone, PartialEq, ::prost::Message)]
1841pub struct GetProcedureAsNestedRequest {
1842    #[prost(string, tag = "1")]
1843    pub rid: ::prost::alloc::string::String,
1844    #[prost(message, optional, tag = "2")]
1845    pub branch_or_commit: ::core::option::Option<
1846        super::super::versioning::v1::BranchOrCommit,
1847    >,
1848}
1849#[derive(Clone, PartialEq, ::prost::Message)]
1850pub struct GetProcedureAsNestedResponse {
1851    #[prost(message, optional, tag = "1")]
1852    pub nested_procedure: ::core::option::Option<NestedProcedure>,
1853}
1854#[derive(Clone, PartialEq, ::prost::Message)]
1855pub struct MergeToMainRequest {
1856    #[prost(string, tag = "1")]
1857    pub rid: ::prost::alloc::string::String,
1858    #[prost(string, tag = "2")]
1859    pub branch: ::prost::alloc::string::String,
1860    /// If present, this commit ID must match the latest commit on main for the merge to succeed.
1861    #[prost(string, optional, tag = "3")]
1862    pub latest_commit_on_main: ::core::option::Option<::prost::alloc::string::String>,
1863    #[prost(string, tag = "4")]
1864    pub message: ::prost::alloc::string::String,
1865}
1866#[derive(Clone, PartialEq, ::prost::Message)]
1867pub struct MergeToMainResponse {
1868    #[prost(message, optional, tag = "1")]
1869    pub procedure: ::core::option::Option<Procedure>,
1870}
1871#[derive(Clone, PartialEq, ::prost::Message)]
1872pub struct SaveWorkingStateRequest {
1873    #[prost(string, tag = "1")]
1874    pub rid: ::prost::alloc::string::String,
1875    #[prost(string, optional, tag = "2")]
1876    pub branch: ::core::option::Option<::prost::alloc::string::String>,
1877    #[prost(string, tag = "3")]
1878    pub message: ::prost::alloc::string::String,
1879    /// If present, this commit ID must match the latest commit on the branch for the save to succeed.
1880    #[prost(string, optional, tag = "4")]
1881    pub latest_commit_on_branch: ::core::option::Option<::prost::alloc::string::String>,
1882    #[prost(message, optional, tag = "5")]
1883    pub state: ::core::option::Option<ProcedureState>,
1884}
1885#[derive(Clone, PartialEq, ::prost::Message)]
1886pub struct SaveWorkingStateResponse {
1887    #[prost(message, optional, tag = "1")]
1888    pub procedure: ::core::option::Option<Procedure>,
1889}
1890#[derive(Clone, PartialEq, ::prost::Message)]
1891pub struct CommitRequest {
1892    #[prost(string, tag = "1")]
1893    pub rid: ::prost::alloc::string::String,
1894    #[prost(string, optional, tag = "2")]
1895    pub branch: ::core::option::Option<::prost::alloc::string::String>,
1896    /// If present, this commit ID must match the latest commit on the branch for the commit to succeed.
1897    #[prost(string, optional, tag = "3")]
1898    pub latest_commit_on_branch: ::core::option::Option<::prost::alloc::string::String>,
1899    #[prost(string, tag = "4")]
1900    pub message: ::prost::alloc::string::String,
1901    #[prost(message, optional, tag = "5")]
1902    pub state: ::core::option::Option<ProcedureState>,
1903}
1904#[derive(Clone, PartialEq, ::prost::Message)]
1905pub struct CommitResponse {
1906    #[prost(message, optional, tag = "1")]
1907    pub procedure: ::core::option::Option<Procedure>,
1908}
1909#[derive(Clone, PartialEq, ::prost::Message)]
1910pub struct ProcedureSearchQuery {
1911    #[prost(oneof = "procedure_search_query::Query", tags = "1, 2, 3, 4, 5, 6, 7, 8")]
1912    pub query: ::core::option::Option<procedure_search_query::Query>,
1913}
1914/// Nested message and enum types in `ProcedureSearchQuery`.
1915pub mod procedure_search_query {
1916    #[derive(Clone, PartialEq, ::prost::Message)]
1917    pub struct ProcedureSearchAndQuery {
1918        #[prost(message, repeated, tag = "1")]
1919        pub queries: ::prost::alloc::vec::Vec<super::ProcedureSearchQuery>,
1920    }
1921    #[derive(Clone, PartialEq, ::prost::Message)]
1922    pub struct ProcedureSearchOrQuery {
1923        #[prost(message, repeated, tag = "1")]
1924        pub queries: ::prost::alloc::vec::Vec<super::ProcedureSearchQuery>,
1925    }
1926    #[derive(Clone, PartialEq, ::prost::Oneof)]
1927    pub enum Query {
1928        #[prost(string, tag = "1")]
1929        SearchText(::prost::alloc::string::String),
1930        #[prost(string, tag = "2")]
1931        Label(::prost::alloc::string::String),
1932        #[prost(message, tag = "3")]
1933        Property(super::super::super::types::Property),
1934        #[prost(message, tag = "4")]
1935        And(ProcedureSearchAndQuery),
1936        #[prost(message, tag = "5")]
1937        Or(ProcedureSearchOrQuery),
1938        #[prost(string, tag = "6")]
1939        Workspace(::prost::alloc::string::String),
1940        #[prost(string, tag = "7")]
1941        CreatedBy(::prost::alloc::string::String),
1942        #[prost(bool, tag = "8")]
1943        IsArchived(bool),
1944    }
1945}
1946#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1947pub struct SearchProceduresSortOptions {
1948    /// Defaults to true (descending)
1949    #[prost(bool, optional, tag = "1")]
1950    pub is_descending: ::core::option::Option<bool>,
1951    /// Defaults to CREATED_AT
1952    #[prost(enumeration = "SearchProceduresSortField", optional, tag = "2")]
1953    pub sort_field: ::core::option::Option<i32>,
1954}
1955#[derive(Clone, PartialEq, ::prost::Message)]
1956pub struct SearchProceduresRequest {
1957    #[prost(message, optional, tag = "1")]
1958    pub query: ::core::option::Option<ProcedureSearchQuery>,
1959    /// If not set, default is to sort by created_at descending
1960    #[prost(message, optional, tag = "2")]
1961    pub sort_options: ::core::option::Option<SearchProceduresSortOptions>,
1962    /// Page sizes greater than 1_000 will be rejected. Default pageSize is 100.
1963    #[prost(int32, optional, tag = "3")]
1964    pub page_size: ::core::option::Option<i32>,
1965    #[prost(string, optional, tag = "4")]
1966    pub next_page_token: ::core::option::Option<::prost::alloc::string::String>,
1967}
1968#[derive(Clone, PartialEq, ::prost::Message)]
1969pub struct SearchProceduresResponse {
1970    #[prost(message, repeated, tag = "1")]
1971    pub procedure_metadata: ::prost::alloc::vec::Vec<ProcedureMetadata>,
1972    #[prost(string, optional, tag = "2")]
1973    pub next_page_token: ::core::option::Option<::prost::alloc::string::String>,
1974}
1975#[derive(Clone, PartialEq, ::prost::Message)]
1976pub struct ArchiveProceduresRequest {
1977    #[prost(string, repeated, tag = "1")]
1978    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1979}
1980#[derive(Clone, PartialEq, ::prost::Message)]
1981pub struct ArchiveProceduresResponse {
1982    #[prost(string, repeated, tag = "1")]
1983    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1984}
1985#[derive(Clone, PartialEq, ::prost::Message)]
1986pub struct UnarchiveProceduresRequest {
1987    #[prost(string, repeated, tag = "1")]
1988    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1989}
1990#[derive(Clone, PartialEq, ::prost::Message)]
1991pub struct UnarchiveProceduresResponse {
1992    #[prost(string, repeated, tag = "1")]
1993    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1994}
1995#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1996#[repr(i32)]
1997pub enum SearchProceduresSortField {
1998    Unspecified = 0,
1999    Name = 1,
2000    CreatedAt = 2,
2001    UpdatedAt = 3,
2002}
2003impl SearchProceduresSortField {
2004    /// String value of the enum field names used in the ProtoBuf definition.
2005    ///
2006    /// The values are not transformed in any way and thus are considered stable
2007    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2008    pub fn as_str_name(&self) -> &'static str {
2009        match self {
2010            Self::Unspecified => "SEARCH_PROCEDURES_SORT_FIELD_UNSPECIFIED",
2011            Self::Name => "SEARCH_PROCEDURES_SORT_FIELD_NAME",
2012            Self::CreatedAt => "SEARCH_PROCEDURES_SORT_FIELD_CREATED_AT",
2013            Self::UpdatedAt => "SEARCH_PROCEDURES_SORT_FIELD_UPDATED_AT",
2014        }
2015    }
2016    /// Creates an enum from field names used in the ProtoBuf definition.
2017    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2018        match value {
2019            "SEARCH_PROCEDURES_SORT_FIELD_UNSPECIFIED" => Some(Self::Unspecified),
2020            "SEARCH_PROCEDURES_SORT_FIELD_NAME" => Some(Self::Name),
2021            "SEARCH_PROCEDURES_SORT_FIELD_CREATED_AT" => Some(Self::CreatedAt),
2022            "SEARCH_PROCEDURES_SORT_FIELD_UPDATED_AT" => Some(Self::UpdatedAt),
2023            _ => None,
2024        }
2025    }
2026}
2027#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2028#[repr(i32)]
2029pub enum ProceduresServiceError {
2030    Unspecified = 0,
2031    NotFound = 1,
2032    CommitNotFound = 2,
2033    CannotMergeMain = 3,
2034    CannotCommitToArchivedProcedure = 4,
2035    InvalidGraph = 5,
2036    InvalidSearchToken = 6,
2037}
2038impl ProceduresServiceError {
2039    /// String value of the enum field names used in the ProtoBuf definition.
2040    ///
2041    /// The values are not transformed in any way and thus are considered stable
2042    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2043    pub fn as_str_name(&self) -> &'static str {
2044        match self {
2045            Self::Unspecified => "PROCEDURES_SERVICE_ERROR_UNSPECIFIED",
2046            Self::NotFound => "PROCEDURES_SERVICE_ERROR_NOT_FOUND",
2047            Self::CommitNotFound => "PROCEDURES_SERVICE_ERROR_COMMIT_NOT_FOUND",
2048            Self::CannotMergeMain => "PROCEDURES_SERVICE_ERROR_CANNOT_MERGE_MAIN",
2049            Self::CannotCommitToArchivedProcedure => {
2050                "PROCEDURES_SERVICE_ERROR_CANNOT_COMMIT_TO_ARCHIVED_PROCEDURE"
2051            }
2052            Self::InvalidGraph => "PROCEDURES_SERVICE_ERROR_INVALID_GRAPH",
2053            Self::InvalidSearchToken => "PROCEDURES_SERVICE_ERROR_INVALID_SEARCH_TOKEN",
2054        }
2055    }
2056    /// Creates an enum from field names used in the ProtoBuf definition.
2057    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2058        match value {
2059            "PROCEDURES_SERVICE_ERROR_UNSPECIFIED" => Some(Self::Unspecified),
2060            "PROCEDURES_SERVICE_ERROR_NOT_FOUND" => Some(Self::NotFound),
2061            "PROCEDURES_SERVICE_ERROR_COMMIT_NOT_FOUND" => Some(Self::CommitNotFound),
2062            "PROCEDURES_SERVICE_ERROR_CANNOT_MERGE_MAIN" => Some(Self::CannotMergeMain),
2063            "PROCEDURES_SERVICE_ERROR_CANNOT_COMMIT_TO_ARCHIVED_PROCEDURE" => {
2064                Some(Self::CannotCommitToArchivedProcedure)
2065            }
2066            "PROCEDURES_SERVICE_ERROR_INVALID_GRAPH" => Some(Self::InvalidGraph),
2067            "PROCEDURES_SERVICE_ERROR_INVALID_SEARCH_TOKEN" => {
2068                Some(Self::InvalidSearchToken)
2069            }
2070            _ => None,
2071        }
2072    }
2073}
2074/// Generated client implementations.
2075pub mod procedures_service_client {
2076    #![allow(
2077        unused_variables,
2078        dead_code,
2079        missing_docs,
2080        clippy::wildcard_imports,
2081        clippy::let_unit_value,
2082    )]
2083    use tonic::codegen::*;
2084    use tonic::codegen::http::Uri;
2085    /// Service for creating and managing procedure templates, which are versioned collections
2086    /// of steps to be performed, typically in a specific order.
2087    #[derive(Debug, Clone)]
2088    pub struct ProceduresServiceClient<T> {
2089        inner: tonic::client::Grpc<T>,
2090    }
2091    impl ProceduresServiceClient<tonic::transport::Channel> {
2092        /// Attempt to create a new client by connecting to a given endpoint.
2093        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
2094        where
2095            D: TryInto<tonic::transport::Endpoint>,
2096            D::Error: Into<StdError>,
2097        {
2098            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
2099            Ok(Self::new(conn))
2100        }
2101    }
2102    impl<T> ProceduresServiceClient<T>
2103    where
2104        T: tonic::client::GrpcService<tonic::body::Body>,
2105        T::Error: Into<StdError>,
2106        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
2107        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
2108    {
2109        pub fn new(inner: T) -> Self {
2110            let inner = tonic::client::Grpc::new(inner);
2111            Self { inner }
2112        }
2113        pub fn with_origin(inner: T, origin: Uri) -> Self {
2114            let inner = tonic::client::Grpc::with_origin(inner, origin);
2115            Self { inner }
2116        }
2117        pub fn with_interceptor<F>(
2118            inner: T,
2119            interceptor: F,
2120        ) -> ProceduresServiceClient<InterceptedService<T, F>>
2121        where
2122            F: tonic::service::Interceptor,
2123            T::ResponseBody: Default,
2124            T: tonic::codegen::Service<
2125                http::Request<tonic::body::Body>,
2126                Response = http::Response<
2127                    <T as tonic::client::GrpcService<tonic::body::Body>>::ResponseBody,
2128                >,
2129            >,
2130            <T as tonic::codegen::Service<
2131                http::Request<tonic::body::Body>,
2132            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
2133        {
2134            ProceduresServiceClient::new(InterceptedService::new(inner, interceptor))
2135        }
2136        /// Compress requests with the given encoding.
2137        ///
2138        /// This requires the server to support it otherwise it might respond with an
2139        /// error.
2140        #[must_use]
2141        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
2142            self.inner = self.inner.send_compressed(encoding);
2143            self
2144        }
2145        /// Enable decompressing responses.
2146        #[must_use]
2147        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
2148            self.inner = self.inner.accept_compressed(encoding);
2149            self
2150        }
2151        /// Limits the maximum size of a decoded message.
2152        ///
2153        /// Default: `4MB`
2154        #[must_use]
2155        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
2156            self.inner = self.inner.max_decoding_message_size(limit);
2157            self
2158        }
2159        /// Limits the maximum size of an encoded message.
2160        ///
2161        /// Default: `usize::MAX`
2162        #[must_use]
2163        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
2164            self.inner = self.inner.max_encoding_message_size(limit);
2165            self
2166        }
2167        /// Create a new procedure
2168        pub async fn create_procedure(
2169            &mut self,
2170            request: impl tonic::IntoRequest<super::CreateProcedureRequest>,
2171        ) -> std::result::Result<
2172            tonic::Response<super::CreateProcedureResponse>,
2173            tonic::Status,
2174        > {
2175            self.inner
2176                .ready()
2177                .await
2178                .map_err(|e| {
2179                    tonic::Status::unknown(
2180                        format!("Service was not ready: {}", e.into()),
2181                    )
2182                })?;
2183            let codec = tonic::codec::ProstCodec::default();
2184            let path = http::uri::PathAndQuery::from_static(
2185                "/nominal.procedures.v1.ProceduresService/CreateProcedure",
2186            );
2187            let mut req = request.into_request();
2188            req.extensions_mut()
2189                .insert(
2190                    GrpcMethod::new(
2191                        "nominal.procedures.v1.ProceduresService",
2192                        "CreateProcedure",
2193                    ),
2194                );
2195            self.inner.unary(req, path, codec).await
2196        }
2197        /// Get a procedure by its RID
2198        pub async fn get_procedure(
2199            &mut self,
2200            request: impl tonic::IntoRequest<super::GetProcedureRequest>,
2201        ) -> std::result::Result<
2202            tonic::Response<super::GetProcedureResponse>,
2203            tonic::Status,
2204        > {
2205            self.inner
2206                .ready()
2207                .await
2208                .map_err(|e| {
2209                    tonic::Status::unknown(
2210                        format!("Service was not ready: {}", e.into()),
2211                    )
2212                })?;
2213            let codec = tonic::codec::ProstCodec::default();
2214            let path = http::uri::PathAndQuery::from_static(
2215                "/nominal.procedures.v1.ProceduresService/GetProcedure",
2216            );
2217            let mut req = request.into_request();
2218            req.extensions_mut()
2219                .insert(
2220                    GrpcMethod::new(
2221                        "nominal.procedures.v1.ProceduresService",
2222                        "GetProcedure",
2223                    ),
2224                );
2225            self.inner.unary(req, path, codec).await
2226        }
2227        /// Get metadata for multiple procedure by RIDs.
2228        /// Unauthorized RIDs will be omitted from the response.
2229        /// Order is not guaranteed to match the request.
2230        pub async fn batch_get_procedure_metadata(
2231            &mut self,
2232            request: impl tonic::IntoRequest<super::BatchGetProcedureMetadataRequest>,
2233        ) -> std::result::Result<
2234            tonic::Response<super::BatchGetProcedureMetadataResponse>,
2235            tonic::Status,
2236        > {
2237            self.inner
2238                .ready()
2239                .await
2240                .map_err(|e| {
2241                    tonic::Status::unknown(
2242                        format!("Service was not ready: {}", e.into()),
2243                    )
2244                })?;
2245            let codec = tonic::codec::ProstCodec::default();
2246            let path = http::uri::PathAndQuery::from_static(
2247                "/nominal.procedures.v1.ProceduresService/BatchGetProcedureMetadata",
2248            );
2249            let mut req = request.into_request();
2250            req.extensions_mut()
2251                .insert(
2252                    GrpcMethod::new(
2253                        "nominal.procedures.v1.ProceduresService",
2254                        "BatchGetProcedureMetadata",
2255                    ),
2256                );
2257            self.inner.unary(req, path, codec).await
2258        }
2259        /// Update the metadata of a procedure
2260        pub async fn update_procedure_metadata(
2261            &mut self,
2262            request: impl tonic::IntoRequest<super::UpdateProcedureMetadataRequest>,
2263        ) -> std::result::Result<
2264            tonic::Response<super::UpdateProcedureMetadataResponse>,
2265            tonic::Status,
2266        > {
2267            self.inner
2268                .ready()
2269                .await
2270                .map_err(|e| {
2271                    tonic::Status::unknown(
2272                        format!("Service was not ready: {}", e.into()),
2273                    )
2274                })?;
2275            let codec = tonic::codec::ProstCodec::default();
2276            let path = http::uri::PathAndQuery::from_static(
2277                "/nominal.procedures.v1.ProceduresService/UpdateProcedureMetadata",
2278            );
2279            let mut req = request.into_request();
2280            req.extensions_mut()
2281                .insert(
2282                    GrpcMethod::new(
2283                        "nominal.procedures.v1.ProceduresService",
2284                        "UpdateProcedureMetadata",
2285                    ),
2286                );
2287            self.inner.unary(req, path, codec).await
2288        }
2289        /// Parse a procedure from a nested procedure structure
2290        pub async fn parse_nested_procedure(
2291            &mut self,
2292            request: impl tonic::IntoRequest<super::ParseNestedProcedureRequest>,
2293        ) -> std::result::Result<
2294            tonic::Response<super::ParseNestedProcedureResponse>,
2295            tonic::Status,
2296        > {
2297            self.inner
2298                .ready()
2299                .await
2300                .map_err(|e| {
2301                    tonic::Status::unknown(
2302                        format!("Service was not ready: {}", e.into()),
2303                    )
2304                })?;
2305            let codec = tonic::codec::ProstCodec::default();
2306            let path = http::uri::PathAndQuery::from_static(
2307                "/nominal.procedures.v1.ProceduresService/ParseNestedProcedure",
2308            );
2309            let mut req = request.into_request();
2310            req.extensions_mut()
2311                .insert(
2312                    GrpcMethod::new(
2313                        "nominal.procedures.v1.ProceduresService",
2314                        "ParseNestedProcedure",
2315                    ),
2316                );
2317            self.inner.unary(req, path, codec).await
2318        }
2319        /// Get procedure as nested procedure
2320        /// TODO(pchen): in the future, not all graphs will be representable as nested procedures
2321        pub async fn get_procedure_as_nested(
2322            &mut self,
2323            request: impl tonic::IntoRequest<super::GetProcedureAsNestedRequest>,
2324        ) -> std::result::Result<
2325            tonic::Response<super::GetProcedureAsNestedResponse>,
2326            tonic::Status,
2327        > {
2328            self.inner
2329                .ready()
2330                .await
2331                .map_err(|e| {
2332                    tonic::Status::unknown(
2333                        format!("Service was not ready: {}", e.into()),
2334                    )
2335                })?;
2336            let codec = tonic::codec::ProstCodec::default();
2337            let path = http::uri::PathAndQuery::from_static(
2338                "/nominal.procedures.v1.ProceduresService/GetProcedureAsNested",
2339            );
2340            let mut req = request.into_request();
2341            req.extensions_mut()
2342                .insert(
2343                    GrpcMethod::new(
2344                        "nominal.procedures.v1.ProceduresService",
2345                        "GetProcedureAsNested",
2346                    ),
2347                );
2348            self.inner.unary(req, path, codec).await
2349        }
2350        /// Merge a branch of a procedure to main
2351        pub async fn merge_to_main(
2352            &mut self,
2353            request: impl tonic::IntoRequest<super::MergeToMainRequest>,
2354        ) -> std::result::Result<
2355            tonic::Response<super::MergeToMainResponse>,
2356            tonic::Status,
2357        > {
2358            self.inner
2359                .ready()
2360                .await
2361                .map_err(|e| {
2362                    tonic::Status::unknown(
2363                        format!("Service was not ready: {}", e.into()),
2364                    )
2365                })?;
2366            let codec = tonic::codec::ProstCodec::default();
2367            let path = http::uri::PathAndQuery::from_static(
2368                "/nominal.procedures.v1.ProceduresService/MergeToMain",
2369            );
2370            let mut req = request.into_request();
2371            req.extensions_mut()
2372                .insert(
2373                    GrpcMethod::new(
2374                        "nominal.procedures.v1.ProceduresService",
2375                        "MergeToMain",
2376                    ),
2377                );
2378            self.inner.unary(req, path, codec).await
2379        }
2380        /// Save the working state of a procedure
2381        pub async fn save_working_state(
2382            &mut self,
2383            request: impl tonic::IntoRequest<super::SaveWorkingStateRequest>,
2384        ) -> std::result::Result<
2385            tonic::Response<super::SaveWorkingStateResponse>,
2386            tonic::Status,
2387        > {
2388            self.inner
2389                .ready()
2390                .await
2391                .map_err(|e| {
2392                    tonic::Status::unknown(
2393                        format!("Service was not ready: {}", e.into()),
2394                    )
2395                })?;
2396            let codec = tonic::codec::ProstCodec::default();
2397            let path = http::uri::PathAndQuery::from_static(
2398                "/nominal.procedures.v1.ProceduresService/SaveWorkingState",
2399            );
2400            let mut req = request.into_request();
2401            req.extensions_mut()
2402                .insert(
2403                    GrpcMethod::new(
2404                        "nominal.procedures.v1.ProceduresService",
2405                        "SaveWorkingState",
2406                    ),
2407                );
2408            self.inner.unary(req, path, codec).await
2409        }
2410        /// Commit a procedure to a branch
2411        pub async fn commit(
2412            &mut self,
2413            request: impl tonic::IntoRequest<super::CommitRequest>,
2414        ) -> std::result::Result<tonic::Response<super::CommitResponse>, tonic::Status> {
2415            self.inner
2416                .ready()
2417                .await
2418                .map_err(|e| {
2419                    tonic::Status::unknown(
2420                        format!("Service was not ready: {}", e.into()),
2421                    )
2422                })?;
2423            let codec = tonic::codec::ProstCodec::default();
2424            let path = http::uri::PathAndQuery::from_static(
2425                "/nominal.procedures.v1.ProceduresService/Commit",
2426            );
2427            let mut req = request.into_request();
2428            req.extensions_mut()
2429                .insert(
2430                    GrpcMethod::new("nominal.procedures.v1.ProceduresService", "Commit"),
2431                );
2432            self.inner.unary(req, path, codec).await
2433        }
2434        /// Searches all procedures, returning paged results
2435        pub async fn search_procedures(
2436            &mut self,
2437            request: impl tonic::IntoRequest<super::SearchProceduresRequest>,
2438        ) -> std::result::Result<
2439            tonic::Response<super::SearchProceduresResponse>,
2440            tonic::Status,
2441        > {
2442            self.inner
2443                .ready()
2444                .await
2445                .map_err(|e| {
2446                    tonic::Status::unknown(
2447                        format!("Service was not ready: {}", e.into()),
2448                    )
2449                })?;
2450            let codec = tonic::codec::ProstCodec::default();
2451            let path = http::uri::PathAndQuery::from_static(
2452                "/nominal.procedures.v1.ProceduresService/SearchProcedures",
2453            );
2454            let mut req = request.into_request();
2455            req.extensions_mut()
2456                .insert(
2457                    GrpcMethod::new(
2458                        "nominal.procedures.v1.ProceduresService",
2459                        "SearchProcedures",
2460                    ),
2461                );
2462            self.inner.unary(req, path, codec).await
2463        }
2464        /// Archive procedures
2465        pub async fn archive_procedures(
2466            &mut self,
2467            request: impl tonic::IntoRequest<super::ArchiveProceduresRequest>,
2468        ) -> std::result::Result<
2469            tonic::Response<super::ArchiveProceduresResponse>,
2470            tonic::Status,
2471        > {
2472            self.inner
2473                .ready()
2474                .await
2475                .map_err(|e| {
2476                    tonic::Status::unknown(
2477                        format!("Service was not ready: {}", e.into()),
2478                    )
2479                })?;
2480            let codec = tonic::codec::ProstCodec::default();
2481            let path = http::uri::PathAndQuery::from_static(
2482                "/nominal.procedures.v1.ProceduresService/ArchiveProcedures",
2483            );
2484            let mut req = request.into_request();
2485            req.extensions_mut()
2486                .insert(
2487                    GrpcMethod::new(
2488                        "nominal.procedures.v1.ProceduresService",
2489                        "ArchiveProcedures",
2490                    ),
2491                );
2492            self.inner.unary(req, path, codec).await
2493        }
2494        /// Unarchive procedures
2495        pub async fn unarchive_procedures(
2496            &mut self,
2497            request: impl tonic::IntoRequest<super::UnarchiveProceduresRequest>,
2498        ) -> std::result::Result<
2499            tonic::Response<super::UnarchiveProceduresResponse>,
2500            tonic::Status,
2501        > {
2502            self.inner
2503                .ready()
2504                .await
2505                .map_err(|e| {
2506                    tonic::Status::unknown(
2507                        format!("Service was not ready: {}", e.into()),
2508                    )
2509                })?;
2510            let codec = tonic::codec::ProstCodec::default();
2511            let path = http::uri::PathAndQuery::from_static(
2512                "/nominal.procedures.v1.ProceduresService/UnarchiveProcedures",
2513            );
2514            let mut req = request.into_request();
2515            req.extensions_mut()
2516                .insert(
2517                    GrpcMethod::new(
2518                        "nominal.procedures.v1.ProceduresService",
2519                        "UnarchiveProcedures",
2520                    ),
2521                );
2522            self.inner.unary(req, path, codec).await
2523        }
2524    }
2525}