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