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")]
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        }
210    }
211}
212/// AutoStartConfig is a configuration that determines whether a step should be
213/// automatically moved from NOT_STARTED to IN_PROGRESS when some set of criteria are met.
214/// By default this will be `all_parents`
215#[derive(Clone, Copy, PartialEq, ::prost::Message)]
216pub struct AutoStartConfig {
217    #[prost(oneof = "auto_start_config::Config", tags = "1, 2")]
218    pub config: ::core::option::Option<auto_start_config::Config>,
219}
220/// Nested message and enum types in `AutoStartConfig`.
221pub mod auto_start_config {
222    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
223    pub struct AllParents {}
224    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
225    pub struct Disabled {}
226    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
227    pub enum Config {
228        /// The step will start automatically when all parent steps have passed.
229        #[prost(message, tag = "1")]
230        AllParents(AllParents),
231        /// The step will not start automatically.
232        #[prost(message, tag = "2")]
233        Disabled(Disabled),
234    }
235}
236/// AutoProceedConfig is a configuration that determines whether a step should
237/// automatically proceed (submit the contents and check success_conditions)
238/// when some set of criteria are met. By default this will be `disabled`.
239#[derive(Clone, Copy, PartialEq, ::prost::Message)]
240pub struct AutoProceedConfig {
241    #[prost(oneof = "auto_proceed_config::Config", tags = "1, 2")]
242    pub config: ::core::option::Option<auto_proceed_config::Config>,
243}
244/// Nested message and enum types in `AutoProceedConfig`.
245pub mod auto_proceed_config {
246    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
247    pub struct Disabled {}
248    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
249    pub struct Enabled {}
250    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
251    pub enum Config {
252        /// The step will not be automatically completed
253        #[prost(message, tag = "1")]
254        Disabled(Disabled),
255        /// The step will automatically submit the step contents once the requirements are met and
256        /// begin the transition to either PASSED or ERRORED.
257        #[prost(message, tag = "2")]
258        Enabled(Enabled),
259    }
260}
261/// The condition that must be met for a step to succeed after submitting its contents.
262#[derive(Clone, PartialEq, ::prost::Message)]
263pub struct SuccessCondition {
264    #[prost(oneof = "success_condition::Condition", tags = "1, 2, 3")]
265    pub condition: ::core::option::Option<success_condition::Condition>,
266}
267/// Nested message and enum types in `SuccessCondition`.
268pub mod success_condition {
269    #[derive(Clone, PartialEq, ::prost::Oneof)]
270    pub enum Condition {
271        #[prost(message, tag = "1")]
272        And(super::AndSuccessCondition),
273        #[prost(message, tag = "2")]
274        Timer(super::TimerSuccessCondition),
275        /// ChannelValidationSuccessCondition = 4;
276        /// OrSuccessCondition or = 5;
277        #[prost(message, tag = "3")]
278        IngestJob(super::IngestJobSuccessCondition),
279    }
280}
281/// All conditions within must be met for the step to be succeeded.
282#[derive(Clone, PartialEq, ::prost::Message)]
283pub struct AndSuccessCondition {
284    #[prost(message, repeated, tag = "1")]
285    pub conditions: ::prost::alloc::vec::Vec<SuccessCondition>,
286}
287/// A timer condition that will succeed the step after a specified duration.
288#[derive(Clone, Copy, PartialEq, ::prost::Message)]
289pub struct TimerSuccessCondition {
290    /// Duration in seconds to wait before succeeding the step. This value must be non-negative.
291    /// This duration is a minimum bound; the actual duration may be longer.
292    #[prost(int32, tag = "1")]
293    pub duration_seconds: i32,
294}
295/// The step will succeed when the associated ingest job succeeds.
296/// If the ingest job fails, the step will move to ERRORED.
297#[derive(Clone, PartialEq, ::prost::Message)]
298pub struct IngestJobSuccessCondition {
299    /// The field ID that contains the IngestJobRid of the ingest job to monitor.
300    #[prost(string, tag = "1")]
301    pub field_id: ::prost::alloc::string::String,
302}
303/// An action that will be taken when a step transitions to a completed state
304/// (succeeded, errored, or skipped). These actions are executed after the step
305/// contents are submitted and the PassCondition (if any) is satisfied. These
306/// actions are executed synchronously with the state transition and generally
307/// should be quick to complete.
308/// Almost all actions will be executed only if the step transitions to SUCCEEDED.
309/// The exception is CreateEvent, which will be executed for all terminal states.
310#[derive(Clone, PartialEq, ::prost::Message)]
311pub struct CompletionActionConfig {
312    #[prost(oneof = "completion_action_config::Config", tags = "1, 2, 3, 4, 5")]
313    pub config: ::core::option::Option<completion_action_config::Config>,
314}
315/// Nested message and enum types in `CompletionActionConfig`.
316pub mod completion_action_config {
317    #[derive(Clone, PartialEq, ::prost::Oneof)]
318    pub enum Config {
319        #[prost(message, tag = "1")]
320        CreateEvent(super::CreateEventConfig),
321        #[prost(message, tag = "2")]
322        SendNotification(super::SendNotificationConfig),
323        #[prost(message, tag = "3")]
324        CreateRun(super::CreateRunConfig),
325        #[prost(message, tag = "4")]
326        ApplyWorkbookTemplates(super::ApplyWorkbookTemplatesConfig),
327        /// ...
328        #[prost(message, tag = "5")]
329        ApplyChecklists(super::ApplyChecklistsConfig),
330    }
331}
332/// An action to create an event when a step is completed.
333/// The completion state of the step is mapped to the event's EventType as follows:
334/// - SUCCEEDED -> SUCCESS
335/// - ERRORED -> ERROR
336/// - SKIPPED -> INFO
337#[derive(Clone, PartialEq, ::prost::Message)]
338pub struct CreateEventConfig {
339    #[prost(string, tag = "1")]
340    pub name: ::prost::alloc::string::String,
341    #[prost(string, optional, tag = "2")]
342    pub description: ::core::option::Option<::prost::alloc::string::String>,
343    #[prost(string, repeated, tag = "3")]
344    pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
345    /// Deprecated in favor of property_refs
346    /// Properties will be overridden by any property_refs with the same key.
347    #[prost(map = "string, string", tag = "4")]
348    pub properties: ::std::collections::HashMap<
349        ::prost::alloc::string::String,
350        ::prost::alloc::string::String,
351    >,
352    /// Each asset_field_id will be resolved and added as an AssetRid to the created event
353    /// deprecated in favor of asset_references
354    #[prost(string, repeated, tag = "5")]
355    pub asset_field_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
356    /// The assets to associate the event with. There must be at least one.
357    /// asset_references takes precedence over (deprecated) asset_field_ids if both are set.
358    ///
359    /// TODO(niwong): re-add after client updates \[(buf.validate.field).repeated.min_items = 1\];
360    #[prost(message, repeated, tag = "6")]
361    pub asset_references: ::prost::alloc::vec::Vec<AssetReference>,
362    /// Properties to apply to the event
363    #[prost(message, repeated, tag = "7")]
364    pub property_refs: ::prost::alloc::vec::Vec<PropertyReference>,
365}
366/// An action to send a notification to one or more integrations when a step is completed.
367#[derive(Clone, PartialEq, ::prost::Message)]
368pub struct SendNotificationConfig {
369    /// The integration(s) to use to send the notification.
370    #[prost(message, optional, tag = "1")]
371    pub integrations: ::core::option::Option<MultiIntegrationReference>,
372    /// The optional title of the notification (length constrained to 130 chars by the IntegrationService).
373    #[prost(message, optional, tag = "2")]
374    pub title: ::core::option::Option<StringReference>,
375    /// The message body of the notification.
376    ///
377    /// We are omitting some optional parameters to the IntegrationService#sendMessage endpoint,
378    /// such as tags, priority, and opsGenieAlias. For all current integration types as of 2025-09-15
379    /// (besides OpsGenie), only title and message are used.
380    #[prost(message, optional, tag = "3")]
381    pub message: ::core::option::Option<StringReference>,
382}
383/// An action to create a run when a step is completed.
384#[derive(Clone, PartialEq, ::prost::Message)]
385pub struct CreateRunConfig {
386    /// If present, the run RID for this step will be available in outputs under this field ID.
387    #[prost(string, optional, tag = "1")]
388    pub run_output_field_id: ::core::option::Option<::prost::alloc::string::String>,
389    /// The assets to associate the run with. There must be at least one.
390    #[prost(message, optional, tag = "2")]
391    pub assets: ::core::option::Option<MultiAssetReference>,
392    /// The name of the run.
393    #[prost(message, optional, tag = "3")]
394    pub name: ::core::option::Option<StringReference>,
395    /// Optionally, a description for the run.
396    #[prost(message, optional, tag = "4")]
397    pub description: ::core::option::Option<StringReference>,
398    /// The time range for the run. If unset, the run will be created with a zero-width time range at now().
399    #[prost(message, optional, tag = "5")]
400    pub time_range: ::core::option::Option<TimeRangeReference>,
401    /// Labels to apply on the run.
402    #[prost(message, optional, tag = "6")]
403    pub labels: ::core::option::Option<MultiStringReference>,
404    /// Properties to apply on the run.
405    ///
406    /// repeated UrlReference links;
407    /// repeated AttachmentRidReference attachments; // requires some sort of AttachmentRidField where FE handles upload
408    #[prost(message, repeated, tag = "7")]
409    pub properties: ::prost::alloc::vec::Vec<create_run_config::Property>,
410}
411/// Nested message and enum types in `CreateRunConfig`.
412pub mod create_run_config {
413    #[derive(Clone, PartialEq, ::prost::Message)]
414    pub struct Property {
415        #[prost(message, optional, tag = "1")]
416        pub key: ::core::option::Option<super::StringReference>,
417        #[prost(message, optional, tag = "2")]
418        pub value: ::core::option::Option<super::StringReference>,
419    }
420}
421#[derive(Clone, PartialEq, ::prost::Message)]
422pub struct PropertyReference {
423    #[prost(message, optional, tag = "1")]
424    pub key: ::core::option::Option<StringReference>,
425    #[prost(message, optional, tag = "2")]
426    pub value: ::core::option::Option<StringReference>,
427}
428/// An action to apply one or more workbook templates to one or more runs when a step is completed.
429#[derive(Clone, PartialEq, ::prost::Message)]
430pub struct ApplyWorkbookTemplatesConfig {
431    /// The workbook templates to apply.
432    #[prost(message, optional, tag = "1")]
433    pub workbook_templates: ::core::option::Option<MultiWorkbookTemplateReference>,
434    /// The runs to apply the workbook templates to. There must be at least one.
435    #[prost(message, optional, tag = "2")]
436    pub runs: ::core::option::Option<MultiRunReference>,
437}
438/// An action to apply one or more checklists to one or more runs when a step is completed.
439#[derive(Clone, PartialEq, ::prost::Message)]
440pub struct ApplyChecklistsConfig {
441    /// The checklists to apply.
442    #[prost(message, optional, tag = "1")]
443    pub checklists: ::core::option::Option<MultiChecklistReference>,
444    /// The runs to apply the checklists to. There must be at least one.
445    #[prost(message, optional, tag = "2")]
446    pub runs: ::core::option::Option<MultiRunReference>,
447}
448/// The content of a procedure step. This typically involves some form of user interaction/input.
449#[derive(Clone, PartialEq, ::prost::Message)]
450pub struct ProcedureStepContent {
451    /// This should be kept in sync with NestedProcedureNode.NestedStepNode.content
452    #[prost(oneof = "procedure_step_content::Content", tags = "1, 2, 3")]
453    pub content: ::core::option::Option<procedure_step_content::Content>,
454}
455/// Nested message and enum types in `ProcedureStepContent`.
456pub mod procedure_step_content {
457    /// This should be kept in sync with NestedProcedureNode.NestedStepNode.content
458    #[derive(Clone, PartialEq, ::prost::Oneof)]
459    pub enum Content {
460        #[prost(message, tag = "1")]
461        Form(super::FormStep),
462        #[prost(message, tag = "2")]
463        StartIngest(super::StartIngestStep),
464        /// ...
465        #[prost(message, tag = "3")]
466        SelectOrCreateAsset(super::SelectOrCreateAssetStep),
467    }
468}
469/// A form step consists of a set of fields to be filled out by the user.
470#[derive(Clone, PartialEq, ::prost::Message)]
471pub struct FormStep {
472    #[prost(message, repeated, tag = "1")]
473    pub fields: ::prost::alloc::vec::Vec<FormField>,
474}
475/// The user will be prompted to start an ingest job in the frontend
476/// and the output of the step will be the rid of the created ingest job.
477#[derive(Clone, PartialEq, ::prost::Message)]
478pub struct StartIngestStep {
479    /// The asset to ingest data into.
480    #[prost(message, optional, tag = "1")]
481    pub asset: ::core::option::Option<AssetReference>,
482    /// The data scope within the asset to ingest data into.
483    #[prost(message, optional, tag = "2")]
484    pub ref_name: ::core::option::Option<StringReference>,
485    /// Restrict and pre-configure the type of ingest that can be started.
486    #[prost(message, optional, tag = "3")]
487    pub ingest_type_config: ::core::option::Option<start_ingest_step::IngestTypeConfig>,
488    /// If present, the ingest job RID for this step will be available in outputs under this field ID.
489    #[prost(string, optional, tag = "4")]
490    pub ingest_job_output_field_id: ::core::option::Option<
491        ::prost::alloc::string::String,
492    >,
493}
494/// Nested message and enum types in `StartIngestStep`.
495pub mod start_ingest_step {
496    #[derive(Clone, PartialEq, ::prost::Message)]
497    pub struct IngestTypeConfig {
498        #[prost(oneof = "ingest_type_config::Config", tags = "1")]
499        pub config: ::core::option::Option<ingest_type_config::Config>,
500    }
501    /// Nested message and enum types in `IngestTypeConfig`.
502    pub mod ingest_type_config {
503        #[derive(Clone, PartialEq, ::prost::Message)]
504        pub struct ContainerizedExtractorIngestConfig {
505            /// The ingest job must use this specific containerized extractor.
506            #[prost(string, tag = "1")]
507            pub rid: ::prost::alloc::string::String,
508            /// The step will prompt the user to upload a file for each extractor input that doesn't have a FileInputBinding.
509            #[prost(message, repeated, tag = "2")]
510            pub file_input_bindings: ::prost::alloc::vec::Vec<
511                super::super::FileInputBinding,
512            >,
513        }
514        #[derive(Clone, PartialEq, ::prost::Oneof)]
515        pub enum Config {
516            /// The ingest job must be a containerized extractor ingest.
517            #[prost(message, tag = "1")]
518            ContainerizedExtractor(ContainerizedExtractorIngestConfig),
519        }
520    }
521}
522#[derive(Clone, PartialEq, ::prost::Message)]
523pub struct FileInputBinding {
524    /// The input key. For containerized extractors, this is the environment variable name.
525    #[prost(string, tag = "1")]
526    pub environment_variable: ::prost::alloc::string::String,
527    /// The specific type of file
528    #[prost(message, optional, tag = "2")]
529    pub file_reference: ::core::option::Option<FileReference>,
530}
531#[derive(Clone, PartialEq, ::prost::Message)]
532pub struct FileReference {
533    #[prost(oneof = "file_reference::Option", tags = "1")]
534    pub option: ::core::option::Option<file_reference::Option>,
535}
536/// Nested message and enum types in `FileReference`.
537pub mod file_reference {
538    #[derive(Clone, PartialEq, ::prost::Oneof)]
539    pub enum Option {
540        /// Reference a field from a prior step
541        #[prost(string, tag = "1")]
542        FieldId(::prost::alloc::string::String),
543    }
544}
545/// The user will be prompted to select an existing asset or create a new asset.
546#[derive(Clone, PartialEq, ::prost::Message)]
547pub struct SelectOrCreateAssetStep {
548    /// If present, the AssetRid for this step will be available in outputs under this field ID.
549    #[prost(string, optional, tag = "1")]
550    pub asset_output_field_id: ::core::option::Option<::prost::alloc::string::String>,
551    /// If present, the user will be given the option to create a new asset restricted by these parameters.
552    #[prost(message, optional, tag = "2")]
553    pub create_asset_parameters: ::core::option::Option<
554        select_or_create_asset_step::CreateAssetParameters,
555    >,
556    /// The asset selection options for this step.
557    /// This can be omitted, in which case the asset can be chosen freely from all assets.
558    #[prost(oneof = "select_or_create_asset_step::Options", tags = "3")]
559    pub options: ::core::option::Option<select_or_create_asset_step::Options>,
560}
561/// Nested message and enum types in `SelectOrCreateAssetStep`.
562pub mod select_or_create_asset_step {
563    /// When creating an new asset, the title is always provided by the user and the
564    /// frontend should prompt for it. Other parameters for asset creation can be
565    /// specified here as either user-prompted or preset.
566    #[derive(Clone, PartialEq, ::prost::Message)]
567    pub struct CreateAssetParameters {
568        /// If set, the new asset will be created with this description.
569        #[prost(message, optional, tag = "2")]
570        pub description: ::core::option::Option<
571            create_asset_parameters::DescriptionParameter,
572        >,
573        /// If set, the new asset will be created with these labels.
574        #[prost(message, optional, tag = "3")]
575        pub labels: ::core::option::Option<create_asset_parameters::LabelsParameter>,
576        /// If set, the new asset will be created with these properties.
577        #[prost(message, optional, tag = "4")]
578        pub properties: ::core::option::Option<
579            create_asset_parameters::PropertiesParameter,
580        >,
581        /// Data scopes for the new asset. The keys are the ref names of the data scopes.
582        #[prost(map = "string, message", tag = "5")]
583        pub data_scopes: ::std::collections::HashMap<
584            ::prost::alloc::string::String,
585            create_asset_parameters::DataScopeParameter,
586        >,
587    }
588    /// Nested message and enum types in `CreateAssetParameters`.
589    pub mod create_asset_parameters {
590        #[derive(Clone, PartialEq, ::prost::Message)]
591        pub struct DescriptionParameter {
592            #[prost(oneof = "description_parameter::Option", tags = "1")]
593            pub option: ::core::option::Option<description_parameter::Option>,
594        }
595        /// Nested message and enum types in `DescriptionParameter`.
596        pub mod description_parameter {
597            #[derive(Clone, PartialEq, ::prost::Oneof)]
598            pub enum Option {
599                /// The description is always a constant string.
600                ///
601                /// Can allow for free-form / guardrailed (templated?) user input.
602                #[prost(string, tag = "1")]
603                Constant(::prost::alloc::string::String),
604            }
605        }
606        #[derive(Clone, PartialEq, ::prost::Message)]
607        pub struct LabelsParameter {
608            /// Labels to always apply on the new asset.
609            #[prost(string, repeated, tag = "1")]
610            pub constant: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
611            /// If allowing for user input, the frontend should leverage ResourceMetadataService#listPropertiesAndLabels
612            /// to provide the user with existing labels to choose from.
613            #[prost(message, optional, tag = "2")]
614            pub user_input: ::core::option::Option<labels_parameter::UserInputOptions>,
615        }
616        /// Nested message and enum types in `LabelsParameter`.
617        pub mod labels_parameter {
618            /// Can allow for more configuration - e.g. default set of starting labels? (which can be overrideen)
619            #[derive(Clone, Copy, PartialEq, ::prost::Message)]
620            pub struct UserInputOptions {}
621        }
622        #[derive(Clone, PartialEq, ::prost::Message)]
623        pub struct PropertiesParameter {
624            /// Properties to always apply on the new asset.
625            #[prost(map = "string, string", tag = "1")]
626            pub constant: ::std::collections::HashMap<
627                ::prost::alloc::string::String,
628                ::prost::alloc::string::String,
629            >,
630            /// If allowing for user input, he frontend should leverage ResourceMetadataService#listPropertiesAndLabels
631            /// to provide the user with existing property keys/values to choose from.
632            #[prost(message, optional, tag = "2")]
633            pub user_input: ::core::option::Option<
634                properties_parameter::UserInputOptions,
635            >,
636        }
637        /// Nested message and enum types in `PropertiesParameter`.
638        pub mod properties_parameter {
639            #[derive(Clone, PartialEq, ::prost::Message)]
640            pub struct UserInputOptions {
641                /// Each property key here must have a value provided by the user for asset creation.
642                #[prost(string, repeated, tag = "1")]
643                pub required_keys: ::prost::alloc::vec::Vec<
644                    ::prost::alloc::string::String,
645                >,
646                /// Each property key here will be suggested to the user but is not required for asset creation
647                ///
648                /// Can allow for more configuration - e.g. required k-v pairs, default k-v pairs?
649                #[prost(string, repeated, tag = "2")]
650                pub suggested_keys: ::prost::alloc::vec::Vec<
651                    ::prost::alloc::string::String,
652                >,
653            }
654        }
655        #[derive(Clone, PartialEq, ::prost::Message)]
656        pub struct DataScopeParameter {
657            #[prost(message, optional, tag = "21")]
658            pub series_tags: ::core::option::Option<super::super::TagsParameter>,
659            #[prost(oneof = "data_scope_parameter::DataSource", tags = "1, 2")]
660            pub data_source: ::core::option::Option<data_scope_parameter::DataSource>,
661        }
662        /// Nested message and enum types in `DataScopeParameter`.
663        pub mod data_scope_parameter {
664            /// The Dataset will be automatically named "{asset}-{ref_name}".
665            /// Can later allow for this to be specified.
666            /// Other CreateDataset options exist but are omitted for now
667            #[derive(Clone, Copy, PartialEq, ::prost::Message)]
668            pub struct NewDataset {}
669            #[derive(Clone, PartialEq, ::prost::Message)]
670            pub struct ExistingDataset {
671                /// The dataset options for this field.
672                /// This can be omitted, in which case the dataset can be chosen freely.
673                #[prost(oneof = "existing_dataset::Options", tags = "3")]
674                pub options: ::core::option::Option<existing_dataset::Options>,
675            }
676            /// Nested message and enum types in `ExistingDataset`.
677            pub mod existing_dataset {
678                /// The dataset options for this field.
679                /// This can be omitted, in which case the dataset can be chosen freely.
680                #[derive(Clone, PartialEq, ::prost::Oneof)]
681                pub enum Options {
682                    /// The dataset must be chosen from preset options.
683                    #[prost(message, tag = "3")]
684                    PresetOptions(super::super::super::super::PresetDatasetFieldOptions),
685                }
686            }
687            #[derive(Clone, PartialEq, ::prost::Oneof)]
688            pub enum DataSource {
689                /// Creates a new empty dataset.
690                #[prost(message, tag = "1")]
691                NewDataset(NewDataset),
692                /// Use existing dataset
693                #[prost(message, tag = "2")]
694                ExistingDataset(ExistingDataset),
695            }
696        }
697    }
698    /// The asset selection options for this step.
699    /// This can be omitted, in which case the asset can be chosen freely from all assets.
700    #[derive(Clone, PartialEq, ::prost::Oneof)]
701    pub enum Options {
702        /// The asset must be chosen from preset options.
703        ///
704        /// The asset must be chosen from a saved view.
705        /// SavedViewRid saved_view = 4;
706        #[prost(message, tag = "3")]
707        PresetOptions(super::PresetAssetFieldOptions),
708    }
709}
710/// A limited set of options to choose from, with an optional default option.
711#[derive(Clone, PartialEq, ::prost::Message)]
712pub struct PresetDatasetFieldOptions {
713    /// The list of options to choose from.
714    #[prost(message, repeated, tag = "1")]
715    pub options: ::prost::alloc::vec::Vec<DatasetReference>,
716    /// If set, this option will be selected by default, if it is present in the options.
717    /// The user can still select a different option.
718    #[prost(message, optional, tag = "2")]
719    pub default_option: ::core::option::Option<DatasetReference>,
720}
721/// A reference to a single dataset
722#[derive(Clone, PartialEq, ::prost::Message)]
723pub struct DatasetReference {
724    #[prost(oneof = "dataset_reference::Option", tags = "1, 2")]
725    pub option: ::core::option::Option<dataset_reference::Option>,
726}
727/// Nested message and enum types in `DatasetReference`.
728pub mod dataset_reference {
729    #[derive(Clone, PartialEq, ::prost::Oneof)]
730    pub enum Option {
731        /// a constant DatasetRid
732        #[prost(string, tag = "1")]
733        Rid(::prost::alloc::string::String),
734        /// The field reference that will contain an DatasetRid value. The execution will fail if the field is not set
735        /// but the value is accessed.
736        #[prost(string, tag = "2")]
737        FieldId(::prost::alloc::string::String),
738    }
739}
740#[derive(Clone, PartialEq, ::prost::Message)]
741pub struct TagsParameter {
742    /// Tags to always filter to on the dataset or asset data scope.
743    #[prost(map = "string, string", tag = "1")]
744    pub constant: ::std::collections::HashMap<
745        ::prost::alloc::string::String,
746        ::prost::alloc::string::String,
747    >,
748    /// If allowing for user input, the frontend should leverage DataSourceService#getAvailableTagKeys/Values
749    /// to provide the user with existing series tag keys/values to choose from.
750    #[prost(message, optional, tag = "2")]
751    pub user_input: ::core::option::Option<tags_parameter::UserInputOptions>,
752}
753/// Nested message and enum types in `TagsParameter`.
754pub mod tags_parameter {
755    #[derive(Clone, PartialEq, ::prost::Message)]
756    pub struct UserInputOptions {
757        /// Each tag key here must have a value provided by the user
758        #[prost(string, repeated, tag = "1")]
759        pub required_keys: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
760        /// Each tag key here will be suggested to the user but is not required
761        ///
762        /// Can allow for more configuration - e.g. required k-v pairs, default k-v pairs?
763        #[prost(string, repeated, tag = "2")]
764        pub suggested_keys: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
765    }
766}
767/// A reference to multiple string values
768#[derive(Clone, PartialEq, ::prost::Message)]
769pub struct MultiStringReference {
770    #[prost(oneof = "multi_string_reference::Option", tags = "1")]
771    pub option: ::core::option::Option<multi_string_reference::Option>,
772}
773/// Nested message and enum types in `MultiStringReference`.
774pub mod multi_string_reference {
775    #[derive(Clone, PartialEq, ::prost::Oneof)]
776    pub enum Option {
777        /// The value is taken from a field in the current or previous steps.
778        #[prost(string, tag = "1")]
779        FieldId(::prost::alloc::string::String),
780    }
781}
782/// A reference to a single string value
783#[derive(Clone, PartialEq, ::prost::Message)]
784pub struct StringReference {
785    #[prost(oneof = "string_reference::Option", tags = "1, 2")]
786    pub option: ::core::option::Option<string_reference::Option>,
787}
788/// Nested message and enum types in `StringReference`.
789pub mod string_reference {
790    #[derive(Clone, PartialEq, ::prost::Oneof)]
791    pub enum Option {
792        /// The value is a constant string
793        #[prost(string, tag = "1")]
794        Constant(::prost::alloc::string::String),
795        /// The value is taken from a field in the current or previous steps.
796        ///
797        /// TODO(WB-1728): support string templating.
798        /// string template = 3;
799        #[prost(string, tag = "2")]
800        FieldId(::prost::alloc::string::String),
801    }
802}
803/// A reference to multiple assets
804#[derive(Clone, PartialEq, ::prost::Message)]
805pub struct MultiAssetReference {
806    #[prost(oneof = "multi_asset_reference::Option", tags = "1")]
807    pub option: ::core::option::Option<multi_asset_reference::Option>,
808}
809/// Nested message and enum types in `MultiAssetReference`.
810pub mod multi_asset_reference {
811    #[derive(Clone, PartialEq, ::prost::Message)]
812    pub struct AssetReferenceList {
813        #[prost(message, repeated, tag = "1")]
814        pub references: ::prost::alloc::vec::Vec<super::AssetReference>,
815    }
816    #[derive(Clone, PartialEq, ::prost::Oneof)]
817    pub enum Option {
818        /// TODO: add support for a field that contains a list of asset RIDs
819        #[prost(message, tag = "1")]
820        List(AssetReferenceList),
821    }
822}
823/// A reference to a single asset
824#[derive(Clone, PartialEq, ::prost::Message)]
825pub struct AssetReference {
826    #[prost(oneof = "asset_reference::Option", tags = "1, 2")]
827    pub option: ::core::option::Option<asset_reference::Option>,
828}
829/// Nested message and enum types in `AssetReference`.
830pub mod asset_reference {
831    #[derive(Clone, PartialEq, ::prost::Oneof)]
832    pub enum Option {
833        /// a constant AssetRid
834        #[prost(string, tag = "1")]
835        Rid(::prost::alloc::string::String),
836        /// The field reference that will contain an AssetRid value. The execution will fail if the field is not set
837        /// but the value is accessed.
838        #[prost(string, tag = "2")]
839        FieldId(::prost::alloc::string::String),
840    }
841}
842/// A reference to a time range
843#[derive(Clone, PartialEq, ::prost::Message)]
844pub struct TimeRangeReference {
845    #[prost(oneof = "time_range_reference::Option", tags = "1")]
846    pub option: ::core::option::Option<time_range_reference::Option>,
847}
848/// Nested message and enum types in `TimeRangeReference`.
849pub mod time_range_reference {
850    #[derive(Clone, PartialEq, ::prost::Message)]
851    pub struct IngestJobList {
852        /// Field ids that contain IngestJobRids.
853        #[prost(string, repeated, tag = "1")]
854        pub field_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
855    }
856    #[derive(Clone, PartialEq, ::prost::Oneof)]
857    pub enum Option {
858        /// The time range is the union of the time ranges ingested by all the specified ingest jobs.
859        #[prost(message, tag = "1")]
860        FromIngestJobs(IngestJobList),
861    }
862}
863/// A reference to multiple runs
864#[derive(Clone, PartialEq, ::prost::Message)]
865pub struct MultiRunReference {
866    #[prost(oneof = "multi_run_reference::Option", tags = "1")]
867    pub option: ::core::option::Option<multi_run_reference::Option>,
868}
869/// Nested message and enum types in `MultiRunReference`.
870pub mod multi_run_reference {
871    #[derive(Clone, PartialEq, ::prost::Message)]
872    pub struct RunReferenceList {
873        #[prost(message, repeated, tag = "1")]
874        pub references: ::prost::alloc::vec::Vec<super::RunReference>,
875    }
876    #[derive(Clone, PartialEq, ::prost::Oneof)]
877    pub enum Option {
878        /// TODO: add support for a field that contains a list of run RIDs
879        #[prost(message, tag = "1")]
880        List(RunReferenceList),
881    }
882}
883/// A reference to a single run
884#[derive(Clone, PartialEq, ::prost::Message)]
885pub struct RunReference {
886    #[prost(oneof = "run_reference::Option", tags = "1")]
887    pub option: ::core::option::Option<run_reference::Option>,
888}
889/// Nested message and enum types in `RunReference`.
890pub mod run_reference {
891    #[derive(Clone, PartialEq, ::prost::Oneof)]
892    pub enum Option {
893        /// The field id that will contain a RunRid value. The execution will fail if the field is not set properly.
894        #[prost(string, tag = "1")]
895        FieldId(::prost::alloc::string::String),
896    }
897}
898/// A reference to multiple workbook templates
899#[derive(Clone, PartialEq, ::prost::Message)]
900pub struct MultiWorkbookTemplateReference {
901    #[prost(oneof = "multi_workbook_template_reference::Option", tags = "1")]
902    pub option: ::core::option::Option<multi_workbook_template_reference::Option>,
903}
904/// Nested message and enum types in `MultiWorkbookTemplateReference`.
905pub mod multi_workbook_template_reference {
906    #[derive(Clone, PartialEq, ::prost::Message)]
907    pub struct WorkbookTemplateReferenceList {
908        #[prost(message, repeated, tag = "1")]
909        pub references: ::prost::alloc::vec::Vec<super::WorkbookTemplateReference>,
910    }
911    #[derive(Clone, PartialEq, ::prost::Oneof)]
912    pub enum Option {
913        /// TODO: add support for a field that contains a list of workbook template RIDs
914        #[prost(message, tag = "1")]
915        List(WorkbookTemplateReferenceList),
916    }
917}
918/// A reference to a single workbook template
919#[derive(Clone, PartialEq, ::prost::Message)]
920pub struct WorkbookTemplateReference {
921    #[prost(oneof = "workbook_template_reference::Option", tags = "1")]
922    pub option: ::core::option::Option<workbook_template_reference::Option>,
923}
924/// Nested message and enum types in `WorkbookTemplateReference`.
925pub mod workbook_template_reference {
926    #[derive(Clone, PartialEq, ::prost::Oneof)]
927    pub enum Option {
928        /// A constant workbook template RID.
929        ///
930        /// string field_id = 2;
931        #[prost(string, tag = "1")]
932        Rid(::prost::alloc::string::String),
933    }
934}
935/// A reference to multiple checklists
936#[derive(Clone, PartialEq, ::prost::Message)]
937pub struct MultiChecklistReference {
938    #[prost(oneof = "multi_checklist_reference::Option", tags = "1")]
939    pub option: ::core::option::Option<multi_checklist_reference::Option>,
940}
941/// Nested message and enum types in `MultiChecklistReference`.
942pub mod multi_checklist_reference {
943    #[derive(Clone, PartialEq, ::prost::Message)]
944    pub struct ChecklistReferenceList {
945        #[prost(message, repeated, tag = "1")]
946        pub references: ::prost::alloc::vec::Vec<super::ChecklistReference>,
947    }
948    #[derive(Clone, PartialEq, ::prost::Oneof)]
949    pub enum Option {
950        /// TODO: add support for a field that contains a list of checklist RIDs
951        #[prost(message, tag = "1")]
952        List(ChecklistReferenceList),
953    }
954}
955/// A reference to a single checklist
956#[derive(Clone, PartialEq, ::prost::Message)]
957pub struct ChecklistReference {
958    #[prost(oneof = "checklist_reference::Option", tags = "1")]
959    pub option: ::core::option::Option<checklist_reference::Option>,
960}
961/// Nested message and enum types in `ChecklistReference`.
962pub mod checklist_reference {
963    #[derive(Clone, PartialEq, ::prost::Oneof)]
964    pub enum Option {
965        /// A constant checklist RID.
966        ///
967        /// string field_id = 2;
968        #[prost(string, tag = "1")]
969        Rid(::prost::alloc::string::String),
970    }
971}
972/// A reference to multiple notification Integrations
973#[derive(Clone, PartialEq, ::prost::Message)]
974pub struct MultiIntegrationReference {
975    #[prost(oneof = "multi_integration_reference::Option", tags = "1")]
976    pub option: ::core::option::Option<multi_integration_reference::Option>,
977}
978/// Nested message and enum types in `MultiIntegrationReference`.
979pub mod multi_integration_reference {
980    #[derive(Clone, PartialEq, ::prost::Message)]
981    pub struct IntegrationReferenceList {
982        #[prost(message, repeated, tag = "1")]
983        pub references: ::prost::alloc::vec::Vec<super::IntegrationReference>,
984    }
985    #[derive(Clone, PartialEq, ::prost::Oneof)]
986    pub enum Option {
987        #[prost(message, tag = "1")]
988        List(IntegrationReferenceList),
989    }
990}
991/// A reference to a notification Integration
992#[derive(Clone, PartialEq, ::prost::Message)]
993pub struct IntegrationReference {
994    #[prost(oneof = "integration_reference::Option", tags = "1")]
995    pub option: ::core::option::Option<integration_reference::Option>,
996}
997/// Nested message and enum types in `IntegrationReference`.
998pub mod integration_reference {
999    #[derive(Clone, PartialEq, ::prost::Oneof)]
1000    pub enum Option {
1001        /// A constant integration RID.
1002        ///
1003        /// string field_id = 2;
1004        #[prost(string, tag = "1")]
1005        Rid(::prost::alloc::string::String),
1006    }
1007}
1008/// A field to be filled out by the user.
1009#[derive(Clone, PartialEq, ::prost::Message)]
1010pub struct FormField {
1011    /// This field's id can be used by downstream steps to refer to the value.
1012    #[prost(string, tag = "1")]
1013    pub id: ::prost::alloc::string::String,
1014    /// UI label for the field component. Overrides any label defined in the specific FormField type.
1015    #[prost(string, optional, tag = "11")]
1016    pub label: ::core::option::Option<::prost::alloc::string::String>,
1017    /// Help text describing how to use this input field.
1018    #[prost(string, optional, tag = "12")]
1019    pub description: ::core::option::Option<::prost::alloc::string::String>,
1020    #[prost(oneof = "form_field::Field", tags = "2, 3, 4, 5, 6, 7, 8, 9, 10")]
1021    pub field: ::core::option::Option<form_field::Field>,
1022}
1023/// Nested message and enum types in `FormField`.
1024pub mod form_field {
1025    #[derive(Clone, PartialEq, ::prost::Oneof)]
1026    pub enum Field {
1027        #[prost(message, tag = "2")]
1028        Asset(super::AssetField),
1029        #[prost(message, tag = "3")]
1030        Checkbox(super::CheckboxField),
1031        #[prost(message, tag = "4")]
1032        Text(super::TextField),
1033        #[prost(message, tag = "5")]
1034        Int(super::IntField),
1035        #[prost(message, tag = "6")]
1036        Double(super::DoubleField),
1037        #[prost(message, tag = "7")]
1038        SingleEnum(super::SingleEnumField),
1039        #[prost(message, tag = "8")]
1040        MultiEnum(super::MultiEnumField),
1041        #[prost(message, tag = "9")]
1042        FileUpload(super::FileUploadField),
1043        #[prost(message, tag = "10")]
1044        MultiFileUpload(super::MultiFileUploadField),
1045    }
1046}
1047/// A limited set of options to choose from, with an optional default option.
1048#[derive(Clone, PartialEq, ::prost::Message)]
1049pub struct PresetAssetFieldOptions {
1050    /// The list of options to choose from.
1051    #[prost(message, repeated, tag = "1")]
1052    pub options: ::prost::alloc::vec::Vec<AssetReference>,
1053    /// If set, this option will be selected by default, if it is present in the options.
1054    /// The user can still select a different option.
1055    #[prost(message, optional, tag = "2")]
1056    pub default_option: ::core::option::Option<AssetReference>,
1057}
1058/// A field to select a single asset.
1059#[derive(Clone, PartialEq, ::prost::Message)]
1060pub struct AssetField {
1061    /// Helper text to guide selection of the asset
1062    /// deprecated in favor of label directly on FormField
1063    #[prost(string, tag = "1")]
1064    pub label: ::prost::alloc::string::String,
1065    /// Whether this field is required to be set complete the step.
1066    #[prost(bool, tag = "2")]
1067    pub is_required: bool,
1068    /// The asset options for this field.
1069    /// This can be omitted, in which case the asset can be chosen freely from all assets.
1070    #[prost(oneof = "asset_field::Options", tags = "3")]
1071    pub options: ::core::option::Option<asset_field::Options>,
1072}
1073/// Nested message and enum types in `AssetField`.
1074pub mod asset_field {
1075    /// The asset options for this field.
1076    /// This can be omitted, in which case the asset can be chosen freely from all assets.
1077    #[derive(Clone, PartialEq, ::prost::Oneof)]
1078    pub enum Options {
1079        /// The asset must be chosen from a saved view.
1080        /// SavedViewRid saved_view = 5;
1081        /// TODO(pchen): do we want to provide single string types from AssetFieldOption to simplify the Nested
1082        /// or do we want to explicitly modify the types Nested spec uses?
1083        #[prost(message, tag = "3")]
1084        PresetOptions(super::PresetAssetFieldOptions),
1085    }
1086}
1087/// A field to capture a boolean value.
1088#[derive(Clone, PartialEq, ::prost::Message)]
1089pub struct CheckboxField {
1090    /// Label to show for this checkbox field
1091    /// deprecated in favor of label directly on FormField
1092    #[prost(string, tag = "1")]
1093    pub label: ::prost::alloc::string::String,
1094    /// If set, the checkbox value must be checked (`true`) to complete the step.
1095    #[prost(bool, tag = "2")]
1096    pub is_required: bool,
1097}
1098#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1099pub struct TextFieldSimpleInputType {}
1100#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1101pub struct TextFieldMarkdownInputType {}
1102/// A field to capture a string value.
1103#[derive(Clone, PartialEq, ::prost::Message)]
1104pub struct TextField {
1105    /// Label to show for this text field
1106    /// deprecated in favor of label directly on FormField
1107    #[prost(string, tag = "1")]
1108    pub label: ::prost::alloc::string::String,
1109    /// if set, validate that input is at least this many characters
1110    /// `is_required` can be achieved by setting `min_length >= 1`
1111    #[prost(uint32, optional, tag = "4")]
1112    pub min_length: ::core::option::Option<u32>,
1113    /// if set, validate that input is at most this many characters
1114    #[prost(uint32, optional, tag = "5")]
1115    pub max_length: ::core::option::Option<u32>,
1116    /// type of form input to render. Defaults to SIMPLE.
1117    #[prost(oneof = "text_field::InputType", tags = "2, 3")]
1118    pub input_type: ::core::option::Option<text_field::InputType>,
1119}
1120/// Nested message and enum types in `TextField`.
1121pub mod text_field {
1122    /// type of form input to render. Defaults to SIMPLE.
1123    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1124    pub enum InputType {
1125        /// renders a simple html text input field
1126        #[prost(message, tag = "2")]
1127        Simple(super::TextFieldSimpleInputType),
1128        /// renders a Markdown editor for longer inputs with formatting capabilities
1129        #[prost(message, tag = "3")]
1130        Markdown(super::TextFieldMarkdownInputType),
1131    }
1132}
1133/// A field to capture an int value.
1134#[derive(Clone, PartialEq, ::prost::Message)]
1135pub struct IntField {
1136    /// Label to show for this int field
1137    /// deprecated in favor of label directly on FormField
1138    #[prost(string, tag = "1")]
1139    pub label: ::prost::alloc::string::String,
1140    /// Whether this field is required to be set complete the step.
1141    #[prost(bool, tag = "2")]
1142    pub is_required: bool,
1143    /// if set, validate that input is at least this value
1144    #[prost(int64, optional, tag = "3")]
1145    pub gte_value: ::core::option::Option<i64>,
1146    /// if set, validate that input is at most this value
1147    #[prost(int64, optional, tag = "4")]
1148    pub lte_value: ::core::option::Option<i64>,
1149}
1150/// A field to capture a double value.
1151#[derive(Clone, PartialEq, ::prost::Message)]
1152pub struct DoubleField {
1153    /// Label to show for this double field
1154    /// deprecated in favor of label directly on FormField
1155    #[prost(string, tag = "1")]
1156    pub label: ::prost::alloc::string::String,
1157    /// Whether this field is required to be set complete the step.
1158    #[prost(bool, tag = "2")]
1159    pub is_required: bool,
1160    /// if set, a validation on the lower bound of the input value
1161    #[prost(oneof = "double_field::LowerBound", tags = "3, 4")]
1162    pub lower_bound: ::core::option::Option<double_field::LowerBound>,
1163    /// if set, a validation on the upper bound of the input value
1164    #[prost(oneof = "double_field::UpperBound", tags = "5, 6")]
1165    pub upper_bound: ::core::option::Option<double_field::UpperBound>,
1166}
1167/// Nested message and enum types in `DoubleField`.
1168pub mod double_field {
1169    /// if set, a validation on the lower bound of the input value
1170    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1171    pub enum LowerBound {
1172        /// greater than
1173        #[prost(double, tag = "3")]
1174        GtValue(f64),
1175        /// greater than or equal to
1176        #[prost(double, tag = "4")]
1177        GteValue(f64),
1178    }
1179    /// if set, a validation on the upper bound of the input value
1180    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1181    pub enum UpperBound {
1182        /// less than
1183        #[prost(double, tag = "5")]
1184        LtValue(f64),
1185        /// less than or equal to
1186        #[prost(double, tag = "6")]
1187        LteValue(f64),
1188    }
1189}
1190#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1191pub struct EnumFieldButtonsInputType {}
1192#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1193pub struct EnumFieldMenuInputType {}
1194/// A field to capture one of several options.
1195#[derive(Clone, PartialEq, ::prost::Message)]
1196pub struct SingleEnumField {
1197    /// Label to show for this options field
1198    /// deprecated in favor of label directly on FormField
1199    #[prost(string, tag = "1")]
1200    pub label: ::prost::alloc::string::String,
1201    /// List of predefined options that can be selected by the user
1202    #[prost(string, repeated, tag = "2")]
1203    pub options: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1204    /// Whether a user can create and specify a new custom option not in the list of options.
1205    #[prost(bool, tag = "5")]
1206    pub allow_custom: bool,
1207    /// Whether a selection is required
1208    #[prost(bool, tag = "6")]
1209    pub is_required: bool,
1210    /// type of form input to render.
1211    #[prost(oneof = "single_enum_field::InputType", tags = "3, 4")]
1212    pub input_type: ::core::option::Option<single_enum_field::InputType>,
1213}
1214/// Nested message and enum types in `SingleEnumField`.
1215pub mod single_enum_field {
1216    /// type of form input to render.
1217    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1218    pub enum InputType {
1219        /// renders a radio button component
1220        #[prost(message, tag = "3")]
1221        Buttons(super::EnumFieldButtonsInputType),
1222        /// renders a typical drop down menu
1223        #[prost(message, tag = "4")]
1224        Dropdown(super::EnumFieldMenuInputType),
1225    }
1226}
1227/// A field to capture one or more of several options.
1228#[derive(Clone, PartialEq, ::prost::Message)]
1229pub struct MultiEnumField {
1230    /// Label to show for this options field
1231    /// deprecated in favor of label directly on FormField
1232    #[prost(string, tag = "1")]
1233    pub label: ::prost::alloc::string::String,
1234    /// List of predefined options that can be selected by the user
1235    #[prost(string, repeated, tag = "2")]
1236    pub options: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1237    /// Whether a user can create and specify a new custom option not in the list of options.
1238    #[prost(bool, tag = "6")]
1239    pub allow_custom: bool,
1240    /// If set, the user must select at least this many options
1241    /// `is_required` behavior can be achieved by setting `min_count` = 1
1242    #[prost(uint32, optional, tag = "7")]
1243    pub min_count: ::core::option::Option<u32>,
1244    /// If set, the user can select at most this many options
1245    #[prost(uint32, optional, tag = "8")]
1246    pub max_count: ::core::option::Option<u32>,
1247    /// type of form input to render.
1248    #[prost(oneof = "multi_enum_field::InputType", tags = "3, 4")]
1249    pub input_type: ::core::option::Option<multi_enum_field::InputType>,
1250}
1251/// Nested message and enum types in `MultiEnumField`.
1252pub mod multi_enum_field {
1253    /// type of form input to render.
1254    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1255    pub enum InputType {
1256        /// renders a collection of checkboxes
1257        #[prost(message, tag = "3")]
1258        Buttons(super::EnumFieldButtonsInputType),
1259        /// renders a typical drop down menu
1260        #[prost(message, tag = "4")]
1261        Dropdown(super::EnumFieldMenuInputType),
1262    }
1263}
1264/// A field to process the uploading of a file
1265#[derive(Clone, PartialEq, ::prost::Message)]
1266pub struct FileUploadField {
1267    /// If a file is required
1268    #[prost(bool, tag = "1")]
1269    pub is_required: bool,
1270    /// Optional list of case insensitive suffixes to filter files. (ie "csv", "parquet", or "json")
1271    #[prost(string, repeated, tag = "2")]
1272    pub suffix_filters: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1273}
1274/// A field to process the uploading of a dynamic set of files
1275#[derive(Clone, PartialEq, ::prost::Message)]
1276pub struct MultiFileUploadField {
1277    /// Count of required files
1278    #[prost(uint32, optional, tag = "1")]
1279    pub min_count: ::core::option::Option<u32>,
1280    /// File count limit
1281    #[prost(uint32, optional, tag = "2")]
1282    pub max_count: ::core::option::Option<u32>,
1283    /// Optional list of case insensitive suffixes to filter files. (ie "csv", "parquet", or "json")
1284    #[prost(string, repeated, tag = "3")]
1285    pub suffix_filters: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1286}
1287/// Metadata about a procedure that is not part of the versioned state.
1288#[derive(Clone, PartialEq, ::prost::Message)]
1289pub struct ProcedureMetadata {
1290    #[prost(string, tag = "1")]
1291    pub rid: ::prost::alloc::string::String,
1292    #[prost(string, tag = "2")]
1293    pub title: ::prost::alloc::string::String,
1294    #[prost(string, optional, tag = "3")]
1295    pub description: ::core::option::Option<::prost::alloc::string::String>,
1296    #[prost(string, repeated, tag = "4")]
1297    pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1298    #[prost(map = "string, string", tag = "5")]
1299    pub properties: ::std::collections::HashMap<
1300        ::prost::alloc::string::String,
1301        ::prost::alloc::string::String,
1302    >,
1303    #[prost(bool, tag = "6")]
1304    pub is_archived: bool,
1305    #[prost(bool, tag = "7")]
1306    pub is_published: bool,
1307    #[prost(message, optional, tag = "8")]
1308    pub created_at: ::core::option::Option<
1309        super::super::super::google::protobuf::Timestamp,
1310    >,
1311    #[prost(string, tag = "9")]
1312    pub created_by: ::prost::alloc::string::String,
1313    #[prost(message, optional, tag = "10")]
1314    pub updated_at: ::core::option::Option<
1315        super::super::super::google::protobuf::Timestamp,
1316    >,
1317    #[prost(string, tag = "11")]
1318    pub updated_by: ::prost::alloc::string::String,
1319    #[prost(string, tag = "12")]
1320    pub workspace: ::prost::alloc::string::String,
1321}
1322/// A procedure describes a series of steps to be performed, typically in a specific order,
1323#[derive(Clone, PartialEq, ::prost::Message)]
1324pub struct Procedure {
1325    /// The RID of the procedure.
1326    #[prost(string, tag = "1")]
1327    pub rid: ::prost::alloc::string::String,
1328    /// The commit ID of this version of the procedure.
1329    #[prost(string, tag = "2")]
1330    pub commit: ::prost::alloc::string::String,
1331    /// Metadata about the procedure.
1332    #[prost(message, optional, tag = "3")]
1333    pub metadata: ::core::option::Option<ProcedureMetadata>,
1334    /// The versioned state of the procedure.
1335    #[prost(message, optional, tag = "4")]
1336    pub state: ::core::option::Option<ProcedureState>,
1337}
1338#[derive(Clone, PartialEq, ::prost::Message)]
1339pub struct CreateProcedureRequest {
1340    #[prost(string, tag = "1")]
1341    pub title: ::prost::alloc::string::String,
1342    #[prost(string, optional, tag = "2")]
1343    pub description: ::core::option::Option<::prost::alloc::string::String>,
1344    #[prost(string, repeated, tag = "3")]
1345    pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1346    #[prost(map = "string, string", tag = "4")]
1347    pub properties: ::std::collections::HashMap<
1348        ::prost::alloc::string::String,
1349        ::prost::alloc::string::String,
1350    >,
1351    #[prost(message, optional, tag = "5")]
1352    pub state: ::core::option::Option<ProcedureState>,
1353    #[prost(bool, optional, tag = "6")]
1354    pub is_published: ::core::option::Option<bool>,
1355    #[prost(string, tag = "7")]
1356    pub workspace: ::prost::alloc::string::String,
1357    #[prost(string, tag = "8")]
1358    pub commit_message: ::prost::alloc::string::String,
1359    #[prost(string, optional, tag = "9")]
1360    pub initial_branch_name: ::core::option::Option<::prost::alloc::string::String>,
1361}
1362#[derive(Clone, PartialEq, ::prost::Message)]
1363pub struct CreateProcedureResponse {
1364    #[prost(message, optional, tag = "1")]
1365    pub procedure: ::core::option::Option<Procedure>,
1366    #[prost(string, optional, tag = "2")]
1367    pub branch_name: ::core::option::Option<::prost::alloc::string::String>,
1368}
1369#[derive(Clone, PartialEq, ::prost::Message)]
1370pub struct GetProcedureRequest {
1371    #[prost(string, tag = "1")]
1372    pub rid: ::prost::alloc::string::String,
1373    #[prost(message, optional, tag = "2")]
1374    pub branch_or_commit: ::core::option::Option<
1375        super::super::versioning::v1::BranchOrCommit,
1376    >,
1377    /// If true, the display graph will be included in the response.
1378    /// Default is false.
1379    #[prost(bool, tag = "3")]
1380    pub include_display_graph: bool,
1381}
1382#[derive(Clone, PartialEq, ::prost::Message)]
1383pub struct GetProcedureResponse {
1384    #[prost(message, optional, tag = "1")]
1385    pub procedure: ::core::option::Option<Procedure>,
1386    /// Included if include_display_graph was set to true
1387    #[prost(message, optional, tag = "2")]
1388    pub display_graph: ::core::option::Option<ProcedureDisplayGraph>,
1389}
1390#[derive(Clone, PartialEq, ::prost::Message)]
1391pub struct BatchGetProcedureMetadataRequest {
1392    #[prost(string, repeated, tag = "1")]
1393    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1394}
1395#[derive(Clone, PartialEq, ::prost::Message)]
1396pub struct BatchGetProcedureMetadataResponse {
1397    #[prost(message, repeated, tag = "1")]
1398    pub procedure_metadatas: ::prost::alloc::vec::Vec<ProcedureMetadata>,
1399}
1400#[derive(Clone, PartialEq, ::prost::Message)]
1401pub struct UpdateProcedureMetadataRequest {
1402    #[prost(string, tag = "1")]
1403    pub rid: ::prost::alloc::string::String,
1404    #[prost(string, optional, tag = "2")]
1405    pub title: ::core::option::Option<::prost::alloc::string::String>,
1406    #[prost(string, optional, tag = "3")]
1407    pub description: ::core::option::Option<::prost::alloc::string::String>,
1408    #[prost(message, optional, tag = "4")]
1409    pub labels: ::core::option::Option<super::super::types::LabelUpdateWrapper>,
1410    #[prost(message, optional, tag = "5")]
1411    pub properties: ::core::option::Option<super::super::types::PropertyUpdateWrapper>,
1412    #[prost(bool, optional, tag = "6")]
1413    pub is_archived: ::core::option::Option<bool>,
1414    #[prost(bool, optional, tag = "7")]
1415    pub is_published: ::core::option::Option<bool>,
1416}
1417#[derive(Clone, PartialEq, ::prost::Message)]
1418pub struct UpdateProcedureMetadataResponse {
1419    #[prost(message, optional, tag = "1")]
1420    pub procedure_metadata: ::core::option::Option<ProcedureMetadata>,
1421}
1422#[derive(Clone, PartialEq, ::prost::Message)]
1423pub struct ParseNestedProcedureRequest {
1424    #[prost(message, optional, tag = "1")]
1425    pub nested_procedure: ::core::option::Option<NestedProcedure>,
1426    /// If true, the display graph will be included in the response.
1427    /// Default is false.
1428    #[prost(bool, tag = "3")]
1429    pub include_display_graph: bool,
1430}
1431#[derive(Clone, PartialEq, ::prost::Message)]
1432pub struct ParseNestedProcedureResponse {
1433    #[prost(message, optional, tag = "1")]
1434    pub procedure: ::core::option::Option<Procedure>,
1435    /// Included if include_display_graph was set to true
1436    #[prost(message, optional, tag = "2")]
1437    pub display_graph: ::core::option::Option<ProcedureDisplayGraph>,
1438}
1439#[derive(Clone, PartialEq, ::prost::Message)]
1440pub struct GetProcedureAsNestedRequest {
1441    #[prost(string, tag = "1")]
1442    pub rid: ::prost::alloc::string::String,
1443    #[prost(message, optional, tag = "2")]
1444    pub branch_or_commit: ::core::option::Option<
1445        super::super::versioning::v1::BranchOrCommit,
1446    >,
1447}
1448#[derive(Clone, PartialEq, ::prost::Message)]
1449pub struct GetProcedureAsNestedResponse {
1450    #[prost(message, optional, tag = "1")]
1451    pub nested_procedure: ::core::option::Option<NestedProcedure>,
1452}
1453#[derive(Clone, PartialEq, ::prost::Message)]
1454pub struct MergeToMainRequest {
1455    #[prost(string, tag = "1")]
1456    pub rid: ::prost::alloc::string::String,
1457    #[prost(string, tag = "2")]
1458    pub branch: ::prost::alloc::string::String,
1459    /// If present, this commit ID must match the latest commit on main for the merge to succeed.
1460    #[prost(string, optional, tag = "3")]
1461    pub latest_commit_on_main: ::core::option::Option<::prost::alloc::string::String>,
1462    #[prost(string, tag = "4")]
1463    pub message: ::prost::alloc::string::String,
1464}
1465#[derive(Clone, PartialEq, ::prost::Message)]
1466pub struct MergeToMainResponse {
1467    #[prost(message, optional, tag = "1")]
1468    pub procedure: ::core::option::Option<Procedure>,
1469}
1470#[derive(Clone, PartialEq, ::prost::Message)]
1471pub struct SaveWorkingStateRequest {
1472    #[prost(string, tag = "1")]
1473    pub rid: ::prost::alloc::string::String,
1474    #[prost(string, optional, tag = "2")]
1475    pub branch: ::core::option::Option<::prost::alloc::string::String>,
1476    #[prost(string, tag = "3")]
1477    pub message: ::prost::alloc::string::String,
1478    /// If present, this commit ID must match the latest commit on the branch for the save to succeed.
1479    #[prost(string, optional, tag = "4")]
1480    pub latest_commit_on_branch: ::core::option::Option<::prost::alloc::string::String>,
1481    #[prost(message, optional, tag = "5")]
1482    pub state: ::core::option::Option<ProcedureState>,
1483}
1484#[derive(Clone, PartialEq, ::prost::Message)]
1485pub struct SaveWorkingStateResponse {
1486    #[prost(message, optional, tag = "1")]
1487    pub procedure: ::core::option::Option<Procedure>,
1488}
1489#[derive(Clone, PartialEq, ::prost::Message)]
1490pub struct CommitRequest {
1491    #[prost(string, tag = "1")]
1492    pub rid: ::prost::alloc::string::String,
1493    #[prost(string, optional, tag = "2")]
1494    pub branch: ::core::option::Option<::prost::alloc::string::String>,
1495    /// If present, this commit ID must match the latest commit on the branch for the commit to succeed.
1496    #[prost(string, optional, tag = "3")]
1497    pub latest_commit_on_branch: ::core::option::Option<::prost::alloc::string::String>,
1498    #[prost(string, tag = "4")]
1499    pub message: ::prost::alloc::string::String,
1500    #[prost(message, optional, tag = "5")]
1501    pub state: ::core::option::Option<ProcedureState>,
1502}
1503#[derive(Clone, PartialEq, ::prost::Message)]
1504pub struct CommitResponse {
1505    #[prost(message, optional, tag = "1")]
1506    pub procedure: ::core::option::Option<Procedure>,
1507}
1508#[derive(Clone, PartialEq, ::prost::Message)]
1509pub struct ProcedureSearchQuery {
1510    #[prost(oneof = "procedure_search_query::Query", tags = "1, 2, 3, 4, 5, 6, 7, 8")]
1511    pub query: ::core::option::Option<procedure_search_query::Query>,
1512}
1513/// Nested message and enum types in `ProcedureSearchQuery`.
1514pub mod procedure_search_query {
1515    #[derive(Clone, PartialEq, ::prost::Message)]
1516    pub struct ProcedureSearchAndQuery {
1517        #[prost(message, repeated, tag = "1")]
1518        pub queries: ::prost::alloc::vec::Vec<super::ProcedureSearchQuery>,
1519    }
1520    #[derive(Clone, PartialEq, ::prost::Message)]
1521    pub struct ProcedureSearchOrQuery {
1522        #[prost(message, repeated, tag = "1")]
1523        pub queries: ::prost::alloc::vec::Vec<super::ProcedureSearchQuery>,
1524    }
1525    #[derive(Clone, PartialEq, ::prost::Oneof)]
1526    pub enum Query {
1527        #[prost(string, tag = "1")]
1528        SearchText(::prost::alloc::string::String),
1529        #[prost(string, tag = "2")]
1530        Label(::prost::alloc::string::String),
1531        #[prost(message, tag = "3")]
1532        Property(super::super::super::types::Property),
1533        #[prost(message, tag = "4")]
1534        And(ProcedureSearchAndQuery),
1535        #[prost(message, tag = "5")]
1536        Or(ProcedureSearchOrQuery),
1537        #[prost(string, tag = "6")]
1538        Workspace(::prost::alloc::string::String),
1539        #[prost(string, tag = "7")]
1540        CreatedBy(::prost::alloc::string::String),
1541        #[prost(bool, tag = "8")]
1542        IsArchived(bool),
1543    }
1544}
1545#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1546pub struct SearchProceduresSortOptions {
1547    /// Defaults to true (descending)
1548    #[prost(bool, optional, tag = "1")]
1549    pub is_descending: ::core::option::Option<bool>,
1550    /// Defaults to CREATED_AT
1551    #[prost(enumeration = "SearchProceduresSortField", optional, tag = "2")]
1552    pub sort_field: ::core::option::Option<i32>,
1553}
1554#[derive(Clone, PartialEq, ::prost::Message)]
1555pub struct SearchProceduresRequest {
1556    #[prost(message, optional, tag = "1")]
1557    pub query: ::core::option::Option<ProcedureSearchQuery>,
1558    /// If not set, default is to sort by created_at descending
1559    #[prost(message, optional, tag = "2")]
1560    pub sort_options: ::core::option::Option<SearchProceduresSortOptions>,
1561    /// Page sizes greater than 1_000 will be rejected. Default pageSize is 100.
1562    #[prost(int32, optional, tag = "3")]
1563    pub page_size: ::core::option::Option<i32>,
1564    #[prost(string, optional, tag = "4")]
1565    pub next_page_token: ::core::option::Option<::prost::alloc::string::String>,
1566}
1567#[derive(Clone, PartialEq, ::prost::Message)]
1568pub struct SearchProceduresResponse {
1569    #[prost(message, repeated, tag = "1")]
1570    pub procedure_metadata: ::prost::alloc::vec::Vec<ProcedureMetadata>,
1571    #[prost(string, optional, tag = "2")]
1572    pub next_page_token: ::core::option::Option<::prost::alloc::string::String>,
1573}
1574#[derive(Clone, PartialEq, ::prost::Message)]
1575pub struct ArchiveProceduresRequest {
1576    #[prost(string, repeated, tag = "1")]
1577    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1578}
1579#[derive(Clone, PartialEq, ::prost::Message)]
1580pub struct ArchiveProceduresResponse {
1581    #[prost(string, repeated, tag = "1")]
1582    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1583}
1584#[derive(Clone, PartialEq, ::prost::Message)]
1585pub struct UnarchiveProceduresRequest {
1586    #[prost(string, repeated, tag = "1")]
1587    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1588}
1589#[derive(Clone, PartialEq, ::prost::Message)]
1590pub struct UnarchiveProceduresResponse {
1591    #[prost(string, repeated, tag = "1")]
1592    pub procedure_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1593}
1594#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1595#[repr(i32)]
1596pub enum SearchProceduresSortField {
1597    Unspecified = 0,
1598    Name = 1,
1599    CreatedAt = 2,
1600    UpdatedAt = 3,
1601}
1602impl SearchProceduresSortField {
1603    /// String value of the enum field names used in the ProtoBuf definition.
1604    ///
1605    /// The values are not transformed in any way and thus are considered stable
1606    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1607    pub fn as_str_name(&self) -> &'static str {
1608        match self {
1609            Self::Unspecified => "SEARCH_PROCEDURES_SORT_FIELD_UNSPECIFIED",
1610            Self::Name => "SEARCH_PROCEDURES_SORT_FIELD_NAME",
1611            Self::CreatedAt => "SEARCH_PROCEDURES_SORT_FIELD_CREATED_AT",
1612            Self::UpdatedAt => "SEARCH_PROCEDURES_SORT_FIELD_UPDATED_AT",
1613        }
1614    }
1615    /// Creates an enum from field names used in the ProtoBuf definition.
1616    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1617        match value {
1618            "SEARCH_PROCEDURES_SORT_FIELD_UNSPECIFIED" => Some(Self::Unspecified),
1619            "SEARCH_PROCEDURES_SORT_FIELD_NAME" => Some(Self::Name),
1620            "SEARCH_PROCEDURES_SORT_FIELD_CREATED_AT" => Some(Self::CreatedAt),
1621            "SEARCH_PROCEDURES_SORT_FIELD_UPDATED_AT" => Some(Self::UpdatedAt),
1622            _ => None,
1623        }
1624    }
1625}
1626#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1627#[repr(i32)]
1628pub enum ProceduresServiceError {
1629    Unspecified = 0,
1630    NotFound = 1,
1631    CommitNotFound = 2,
1632    CannotMergeMain = 3,
1633    CannotCommitToArchivedProcedure = 4,
1634    InvalidGraph = 5,
1635    InvalidSearchToken = 6,
1636}
1637impl ProceduresServiceError {
1638    /// String value of the enum field names used in the ProtoBuf definition.
1639    ///
1640    /// The values are not transformed in any way and thus are considered stable
1641    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1642    pub fn as_str_name(&self) -> &'static str {
1643        match self {
1644            Self::Unspecified => "PROCEDURES_SERVICE_ERROR_UNSPECIFIED",
1645            Self::NotFound => "PROCEDURES_SERVICE_ERROR_NOT_FOUND",
1646            Self::CommitNotFound => "PROCEDURES_SERVICE_ERROR_COMMIT_NOT_FOUND",
1647            Self::CannotMergeMain => "PROCEDURES_SERVICE_ERROR_CANNOT_MERGE_MAIN",
1648            Self::CannotCommitToArchivedProcedure => {
1649                "PROCEDURES_SERVICE_ERROR_CANNOT_COMMIT_TO_ARCHIVED_PROCEDURE"
1650            }
1651            Self::InvalidGraph => "PROCEDURES_SERVICE_ERROR_INVALID_GRAPH",
1652            Self::InvalidSearchToken => "PROCEDURES_SERVICE_ERROR_INVALID_SEARCH_TOKEN",
1653        }
1654    }
1655    /// Creates an enum from field names used in the ProtoBuf definition.
1656    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1657        match value {
1658            "PROCEDURES_SERVICE_ERROR_UNSPECIFIED" => Some(Self::Unspecified),
1659            "PROCEDURES_SERVICE_ERROR_NOT_FOUND" => Some(Self::NotFound),
1660            "PROCEDURES_SERVICE_ERROR_COMMIT_NOT_FOUND" => Some(Self::CommitNotFound),
1661            "PROCEDURES_SERVICE_ERROR_CANNOT_MERGE_MAIN" => Some(Self::CannotMergeMain),
1662            "PROCEDURES_SERVICE_ERROR_CANNOT_COMMIT_TO_ARCHIVED_PROCEDURE" => {
1663                Some(Self::CannotCommitToArchivedProcedure)
1664            }
1665            "PROCEDURES_SERVICE_ERROR_INVALID_GRAPH" => Some(Self::InvalidGraph),
1666            "PROCEDURES_SERVICE_ERROR_INVALID_SEARCH_TOKEN" => {
1667                Some(Self::InvalidSearchToken)
1668            }
1669            _ => None,
1670        }
1671    }
1672}
1673/// Generated client implementations.
1674pub mod procedures_service_client {
1675    #![allow(
1676        unused_variables,
1677        dead_code,
1678        missing_docs,
1679        clippy::wildcard_imports,
1680        clippy::let_unit_value,
1681    )]
1682    use tonic::codegen::*;
1683    use tonic::codegen::http::Uri;
1684    /// Service for creating and managing procedure templates, which are versioned collections
1685    /// of steps to be performed, typically in a specific order.
1686    #[derive(Debug, Clone)]
1687    pub struct ProceduresServiceClient<T> {
1688        inner: tonic::client::Grpc<T>,
1689    }
1690    impl ProceduresServiceClient<tonic::transport::Channel> {
1691        /// Attempt to create a new client by connecting to a given endpoint.
1692        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
1693        where
1694            D: TryInto<tonic::transport::Endpoint>,
1695            D::Error: Into<StdError>,
1696        {
1697            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
1698            Ok(Self::new(conn))
1699        }
1700    }
1701    impl<T> ProceduresServiceClient<T>
1702    where
1703        T: tonic::client::GrpcService<tonic::body::Body>,
1704        T::Error: Into<StdError>,
1705        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
1706        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
1707    {
1708        pub fn new(inner: T) -> Self {
1709            let inner = tonic::client::Grpc::new(inner);
1710            Self { inner }
1711        }
1712        pub fn with_origin(inner: T, origin: Uri) -> Self {
1713            let inner = tonic::client::Grpc::with_origin(inner, origin);
1714            Self { inner }
1715        }
1716        pub fn with_interceptor<F>(
1717            inner: T,
1718            interceptor: F,
1719        ) -> ProceduresServiceClient<InterceptedService<T, F>>
1720        where
1721            F: tonic::service::Interceptor,
1722            T::ResponseBody: Default,
1723            T: tonic::codegen::Service<
1724                http::Request<tonic::body::Body>,
1725                Response = http::Response<
1726                    <T as tonic::client::GrpcService<tonic::body::Body>>::ResponseBody,
1727                >,
1728            >,
1729            <T as tonic::codegen::Service<
1730                http::Request<tonic::body::Body>,
1731            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
1732        {
1733            ProceduresServiceClient::new(InterceptedService::new(inner, interceptor))
1734        }
1735        /// Compress requests with the given encoding.
1736        ///
1737        /// This requires the server to support it otherwise it might respond with an
1738        /// error.
1739        #[must_use]
1740        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
1741            self.inner = self.inner.send_compressed(encoding);
1742            self
1743        }
1744        /// Enable decompressing responses.
1745        #[must_use]
1746        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
1747            self.inner = self.inner.accept_compressed(encoding);
1748            self
1749        }
1750        /// Limits the maximum size of a decoded message.
1751        ///
1752        /// Default: `4MB`
1753        #[must_use]
1754        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
1755            self.inner = self.inner.max_decoding_message_size(limit);
1756            self
1757        }
1758        /// Limits the maximum size of an encoded message.
1759        ///
1760        /// Default: `usize::MAX`
1761        #[must_use]
1762        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
1763            self.inner = self.inner.max_encoding_message_size(limit);
1764            self
1765        }
1766        /// Create a new procedure
1767        pub async fn create_procedure(
1768            &mut self,
1769            request: impl tonic::IntoRequest<super::CreateProcedureRequest>,
1770        ) -> std::result::Result<
1771            tonic::Response<super::CreateProcedureResponse>,
1772            tonic::Status,
1773        > {
1774            self.inner
1775                .ready()
1776                .await
1777                .map_err(|e| {
1778                    tonic::Status::unknown(
1779                        format!("Service was not ready: {}", e.into()),
1780                    )
1781                })?;
1782            let codec = tonic::codec::ProstCodec::default();
1783            let path = http::uri::PathAndQuery::from_static(
1784                "/nominal.procedures.v1.ProceduresService/CreateProcedure",
1785            );
1786            let mut req = request.into_request();
1787            req.extensions_mut()
1788                .insert(
1789                    GrpcMethod::new(
1790                        "nominal.procedures.v1.ProceduresService",
1791                        "CreateProcedure",
1792                    ),
1793                );
1794            self.inner.unary(req, path, codec).await
1795        }
1796        /// Get a procedure by its RID
1797        pub async fn get_procedure(
1798            &mut self,
1799            request: impl tonic::IntoRequest<super::GetProcedureRequest>,
1800        ) -> std::result::Result<
1801            tonic::Response<super::GetProcedureResponse>,
1802            tonic::Status,
1803        > {
1804            self.inner
1805                .ready()
1806                .await
1807                .map_err(|e| {
1808                    tonic::Status::unknown(
1809                        format!("Service was not ready: {}", e.into()),
1810                    )
1811                })?;
1812            let codec = tonic::codec::ProstCodec::default();
1813            let path = http::uri::PathAndQuery::from_static(
1814                "/nominal.procedures.v1.ProceduresService/GetProcedure",
1815            );
1816            let mut req = request.into_request();
1817            req.extensions_mut()
1818                .insert(
1819                    GrpcMethod::new(
1820                        "nominal.procedures.v1.ProceduresService",
1821                        "GetProcedure",
1822                    ),
1823                );
1824            self.inner.unary(req, path, codec).await
1825        }
1826        /// Get metadata for multiple procedure by RIDs.
1827        /// Unauthorized RIDs will be omitted from the response.
1828        /// Order is not guaranteed to match the request.
1829        pub async fn batch_get_procedure_metadata(
1830            &mut self,
1831            request: impl tonic::IntoRequest<super::BatchGetProcedureMetadataRequest>,
1832        ) -> std::result::Result<
1833            tonic::Response<super::BatchGetProcedureMetadataResponse>,
1834            tonic::Status,
1835        > {
1836            self.inner
1837                .ready()
1838                .await
1839                .map_err(|e| {
1840                    tonic::Status::unknown(
1841                        format!("Service was not ready: {}", e.into()),
1842                    )
1843                })?;
1844            let codec = tonic::codec::ProstCodec::default();
1845            let path = http::uri::PathAndQuery::from_static(
1846                "/nominal.procedures.v1.ProceduresService/BatchGetProcedureMetadata",
1847            );
1848            let mut req = request.into_request();
1849            req.extensions_mut()
1850                .insert(
1851                    GrpcMethod::new(
1852                        "nominal.procedures.v1.ProceduresService",
1853                        "BatchGetProcedureMetadata",
1854                    ),
1855                );
1856            self.inner.unary(req, path, codec).await
1857        }
1858        /// Update the metadata of a procedure
1859        pub async fn update_procedure_metadata(
1860            &mut self,
1861            request: impl tonic::IntoRequest<super::UpdateProcedureMetadataRequest>,
1862        ) -> std::result::Result<
1863            tonic::Response<super::UpdateProcedureMetadataResponse>,
1864            tonic::Status,
1865        > {
1866            self.inner
1867                .ready()
1868                .await
1869                .map_err(|e| {
1870                    tonic::Status::unknown(
1871                        format!("Service was not ready: {}", e.into()),
1872                    )
1873                })?;
1874            let codec = tonic::codec::ProstCodec::default();
1875            let path = http::uri::PathAndQuery::from_static(
1876                "/nominal.procedures.v1.ProceduresService/UpdateProcedureMetadata",
1877            );
1878            let mut req = request.into_request();
1879            req.extensions_mut()
1880                .insert(
1881                    GrpcMethod::new(
1882                        "nominal.procedures.v1.ProceduresService",
1883                        "UpdateProcedureMetadata",
1884                    ),
1885                );
1886            self.inner.unary(req, path, codec).await
1887        }
1888        /// Parse a procedure from a nested procedure structure
1889        pub async fn parse_nested_procedure(
1890            &mut self,
1891            request: impl tonic::IntoRequest<super::ParseNestedProcedureRequest>,
1892        ) -> std::result::Result<
1893            tonic::Response<super::ParseNestedProcedureResponse>,
1894            tonic::Status,
1895        > {
1896            self.inner
1897                .ready()
1898                .await
1899                .map_err(|e| {
1900                    tonic::Status::unknown(
1901                        format!("Service was not ready: {}", e.into()),
1902                    )
1903                })?;
1904            let codec = tonic::codec::ProstCodec::default();
1905            let path = http::uri::PathAndQuery::from_static(
1906                "/nominal.procedures.v1.ProceduresService/ParseNestedProcedure",
1907            );
1908            let mut req = request.into_request();
1909            req.extensions_mut()
1910                .insert(
1911                    GrpcMethod::new(
1912                        "nominal.procedures.v1.ProceduresService",
1913                        "ParseNestedProcedure",
1914                    ),
1915                );
1916            self.inner.unary(req, path, codec).await
1917        }
1918        /// Get procedure as nested procedure
1919        /// TODO(pchen): in the future, not all graphs will be representable as nested procedures
1920        pub async fn get_procedure_as_nested(
1921            &mut self,
1922            request: impl tonic::IntoRequest<super::GetProcedureAsNestedRequest>,
1923        ) -> std::result::Result<
1924            tonic::Response<super::GetProcedureAsNestedResponse>,
1925            tonic::Status,
1926        > {
1927            self.inner
1928                .ready()
1929                .await
1930                .map_err(|e| {
1931                    tonic::Status::unknown(
1932                        format!("Service was not ready: {}", e.into()),
1933                    )
1934                })?;
1935            let codec = tonic::codec::ProstCodec::default();
1936            let path = http::uri::PathAndQuery::from_static(
1937                "/nominal.procedures.v1.ProceduresService/GetProcedureAsNested",
1938            );
1939            let mut req = request.into_request();
1940            req.extensions_mut()
1941                .insert(
1942                    GrpcMethod::new(
1943                        "nominal.procedures.v1.ProceduresService",
1944                        "GetProcedureAsNested",
1945                    ),
1946                );
1947            self.inner.unary(req, path, codec).await
1948        }
1949        /// Merge a branch of a procedure to main
1950        pub async fn merge_to_main(
1951            &mut self,
1952            request: impl tonic::IntoRequest<super::MergeToMainRequest>,
1953        ) -> std::result::Result<
1954            tonic::Response<super::MergeToMainResponse>,
1955            tonic::Status,
1956        > {
1957            self.inner
1958                .ready()
1959                .await
1960                .map_err(|e| {
1961                    tonic::Status::unknown(
1962                        format!("Service was not ready: {}", e.into()),
1963                    )
1964                })?;
1965            let codec = tonic::codec::ProstCodec::default();
1966            let path = http::uri::PathAndQuery::from_static(
1967                "/nominal.procedures.v1.ProceduresService/MergeToMain",
1968            );
1969            let mut req = request.into_request();
1970            req.extensions_mut()
1971                .insert(
1972                    GrpcMethod::new(
1973                        "nominal.procedures.v1.ProceduresService",
1974                        "MergeToMain",
1975                    ),
1976                );
1977            self.inner.unary(req, path, codec).await
1978        }
1979        /// Save the working state of a procedure
1980        pub async fn save_working_state(
1981            &mut self,
1982            request: impl tonic::IntoRequest<super::SaveWorkingStateRequest>,
1983        ) -> std::result::Result<
1984            tonic::Response<super::SaveWorkingStateResponse>,
1985            tonic::Status,
1986        > {
1987            self.inner
1988                .ready()
1989                .await
1990                .map_err(|e| {
1991                    tonic::Status::unknown(
1992                        format!("Service was not ready: {}", e.into()),
1993                    )
1994                })?;
1995            let codec = tonic::codec::ProstCodec::default();
1996            let path = http::uri::PathAndQuery::from_static(
1997                "/nominal.procedures.v1.ProceduresService/SaveWorkingState",
1998            );
1999            let mut req = request.into_request();
2000            req.extensions_mut()
2001                .insert(
2002                    GrpcMethod::new(
2003                        "nominal.procedures.v1.ProceduresService",
2004                        "SaveWorkingState",
2005                    ),
2006                );
2007            self.inner.unary(req, path, codec).await
2008        }
2009        /// Commit a procedure to a branch
2010        pub async fn commit(
2011            &mut self,
2012            request: impl tonic::IntoRequest<super::CommitRequest>,
2013        ) -> std::result::Result<tonic::Response<super::CommitResponse>, tonic::Status> {
2014            self.inner
2015                .ready()
2016                .await
2017                .map_err(|e| {
2018                    tonic::Status::unknown(
2019                        format!("Service was not ready: {}", e.into()),
2020                    )
2021                })?;
2022            let codec = tonic::codec::ProstCodec::default();
2023            let path = http::uri::PathAndQuery::from_static(
2024                "/nominal.procedures.v1.ProceduresService/Commit",
2025            );
2026            let mut req = request.into_request();
2027            req.extensions_mut()
2028                .insert(
2029                    GrpcMethod::new("nominal.procedures.v1.ProceduresService", "Commit"),
2030                );
2031            self.inner.unary(req, path, codec).await
2032        }
2033        /// Searches all procedures, returning paged results
2034        pub async fn search_procedures(
2035            &mut self,
2036            request: impl tonic::IntoRequest<super::SearchProceduresRequest>,
2037        ) -> std::result::Result<
2038            tonic::Response<super::SearchProceduresResponse>,
2039            tonic::Status,
2040        > {
2041            self.inner
2042                .ready()
2043                .await
2044                .map_err(|e| {
2045                    tonic::Status::unknown(
2046                        format!("Service was not ready: {}", e.into()),
2047                    )
2048                })?;
2049            let codec = tonic::codec::ProstCodec::default();
2050            let path = http::uri::PathAndQuery::from_static(
2051                "/nominal.procedures.v1.ProceduresService/SearchProcedures",
2052            );
2053            let mut req = request.into_request();
2054            req.extensions_mut()
2055                .insert(
2056                    GrpcMethod::new(
2057                        "nominal.procedures.v1.ProceduresService",
2058                        "SearchProcedures",
2059                    ),
2060                );
2061            self.inner.unary(req, path, codec).await
2062        }
2063        /// Archive procedures
2064        pub async fn archive_procedures(
2065            &mut self,
2066            request: impl tonic::IntoRequest<super::ArchiveProceduresRequest>,
2067        ) -> std::result::Result<
2068            tonic::Response<super::ArchiveProceduresResponse>,
2069            tonic::Status,
2070        > {
2071            self.inner
2072                .ready()
2073                .await
2074                .map_err(|e| {
2075                    tonic::Status::unknown(
2076                        format!("Service was not ready: {}", e.into()),
2077                    )
2078                })?;
2079            let codec = tonic::codec::ProstCodec::default();
2080            let path = http::uri::PathAndQuery::from_static(
2081                "/nominal.procedures.v1.ProceduresService/ArchiveProcedures",
2082            );
2083            let mut req = request.into_request();
2084            req.extensions_mut()
2085                .insert(
2086                    GrpcMethod::new(
2087                        "nominal.procedures.v1.ProceduresService",
2088                        "ArchiveProcedures",
2089                    ),
2090                );
2091            self.inner.unary(req, path, codec).await
2092        }
2093        /// Unarchive procedures
2094        pub async fn unarchive_procedures(
2095            &mut self,
2096            request: impl tonic::IntoRequest<super::UnarchiveProceduresRequest>,
2097        ) -> std::result::Result<
2098            tonic::Response<super::UnarchiveProceduresResponse>,
2099            tonic::Status,
2100        > {
2101            self.inner
2102                .ready()
2103                .await
2104                .map_err(|e| {
2105                    tonic::Status::unknown(
2106                        format!("Service was not ready: {}", e.into()),
2107                    )
2108                })?;
2109            let codec = tonic::codec::ProstCodec::default();
2110            let path = http::uri::PathAndQuery::from_static(
2111                "/nominal.procedures.v1.ProceduresService/UnarchiveProcedures",
2112            );
2113            let mut req = request.into_request();
2114            req.extensions_mut()
2115                .insert(
2116                    GrpcMethod::new(
2117                        "nominal.procedures.v1.ProceduresService",
2118                        "UnarchiveProcedures",
2119                    ),
2120                );
2121            self.inner.unary(req, path, codec).await
2122        }
2123    }
2124}