Skip to main content

nominal_api/proto/
nominal.procedures.v1.rs

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