Skip to main content

gestalt/
workflow.rs

1// Code generated by sdkgen. DO NOT EDIT.
2
3//! Generated native types and clients for workflow.proto.
4
5use crate::agent::AgentOutput;
6use crate::app::{AgentToolRef, RequestContext};
7use crate::codec::host_service::{HostServiceChannel, connect_host_service, plain_channel};
8use crate::codec::workflow::{
9    from_wire_get_workflow_provider_run_events_response,
10    from_wire_get_workflow_provider_run_output_response,
11    from_wire_list_workflow_provider_definitions_response,
12    from_wire_list_workflow_provider_runs_response, from_wire_signal_workflow_run_response,
13    from_wire_workflow_definition, from_wire_workflow_event, from_wire_workflow_run,
14    to_wire_apply_workflow_provider_definition_request,
15    to_wire_cancel_workflow_provider_run_request,
16    to_wire_delete_workflow_provider_definition_request,
17    to_wire_deliver_workflow_provider_event_request,
18    to_wire_get_workflow_provider_definition_request,
19    to_wire_get_workflow_provider_run_events_request,
20    to_wire_get_workflow_provider_run_output_request, to_wire_get_workflow_provider_run_request,
21    to_wire_list_workflow_provider_definitions_request,
22    to_wire_list_workflow_provider_runs_request,
23    to_wire_set_workflow_provider_activation_paused_request,
24    to_wire_set_workflow_provider_definition_paused_request,
25    to_wire_signal_or_start_workflow_provider_run_request,
26    to_wire_signal_workflow_provider_run_request, to_wire_start_workflow_provider_run_request,
27};
28use crate::generated::v1;
29use crate::rpc_support::GestaltError;
30
31/// Open enum for `gestalt.provider.v1.WorkflowRunStatus`; unknown numeric values are preserved.
32pub type WorkflowRunStatus = i32;
33
34/// Named values of `WorkflowRunStatus`.
35pub mod workflow_run_status {
36    /// WORKFLOW_RUN_STATUS_UNSPECIFIED.
37    pub const WORKFLOW_RUN_STATUS_UNSPECIFIED: i32 = 0;
38    /// WORKFLOW_RUN_STATUS_PENDING.
39    pub const WORKFLOW_RUN_STATUS_PENDING: i32 = 1;
40    /// WORKFLOW_RUN_STATUS_RUNNING.
41    pub const WORKFLOW_RUN_STATUS_RUNNING: i32 = 2;
42    /// WORKFLOW_RUN_STATUS_SUCCEEDED.
43    pub const WORKFLOW_RUN_STATUS_SUCCEEDED: i32 = 3;
44    /// WORKFLOW_RUN_STATUS_FAILED.
45    pub const WORKFLOW_RUN_STATUS_FAILED: i32 = 4;
46    /// WORKFLOW_RUN_STATUS_CANCELED.
47    pub const WORKFLOW_RUN_STATUS_CANCELED: i32 = 5;
48}
49
50/// Open enum for `gestalt.provider.v1.WorkflowStepStatus`; unknown numeric values are preserved.
51pub type WorkflowStepStatus = i32;
52
53/// Named values of `WorkflowStepStatus`.
54pub mod workflow_step_status {
55    /// WORKFLOW_STEP_STATUS_UNSPECIFIED.
56    pub const WORKFLOW_STEP_STATUS_UNSPECIFIED: i32 = 0;
57    /// WORKFLOW_STEP_STATUS_PENDING.
58    pub const WORKFLOW_STEP_STATUS_PENDING: i32 = 1;
59    /// WORKFLOW_STEP_STATUS_RUNNING.
60    pub const WORKFLOW_STEP_STATUS_RUNNING: i32 = 2;
61    /// WORKFLOW_STEP_STATUS_SKIPPED.
62    pub const WORKFLOW_STEP_STATUS_SKIPPED: i32 = 3;
63    /// WORKFLOW_STEP_STATUS_SUCCEEDED.
64    pub const WORKFLOW_STEP_STATUS_SUCCEEDED: i32 = 4;
65    /// WORKFLOW_STEP_STATUS_FAILED.
66    pub const WORKFLOW_STEP_STATUS_FAILED: i32 = 5;
67    /// WORKFLOW_STEP_STATUS_UNKNOWN.
68    pub const WORKFLOW_STEP_STATUS_UNKNOWN: i32 = 6;
69}
70
71/// Native message type for `gestalt.provider.v1.ApplyWorkflowProviderDefinitionRequest`.
72#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
73#[serde(rename_all = "camelCase")]
74pub struct ApplyWorkflowProviderDefinitionRequest {
75    /// The `provider` field.
76    pub provider: String,
77    /// The `spec` field; None when unset.
78    pub spec: Option<WorkflowDefinitionSpec>,
79    /// The `idempotency_key` field.
80    pub idempotency_key: String,
81    /// The `context` field; None when unset.
82    pub context: Option<RequestContext>,
83}
84
85/// Native message type for `gestalt.provider.v1.BoundWorkflowTarget`.
86#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
87#[serde(rename_all = "camelCase")]
88pub struct BoundWorkflowTarget {
89    /// The `steps` field.
90    pub steps: Vec<WorkflowStep>,
91}
92
93/// Native message type for `gestalt.provider.v1.CancelWorkflowProviderRunRequest`.
94#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
95#[serde(rename_all = "camelCase")]
96pub struct CancelWorkflowProviderRunRequest {
97    /// The `run_id` field.
98    pub run_id: String,
99    /// The `reason` field.
100    pub reason: String,
101    /// The `context` field; None when unset.
102    pub context: Option<RequestContext>,
103    /// The `provider` field.
104    pub provider: String,
105}
106
107/// Native message type for `gestalt.provider.v1.DeleteWorkflowProviderDefinitionRequest`.
108#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
109#[serde(rename_all = "camelCase")]
110pub struct DeleteWorkflowProviderDefinitionRequest {
111    /// The `definition_id` field.
112    pub definition_id: String,
113    /// The `context` field; None when unset.
114    pub context: Option<RequestContext>,
115    /// The `provider` field.
116    pub provider: String,
117}
118
119/// Native message type for `gestalt.provider.v1.DeliverWorkflowProviderEventRequest`.
120#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
121#[serde(rename_all = "camelCase")]
122pub struct DeliverWorkflowProviderEventRequest {
123    /// The `provider` field.
124    pub provider: String,
125    /// The `event` field; None when unset.
126    pub event: Option<WorkflowEvent>,
127    /// The `context` field; None when unset.
128    pub context: Option<RequestContext>,
129}
130
131/// Native message type for `gestalt.provider.v1.GetWorkflowProviderDefinitionRequest`.
132#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
133#[serde(rename_all = "camelCase")]
134pub struct GetWorkflowProviderDefinitionRequest {
135    /// The `definition_id` field.
136    pub definition_id: String,
137    /// The `context` field; None when unset.
138    pub context: Option<RequestContext>,
139    /// The `provider` field.
140    pub provider: String,
141}
142
143/// Native message type for `gestalt.provider.v1.GetWorkflowProviderRunEventsRequest`.
144#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
145#[serde(rename_all = "camelCase")]
146pub struct GetWorkflowProviderRunEventsRequest {
147    /// The `run_id` field.
148    pub run_id: String,
149    /// The `context` field; None when unset.
150    pub context: Option<RequestContext>,
151    /// The `provider` field.
152    pub provider: String,
153}
154
155/// Native message type for `gestalt.provider.v1.GetWorkflowProviderRunEventsResponse`.
156#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
157#[serde(rename_all = "camelCase")]
158pub struct GetWorkflowProviderRunEventsResponse {
159    /// The `events` field.
160    pub events: Vec<WorkflowRunEvent>,
161}
162
163/// Native message type for `gestalt.provider.v1.GetWorkflowProviderRunOutputRequest`.
164#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
165#[serde(rename_all = "camelCase")]
166pub struct GetWorkflowProviderRunOutputRequest {
167    /// The `run_id` field.
168    pub run_id: String,
169    /// The `context` field; None when unset.
170    pub context: Option<RequestContext>,
171    /// The `provider` field.
172    pub provider: String,
173}
174
175/// Native message type for `gestalt.provider.v1.GetWorkflowProviderRunOutputResponse`.
176#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
177#[serde(rename_all = "camelCase")]
178pub struct GetWorkflowProviderRunOutputResponse {
179    /// The `output` field; None when unset.
180    pub output: Option<serde_json::Value>,
181}
182
183/// Native message type for `gestalt.provider.v1.GetWorkflowProviderRunRequest`.
184#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
185#[serde(rename_all = "camelCase")]
186pub struct GetWorkflowProviderRunRequest {
187    /// The `run_id` field.
188    pub run_id: String,
189    /// The `context` field; None when unset.
190    pub context: Option<RequestContext>,
191    /// The `provider` field.
192    pub provider: String,
193}
194
195/// Native message type for `gestalt.provider.v1.ListWorkflowProviderDefinitionsRequest`.
196#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
197#[serde(rename_all = "camelCase")]
198pub struct ListWorkflowProviderDefinitionsRequest {
199    /// The `context` field; None when unset.
200    pub context: Option<RequestContext>,
201    /// The `provider` field.
202    pub provider: String,
203}
204
205/// Native message type for `gestalt.provider.v1.ListWorkflowProviderDefinitionsResponse`.
206#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
207#[serde(rename_all = "camelCase")]
208pub struct ListWorkflowProviderDefinitionsResponse {
209    /// The `definitions` field.
210    pub definitions: Vec<WorkflowDefinition>,
211}
212
213/// Native message type for `gestalt.provider.v1.ListWorkflowProviderRunsRequest`.
214#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
215#[serde(rename_all = "camelCase")]
216pub struct ListWorkflowProviderRunsRequest {
217    /// The `page_size` field.
218    pub page_size: i32,
219    /// The `page_token` field.
220    pub page_token: String,
221    /// The `status` field.
222    pub status: WorkflowRunStatus,
223    /// The `target_app` field.
224    pub target_app: String,
225    /// The `context` field; None when unset.
226    pub context: Option<RequestContext>,
227    /// The `provider` field.
228    pub provider: String,
229}
230
231/// Native message type for `gestalt.provider.v1.ListWorkflowProviderRunsResponse`.
232#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
233#[serde(rename_all = "camelCase")]
234pub struct ListWorkflowProviderRunsResponse {
235    /// The `runs` field.
236    pub runs: Vec<WorkflowRun>,
237    /// The `next_page_token` field.
238    pub next_page_token: String,
239}
240
241/// Native message type for `gestalt.provider.v1.SetWorkflowProviderActivationPausedRequest`.
242#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
243#[serde(rename_all = "camelCase")]
244pub struct SetWorkflowProviderActivationPausedRequest {
245    /// The `definition_id` field.
246    pub definition_id: String,
247    /// The `activation_id` field.
248    pub activation_id: String,
249    /// The `paused` field.
250    pub paused: bool,
251    /// The `context` field; None when unset.
252    pub context: Option<RequestContext>,
253    /// The `provider` field.
254    pub provider: String,
255}
256
257/// Native message type for `gestalt.provider.v1.SetWorkflowProviderDefinitionPausedRequest`.
258#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
259#[serde(rename_all = "camelCase")]
260pub struct SetWorkflowProviderDefinitionPausedRequest {
261    /// The `definition_id` field.
262    pub definition_id: String,
263    /// The `paused` field.
264    pub paused: bool,
265    /// The `context` field; None when unset.
266    pub context: Option<RequestContext>,
267    /// The `provider` field.
268    pub provider: String,
269}
270
271/// Native message type for `gestalt.provider.v1.SignalOrStartWorkflowProviderRunRequest`.
272#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
273#[serde(rename_all = "camelCase")]
274pub struct SignalOrStartWorkflowProviderRunRequest {
275    /// The `workflow_key` field.
276    pub workflow_key: String,
277    /// The `idempotency_key` field.
278    pub idempotency_key: String,
279    /// The `signal` field; None when unset.
280    pub signal: Option<WorkflowSignal>,
281    /// The `provider` field.
282    pub provider: String,
283    /// The `definition_id` field.
284    pub definition_id: String,
285    /// The `input` field; None when unset.
286    pub input: Option<serde_json::Map<String, serde_json::Value>>,
287    /// The `expected_definition_generation` field.
288    pub expected_definition_generation: i64,
289    /// The `context` field; None when unset.
290    pub context: Option<RequestContext>,
291}
292
293/// Native message type for `gestalt.provider.v1.SignalWorkflowProviderRunRequest`.
294#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
295#[serde(rename_all = "camelCase")]
296pub struct SignalWorkflowProviderRunRequest {
297    /// The `run_id` field.
298    pub run_id: String,
299    /// The `signal` field; None when unset.
300    pub signal: Option<WorkflowSignal>,
301    /// The `context` field; None when unset.
302    pub context: Option<RequestContext>,
303    /// The `provider` field.
304    pub provider: String,
305}
306
307/// Native message type for `gestalt.provider.v1.SignalWorkflowRunResponse`.
308#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
309#[serde(rename_all = "camelCase")]
310pub struct SignalWorkflowRunResponse {
311    /// The `run` field; None when unset.
312    pub run: Option<WorkflowRun>,
313    /// The `signal` field; None when unset.
314    pub signal: Option<WorkflowSignal>,
315    /// The `started_run` field.
316    pub started_run: bool,
317    /// The `workflow_key` field.
318    pub workflow_key: String,
319}
320
321/// Native message type for `gestalt.provider.v1.StartWorkflowProviderRunRequest`.
322#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
323#[serde(rename_all = "camelCase")]
324pub struct StartWorkflowProviderRunRequest {
325    /// The `idempotency_key` field.
326    pub idempotency_key: String,
327    /// The `workflow_key` field.
328    pub workflow_key: String,
329    /// The `provider` field.
330    pub provider: String,
331    /// The `definition_id` field.
332    pub definition_id: String,
333    /// The `input` field; None when unset.
334    pub input: Option<serde_json::Map<String, serde_json::Value>>,
335    /// The `expected_definition_generation` field.
336    pub expected_definition_generation: i64,
337    /// The `context` field; None when unset.
338    pub context: Option<RequestContext>,
339}
340
341/// Values of the `trigger` oneof in `WorkflowActivation`; the message field is None when unset.
342#[allow(clippy::enum_variant_names, clippy::large_enum_variant)]
343#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
344pub enum WorkflowActivationTrigger {
345    /// The `schedule` variant.
346    Schedule(WorkflowScheduleActivation),
347    /// The `event` variant.
348    Event(WorkflowEventActivation),
349}
350
351/// Native message type for `gestalt.provider.v1.WorkflowActivation`.
352#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
353#[serde(rename_all = "camelCase")]
354pub struct WorkflowActivation {
355    /// The `id` field.
356    pub id: String,
357    /// The `input` field; None when unset.
358    pub input: Option<WorkflowValue>,
359    /// The `paused` field.
360    pub paused: bool,
361    /// The `trigger` oneof; None when unset.
362    pub trigger: Option<WorkflowActivationTrigger>,
363}
364
365/// Native message type for `gestalt.provider.v1.WorkflowAgentMessage`.
366#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
367#[serde(rename_all = "camelCase")]
368pub struct WorkflowAgentMessage {
369    /// The `role` field.
370    pub role: String,
371    /// The `text` field; None when unset.
372    pub text: Option<WorkflowText>,
373    /// The `metadata` field; None when unset.
374    pub metadata: Option<serde_json::Map<String, serde_json::Value>>,
375}
376
377/// Native message type for `gestalt.provider.v1.WorkflowArray`.
378#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
379#[serde(rename_all = "camelCase")]
380pub struct WorkflowArray {
381    /// The `values` field.
382    pub values: Vec<WorkflowValue>,
383}
384
385/// Native message type for `gestalt.provider.v1.WorkflowDefinition`.
386#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
387#[serde(rename_all = "camelCase")]
388pub struct WorkflowDefinition {
389    /// The `id` field.
390    pub id: String,
391    /// The `generation` field.
392    pub generation: i64,
393    /// The `target` field; None when unset.
394    pub target: Option<BoundWorkflowTarget>,
395    /// The `activations` field.
396    pub activations: Vec<WorkflowActivation>,
397    /// The `paused` field.
398    pub paused: bool,
399    #[serde(with = "crate::serde_time")]
400    /// The `created_at` field; None when unset.
401    pub created_at: Option<std::time::SystemTime>,
402    #[serde(with = "crate::serde_time")]
403    /// The `updated_at` field; None when unset.
404    pub updated_at: Option<std::time::SystemTime>,
405    /// The `provider` field.
406    pub provider: String,
407    /// The `run_as` field.
408    pub run_as: String,
409}
410
411/// Native message type for `gestalt.provider.v1.WorkflowDefinitionSpec`.
412#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
413#[serde(rename_all = "camelCase")]
414pub struct WorkflowDefinitionSpec {
415    /// The `id` field.
416    pub id: String,
417    /// The `target` field; None when unset.
418    pub target: Option<BoundWorkflowTarget>,
419    /// The `activations` field.
420    pub activations: Vec<WorkflowActivation>,
421    /// The `paused` field.
422    pub paused: bool,
423    /// The `run_as` field.
424    pub run_as: String,
425}
426
427/// Native message type for `gestalt.provider.v1.WorkflowEvent`.
428#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
429#[serde(rename_all = "camelCase")]
430pub struct WorkflowEvent {
431    /// The `id` field.
432    pub id: String,
433    /// The `source` field.
434    pub source: String,
435    /// The `spec_version` field.
436    pub spec_version: String,
437    /// The `type` field.
438    pub r#type: String,
439    /// The `subject` field.
440    pub subject: String,
441    #[serde(with = "crate::serde_time")]
442    /// The `time` field; None when unset.
443    pub time: Option<std::time::SystemTime>,
444    /// The `datacontenttype` field.
445    pub datacontenttype: String,
446    /// The `data` field; None when unset.
447    pub data: Option<serde_json::Map<String, serde_json::Value>>,
448    /// The `extensions` field.
449    pub extensions: std::collections::BTreeMap<String, serde_json::Value>,
450}
451
452/// Native message type for `gestalt.provider.v1.WorkflowEventActivation`.
453#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
454#[serde(rename_all = "camelCase")]
455pub struct WorkflowEventActivation {
456    /// The `match` field; None when unset.
457    pub r#match: Option<WorkflowEventMatch>,
458}
459
460/// Native message type for `gestalt.provider.v1.WorkflowEventMatch`.
461#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
462#[serde(rename_all = "camelCase")]
463pub struct WorkflowEventMatch {
464    /// The `type` field.
465    pub r#type: String,
466    /// The `source` field.
467    pub source: String,
468    /// The `subject` field.
469    pub subject: String,
470}
471
472/// Native message type for `gestalt.provider.v1.WorkflowEventTriggerInvocation`.
473#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
474#[serde(rename_all = "camelCase")]
475pub struct WorkflowEventTriggerInvocation {
476    /// The `activation_id` field.
477    pub activation_id: String,
478    /// The `event` field; None when unset.
479    pub event: Option<WorkflowEvent>,
480}
481
482/// Native message type for `gestalt.provider.v1.WorkflowManualTrigger`.
483#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
484#[serde(rename_all = "camelCase")]
485pub struct WorkflowManualTrigger {}
486
487/// Native message type for `gestalt.provider.v1.WorkflowObject`.
488#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
489#[serde(rename_all = "camelCase")]
490pub struct WorkflowObject {
491    /// The `fields` field.
492    pub fields: std::collections::BTreeMap<String, WorkflowValue>,
493}
494
495/// Native message type for `gestalt.provider.v1.WorkflowPathSource`.
496#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
497#[serde(rename_all = "camelCase")]
498pub struct WorkflowPathSource {
499    /// The `path` field.
500    pub path: String,
501}
502
503/// Native message type for `gestalt.provider.v1.WorkflowRun`.
504#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
505#[serde(rename_all = "camelCase")]
506pub struct WorkflowRun {
507    /// The `id` field.
508    pub id: String,
509    /// The `status` field.
510    pub status: WorkflowRunStatus,
511    /// The `target` field; None when unset.
512    pub target: Option<BoundWorkflowTarget>,
513    /// The `trigger` field; None when unset.
514    pub trigger: Option<WorkflowRunTrigger>,
515    #[serde(with = "crate::serde_time")]
516    /// The `created_at` field; None when unset.
517    pub created_at: Option<std::time::SystemTime>,
518    #[serde(with = "crate::serde_time")]
519    /// The `started_at` field; None when unset.
520    pub started_at: Option<std::time::SystemTime>,
521    #[serde(with = "crate::serde_time")]
522    /// The `completed_at` field; None when unset.
523    pub completed_at: Option<std::time::SystemTime>,
524    /// The `status_message` field.
525    pub status_message: String,
526    /// The `output` field; None when unset.
527    pub output: Option<serde_json::Value>,
528    /// The `workflow_key` field.
529    pub workflow_key: String,
530    /// The `provider` field.
531    pub provider: String,
532    /// The `definition_id` field.
533    pub definition_id: String,
534    /// The `run_as` field.
535    pub run_as: String,
536    /// The `input` field; None when unset.
537    pub input: Option<serde_json::Map<String, serde_json::Value>>,
538    /// The `definition_generation` field.
539    pub definition_generation: i64,
540    /// The `current_step_id` field.
541    pub current_step_id: String,
542    /// The `steps` field.
543    pub steps: Vec<WorkflowStepExecution>,
544}
545
546/// Native message type for `gestalt.provider.v1.WorkflowRunEvent`.
547#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
548#[serde(rename_all = "camelCase")]
549pub struct WorkflowRunEvent {
550    /// The `id` field.
551    pub id: String,
552    /// The `run_id` field.
553    pub run_id: String,
554    /// The `step_id` field.
555    pub step_id: String,
556    /// The `type` field.
557    pub r#type: String,
558    /// The `data` field; None when unset.
559    pub data: Option<serde_json::Map<String, serde_json::Value>>,
560    #[serde(with = "crate::serde_time")]
561    /// The `created_at` field; None when unset.
562    pub created_at: Option<std::time::SystemTime>,
563}
564
565/// Values of the `kind` oneof in `WorkflowRunTrigger`; the message field is None when unset.
566#[allow(clippy::enum_variant_names, clippy::large_enum_variant)]
567#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
568pub enum WorkflowRunTriggerKind {
569    /// The `manual` variant.
570    Manual(WorkflowManualTrigger),
571    /// The `schedule` variant.
572    Schedule(WorkflowScheduleTrigger),
573    /// The `event` variant.
574    Event(WorkflowEventTriggerInvocation),
575}
576
577/// Native message type for `gestalt.provider.v1.WorkflowRunTrigger`.
578#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
579#[serde(rename_all = "camelCase")]
580pub struct WorkflowRunTrigger {
581    /// The `kind` oneof; None when unset.
582    pub kind: Option<WorkflowRunTriggerKind>,
583}
584
585/// Native message type for `gestalt.provider.v1.WorkflowScheduleActivation`.
586#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
587#[serde(rename_all = "camelCase")]
588pub struct WorkflowScheduleActivation {
589    /// The `cron` field.
590    pub cron: String,
591    /// The `timezone` field.
592    pub timezone: String,
593}
594
595/// Native message type for `gestalt.provider.v1.WorkflowScheduleTrigger`.
596#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
597#[serde(rename_all = "camelCase")]
598pub struct WorkflowScheduleTrigger {
599    /// The `activation_id` field.
600    pub activation_id: String,
601    #[serde(with = "crate::serde_time")]
602    /// The `scheduled_for` field; None when unset.
603    pub scheduled_for: Option<std::time::SystemTime>,
604}
605
606/// Native message type for `gestalt.provider.v1.WorkflowSignal`.
607#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
608#[serde(rename_all = "camelCase")]
609pub struct WorkflowSignal {
610    /// The `id` field.
611    pub id: String,
612    /// The `name` field.
613    pub name: String,
614    /// The `payload` field; None when unset.
615    pub payload: Option<serde_json::Map<String, serde_json::Value>>,
616    /// The `metadata` field; None when unset.
617    pub metadata: Option<serde_json::Map<String, serde_json::Value>>,
618    #[serde(with = "crate::serde_time")]
619    /// The `created_at` field; None when unset.
620    pub created_at: Option<std::time::SystemTime>,
621    /// The `idempotency_key` field.
622    pub idempotency_key: String,
623    /// The `sequence` field.
624    pub sequence: i64,
625}
626
627/// Values of the `action` oneof in `WorkflowStep`; the message field is None when unset.
628#[allow(clippy::enum_variant_names, clippy::large_enum_variant)]
629#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
630pub enum WorkflowStepAction {
631    /// The `app` variant.
632    App(WorkflowStepAppCall),
633    /// The `agent` variant.
634    Agent(WorkflowStepAgentTurn),
635}
636
637/// Native message type for `gestalt.provider.v1.WorkflowStep`.
638#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
639#[serde(rename_all = "camelCase")]
640pub struct WorkflowStep {
641    /// The `id` field.
642    pub id: String,
643    /// The `inputs` field.
644    pub inputs: std::collections::BTreeMap<String, WorkflowValue>,
645    /// The `when` field; None when unset.
646    pub when: Option<WorkflowStepWhen>,
647    /// The `timeout_seconds` field.
648    pub timeout_seconds: i32,
649    /// The `metadata` field; None when unset.
650    pub metadata: Option<serde_json::Map<String, serde_json::Value>>,
651    /// The `action` oneof; None when unset.
652    pub action: Option<WorkflowStepAction>,
653}
654
655/// Native message type for `gestalt.provider.v1.WorkflowStepAgentTurn`.
656#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
657#[serde(rename_all = "camelCase")]
658pub struct WorkflowStepAgentTurn {
659    /// The `provider` field.
660    pub provider: String,
661    /// The `model` field.
662    pub model: String,
663    /// The `session_key` field.
664    pub session_key: String,
665    /// The `prompt` field; None when unset.
666    pub prompt: Option<WorkflowText>,
667    /// The `messages` field.
668    pub messages: Vec<WorkflowAgentMessage>,
669    /// The `tools` field.
670    pub tools: Vec<AgentToolRef>,
671    /// The `output` field; None when unset.
672    pub output: Option<AgentOutput>,
673    /// The `model_options` field; None when unset.
674    pub model_options: Option<serde_json::Map<String, serde_json::Value>>,
675}
676
677/// Native message type for `gestalt.provider.v1.WorkflowStepAppCall`.
678#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
679#[serde(rename_all = "camelCase")]
680pub struct WorkflowStepAppCall {
681    /// The `name` field.
682    pub name: String,
683    /// The `operation` field.
684    pub operation: String,
685    /// The `input` field; None when unset.
686    pub input: Option<WorkflowValue>,
687    /// The `connection` field.
688    pub connection: String,
689    /// The `instance` field.
690    pub instance: String,
691    /// The `credential_mode` field.
692    pub credential_mode: String,
693}
694
695/// Native message type for `gestalt.provider.v1.WorkflowStepAttempt`.
696#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
697#[serde(rename_all = "camelCase")]
698pub struct WorkflowStepAttempt {
699    /// The `id` field.
700    pub id: String,
701    /// The `status` field.
702    pub status: WorkflowStepStatus,
703    /// The `idempotency_key` field.
704    pub idempotency_key: String,
705    /// The `input` field; None when unset.
706    pub input: Option<serde_json::Value>,
707    /// The `output` field; None when unset.
708    pub output: Option<serde_json::Value>,
709    /// The `status_message` field.
710    pub status_message: String,
711    #[serde(with = "crate::serde_time")]
712    /// The `started_at` field; None when unset.
713    pub started_at: Option<std::time::SystemTime>,
714    #[serde(with = "crate::serde_time")]
715    /// The `completed_at` field; None when unset.
716    pub completed_at: Option<std::time::SystemTime>,
717}
718
719/// Native message type for `gestalt.provider.v1.WorkflowStepExecution`.
720#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
721#[serde(rename_all = "camelCase")]
722pub struct WorkflowStepExecution {
723    /// The `step_id` field.
724    pub step_id: String,
725    /// The `status` field.
726    pub status: WorkflowStepStatus,
727    /// The `attempts` field.
728    pub attempts: Vec<WorkflowStepAttempt>,
729    /// The `input` field; None when unset.
730    pub input: Option<serde_json::Value>,
731    /// The `output` field; None when unset.
732    pub output: Option<serde_json::Value>,
733    /// The `status_message` field.
734    pub status_message: String,
735    /// The `skip_reason` field.
736    pub skip_reason: String,
737    #[serde(with = "crate::serde_time")]
738    /// The `started_at` field; None when unset.
739    pub started_at: Option<std::time::SystemTime>,
740    #[serde(with = "crate::serde_time")]
741    /// The `completed_at` field; None when unset.
742    pub completed_at: Option<std::time::SystemTime>,
743}
744
745/// Native message type for `gestalt.provider.v1.WorkflowStepInputSource`.
746#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
747#[serde(rename_all = "camelCase")]
748pub struct WorkflowStepInputSource {
749    /// The `step_id` field.
750    pub step_id: String,
751    /// The `path` field.
752    pub path: String,
753}
754
755/// Native message type for `gestalt.provider.v1.WorkflowStepOutputSource`.
756#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
757#[serde(rename_all = "camelCase")]
758pub struct WorkflowStepOutputSource {
759    /// The `step_id` field.
760    pub step_id: String,
761    /// The `path` field.
762    pub path: String,
763}
764
765/// Native message type for `gestalt.provider.v1.WorkflowStepWhen`.
766#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
767#[serde(rename_all = "camelCase")]
768pub struct WorkflowStepWhen {
769    /// The `value` field; None when unset.
770    pub value: Option<WorkflowValue>,
771    /// The `equals` field; None when unset.
772    pub equals: Option<serde_json::Value>,
773}
774
775/// Native message type for `gestalt.provider.v1.WorkflowText`.
776#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
777#[serde(rename_all = "camelCase")]
778pub struct WorkflowText {
779    /// The `template` field.
780    pub template: String,
781}
782
783/// Values of the `kind` oneof in `WorkflowValue`; the message field is None when unset.
784#[allow(clippy::enum_variant_names, clippy::large_enum_variant)]
785#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
786pub enum WorkflowValueKind {
787    /// The `literal` variant.
788    Literal(serde_json::Value),
789    /// The `object` variant.
790    Object(WorkflowObject),
791    /// The `array` variant.
792    Array(WorkflowArray),
793    /// The `template` variant.
794    Template(WorkflowText),
795    /// The `input` variant.
796    Input(WorkflowPathSource),
797    /// The `signal` variant.
798    Signal(WorkflowPathSource),
799    /// The `step_output` variant.
800    StepOutput(WorkflowStepOutputSource),
801    /// The `step_input` variant.
802    StepInput(WorkflowStepInputSource),
803}
804
805/// Native message type for `gestalt.provider.v1.WorkflowValue`.
806#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)]
807#[serde(rename_all = "camelCase")]
808pub struct WorkflowValue {
809    /// The `kind` oneof; None when unset.
810    pub kind: Option<WorkflowValueKind>,
811}
812
813/// Client for the `gestalt.provider.v1.Workflow` service.
814pub struct Workflow {
815    inner: v1::workflow_client::WorkflowClient<HostServiceChannel>,
816    timeout: Option<std::time::Duration>,
817    context: Option<RequestContext>,
818}
819
820impl Workflow {
821    /// Creates a client over an established channel.
822    pub fn new(channel: tonic::transport::Channel) -> Self {
823        Self {
824            inner: v1::workflow_client::WorkflowClient::new(plain_channel(channel)),
825            timeout: None,
826            context: None,
827        }
828    }
829
830    /// Sets a deadline applied to every unary call; calls that run past it
831    /// fail with DEADLINE_EXCEEDED. Streaming calls are unaffected.
832    pub fn with_timeout(mut self, timeout: std::time::Duration) -> Self {
833        self.timeout = Some(timeout);
834        self
835    }
836
837    /// Sets the default request context, injected into outgoing requests
838    /// that do not carry one.
839    pub fn with_context(mut self, context: RequestContext) -> Self {
840        self.context = Some(context);
841        self
842    }
843
844    /// Connects to the `workflow` host service described by the environment.
845    pub async fn connect() -> Result<Self, GestaltError> {
846        Self::connect_named("").await
847    }
848
849    /// Connects to the named `workflow` host-service binding.
850    pub async fn connect_named(name: &str) -> Result<Self, GestaltError> {
851        Ok(Self {
852            inner: v1::workflow_client::WorkflowClient::new(
853                connect_host_service("workflow", name).await?,
854            ),
855            timeout: None,
856            context: None,
857        })
858    }
859
860    /// Calls `gestalt.provider.v1.Workflow.ApplyDefinition`.
861    pub async fn apply_definition(
862        &mut self,
863        provider: String,
864        idempotency_key: String,
865        spec: Option<WorkflowDefinitionSpec>,
866    ) -> Result<WorkflowDefinition, GestaltError> {
867        let request = ApplyWorkflowProviderDefinitionRequest {
868            provider,
869            idempotency_key,
870            spec,
871            context: self.context.clone(),
872        };
873        let mut tonic_request =
874            tonic::Request::new(to_wire_apply_workflow_provider_definition_request(request));
875        if let Some(timeout) = self.timeout {
876            tonic_request.set_timeout(timeout);
877        }
878        let response = self.inner.apply_definition(tonic_request).await?;
879        Ok(from_wire_workflow_definition(response.into_inner()))
880    }
881
882    /// Calls `gestalt.provider.v1.Workflow.ApplyDefinition` with the full request and response messages.
883    pub async fn apply_definition_raw(
884        &mut self,
885        request: ApplyWorkflowProviderDefinitionRequest,
886    ) -> Result<WorkflowDefinition, GestaltError> {
887        let mut request = request;
888        if request.context.is_none() {
889            request.context = self.context.clone();
890        }
891        let mut tonic_request =
892            tonic::Request::new(to_wire_apply_workflow_provider_definition_request(request));
893        if let Some(timeout) = self.timeout {
894            tonic_request.set_timeout(timeout);
895        }
896        let response = self.inner.apply_definition(tonic_request).await?;
897        Ok(from_wire_workflow_definition(response.into_inner()))
898    }
899
900    /// Calls `gestalt.provider.v1.Workflow.GetDefinition`.
901    pub async fn get_definition(
902        &mut self,
903        provider: String,
904        definition_id: String,
905    ) -> Result<WorkflowDefinition, GestaltError> {
906        let request = GetWorkflowProviderDefinitionRequest {
907            provider,
908            definition_id,
909            context: self.context.clone(),
910        };
911        let mut tonic_request =
912            tonic::Request::new(to_wire_get_workflow_provider_definition_request(request));
913        if let Some(timeout) = self.timeout {
914            tonic_request.set_timeout(timeout);
915        }
916        let response = self.inner.get_definition(tonic_request).await?;
917        Ok(from_wire_workflow_definition(response.into_inner()))
918    }
919
920    /// Calls `gestalt.provider.v1.Workflow.GetDefinition` with the full request and response messages.
921    pub async fn get_definition_raw(
922        &mut self,
923        request: GetWorkflowProviderDefinitionRequest,
924    ) -> Result<WorkflowDefinition, GestaltError> {
925        let mut request = request;
926        if request.context.is_none() {
927            request.context = self.context.clone();
928        }
929        let mut tonic_request =
930            tonic::Request::new(to_wire_get_workflow_provider_definition_request(request));
931        if let Some(timeout) = self.timeout {
932            tonic_request.set_timeout(timeout);
933        }
934        let response = self.inner.get_definition(tonic_request).await?;
935        Ok(from_wire_workflow_definition(response.into_inner()))
936    }
937
938    /// Calls `gestalt.provider.v1.Workflow.ListDefinitions`.
939    pub async fn list_definitions(
940        &mut self,
941        provider: String,
942    ) -> Result<Vec<WorkflowDefinition>, GestaltError> {
943        let request = ListWorkflowProviderDefinitionsRequest {
944            provider,
945            context: self.context.clone(),
946        };
947        let mut tonic_request =
948            tonic::Request::new(to_wire_list_workflow_provider_definitions_request(request));
949        if let Some(timeout) = self.timeout {
950            tonic_request.set_timeout(timeout);
951        }
952        let response = from_wire_list_workflow_provider_definitions_response(
953            self.inner
954                .list_definitions(tonic_request)
955                .await?
956                .into_inner(),
957        );
958        Ok(response.definitions)
959    }
960
961    /// Calls `gestalt.provider.v1.Workflow.ListDefinitions` with the full request and response messages.
962    pub async fn list_definitions_raw(
963        &mut self,
964        request: ListWorkflowProviderDefinitionsRequest,
965    ) -> Result<ListWorkflowProviderDefinitionsResponse, GestaltError> {
966        let mut request = request;
967        if request.context.is_none() {
968            request.context = self.context.clone();
969        }
970        let mut tonic_request =
971            tonic::Request::new(to_wire_list_workflow_provider_definitions_request(request));
972        if let Some(timeout) = self.timeout {
973            tonic_request.set_timeout(timeout);
974        }
975        let response = self.inner.list_definitions(tonic_request).await?;
976        Ok(from_wire_list_workflow_provider_definitions_response(
977            response.into_inner(),
978        ))
979    }
980
981    /// Calls `gestalt.provider.v1.Workflow.SetDefinitionPaused`.
982    pub async fn set_definition_paused(
983        &mut self,
984        provider: String,
985        definition_id: String,
986        paused: bool,
987    ) -> Result<WorkflowDefinition, GestaltError> {
988        let request = SetWorkflowProviderDefinitionPausedRequest {
989            provider,
990            definition_id,
991            paused,
992            context: self.context.clone(),
993        };
994        let mut tonic_request = tonic::Request::new(
995            to_wire_set_workflow_provider_definition_paused_request(request),
996        );
997        if let Some(timeout) = self.timeout {
998            tonic_request.set_timeout(timeout);
999        }
1000        let response = self.inner.set_definition_paused(tonic_request).await?;
1001        Ok(from_wire_workflow_definition(response.into_inner()))
1002    }
1003
1004    /// Calls `gestalt.provider.v1.Workflow.SetDefinitionPaused` with the full request and response messages.
1005    pub async fn set_definition_paused_raw(
1006        &mut self,
1007        request: SetWorkflowProviderDefinitionPausedRequest,
1008    ) -> Result<WorkflowDefinition, GestaltError> {
1009        let mut request = request;
1010        if request.context.is_none() {
1011            request.context = self.context.clone();
1012        }
1013        let mut tonic_request = tonic::Request::new(
1014            to_wire_set_workflow_provider_definition_paused_request(request),
1015        );
1016        if let Some(timeout) = self.timeout {
1017            tonic_request.set_timeout(timeout);
1018        }
1019        let response = self.inner.set_definition_paused(tonic_request).await?;
1020        Ok(from_wire_workflow_definition(response.into_inner()))
1021    }
1022
1023    /// Calls `gestalt.provider.v1.Workflow.SetActivationPaused`.
1024    pub async fn set_activation_paused(
1025        &mut self,
1026        provider: String,
1027        definition_id: String,
1028        activation_id: String,
1029        paused: bool,
1030    ) -> Result<WorkflowDefinition, GestaltError> {
1031        let request = SetWorkflowProviderActivationPausedRequest {
1032            provider,
1033            definition_id,
1034            activation_id,
1035            paused,
1036            context: self.context.clone(),
1037        };
1038        let mut tonic_request = tonic::Request::new(
1039            to_wire_set_workflow_provider_activation_paused_request(request),
1040        );
1041        if let Some(timeout) = self.timeout {
1042            tonic_request.set_timeout(timeout);
1043        }
1044        let response = self.inner.set_activation_paused(tonic_request).await?;
1045        Ok(from_wire_workflow_definition(response.into_inner()))
1046    }
1047
1048    /// Calls `gestalt.provider.v1.Workflow.SetActivationPaused` with the full request and response messages.
1049    pub async fn set_activation_paused_raw(
1050        &mut self,
1051        request: SetWorkflowProviderActivationPausedRequest,
1052    ) -> Result<WorkflowDefinition, GestaltError> {
1053        let mut request = request;
1054        if request.context.is_none() {
1055            request.context = self.context.clone();
1056        }
1057        let mut tonic_request = tonic::Request::new(
1058            to_wire_set_workflow_provider_activation_paused_request(request),
1059        );
1060        if let Some(timeout) = self.timeout {
1061            tonic_request.set_timeout(timeout);
1062        }
1063        let response = self.inner.set_activation_paused(tonic_request).await?;
1064        Ok(from_wire_workflow_definition(response.into_inner()))
1065    }
1066
1067    /// Calls `gestalt.provider.v1.Workflow.DeleteDefinition`.
1068    pub async fn delete_definition(
1069        &mut self,
1070        provider: String,
1071        definition_id: String,
1072    ) -> Result<(), GestaltError> {
1073        let request = DeleteWorkflowProviderDefinitionRequest {
1074            provider,
1075            definition_id,
1076            context: self.context.clone(),
1077        };
1078        let mut tonic_request =
1079            tonic::Request::new(to_wire_delete_workflow_provider_definition_request(request));
1080        if let Some(timeout) = self.timeout {
1081            tonic_request.set_timeout(timeout);
1082        }
1083        self.inner.delete_definition(tonic_request).await?;
1084        Ok(())
1085    }
1086
1087    /// Calls `gestalt.provider.v1.Workflow.DeleteDefinition` with the full request and response messages.
1088    pub async fn delete_definition_raw(
1089        &mut self,
1090        request: DeleteWorkflowProviderDefinitionRequest,
1091    ) -> Result<(), GestaltError> {
1092        let mut request = request;
1093        if request.context.is_none() {
1094            request.context = self.context.clone();
1095        }
1096        let mut tonic_request =
1097            tonic::Request::new(to_wire_delete_workflow_provider_definition_request(request));
1098        if let Some(timeout) = self.timeout {
1099            tonic_request.set_timeout(timeout);
1100        }
1101        self.inner.delete_definition(tonic_request).await?;
1102        Ok(())
1103    }
1104
1105    /// Calls `gestalt.provider.v1.Workflow.StartRun`.
1106    pub async fn start_run(
1107        &mut self,
1108        idempotency_key: String,
1109        workflow_key: String,
1110        provider: String,
1111        definition_id: String,
1112        expected_definition_generation: i64,
1113        input: Option<serde_json::Map<String, serde_json::Value>>,
1114    ) -> Result<WorkflowRun, GestaltError> {
1115        let request = StartWorkflowProviderRunRequest {
1116            idempotency_key,
1117            workflow_key,
1118            provider,
1119            definition_id,
1120            expected_definition_generation,
1121            input,
1122            context: self.context.clone(),
1123        };
1124        let mut tonic_request =
1125            tonic::Request::new(to_wire_start_workflow_provider_run_request(request));
1126        if let Some(timeout) = self.timeout {
1127            tonic_request.set_timeout(timeout);
1128        }
1129        let response = self.inner.start_run(tonic_request).await?;
1130        Ok(from_wire_workflow_run(response.into_inner()))
1131    }
1132
1133    /// Calls `gestalt.provider.v1.Workflow.StartRun` with the full request and response messages.
1134    pub async fn start_run_raw(
1135        &mut self,
1136        request: StartWorkflowProviderRunRequest,
1137    ) -> Result<WorkflowRun, GestaltError> {
1138        let mut request = request;
1139        if request.context.is_none() {
1140            request.context = self.context.clone();
1141        }
1142        let mut tonic_request =
1143            tonic::Request::new(to_wire_start_workflow_provider_run_request(request));
1144        if let Some(timeout) = self.timeout {
1145            tonic_request.set_timeout(timeout);
1146        }
1147        let response = self.inner.start_run(tonic_request).await?;
1148        Ok(from_wire_workflow_run(response.into_inner()))
1149    }
1150
1151    /// Calls `gestalt.provider.v1.Workflow.ListRuns`.
1152    pub async fn list_runs(
1153        &mut self,
1154        provider: String,
1155        page_size: i32,
1156        page_token: String,
1157        status: WorkflowRunStatus,
1158        target_app: String,
1159    ) -> Result<ListWorkflowProviderRunsResponse, GestaltError> {
1160        let request = ListWorkflowProviderRunsRequest {
1161            provider,
1162            page_size,
1163            page_token,
1164            status,
1165            target_app,
1166            context: self.context.clone(),
1167        };
1168        let mut tonic_request =
1169            tonic::Request::new(to_wire_list_workflow_provider_runs_request(request));
1170        if let Some(timeout) = self.timeout {
1171            tonic_request.set_timeout(timeout);
1172        }
1173        let response = self.inner.list_runs(tonic_request).await?;
1174        Ok(from_wire_list_workflow_provider_runs_response(
1175            response.into_inner(),
1176        ))
1177    }
1178
1179    /// Calls `gestalt.provider.v1.Workflow.ListRuns` with the full request and response messages.
1180    pub async fn list_runs_raw(
1181        &mut self,
1182        request: ListWorkflowProviderRunsRequest,
1183    ) -> Result<ListWorkflowProviderRunsResponse, GestaltError> {
1184        let mut request = request;
1185        if request.context.is_none() {
1186            request.context = self.context.clone();
1187        }
1188        let mut tonic_request =
1189            tonic::Request::new(to_wire_list_workflow_provider_runs_request(request));
1190        if let Some(timeout) = self.timeout {
1191            tonic_request.set_timeout(timeout);
1192        }
1193        let response = self.inner.list_runs(tonic_request).await?;
1194        Ok(from_wire_list_workflow_provider_runs_response(
1195            response.into_inner(),
1196        ))
1197    }
1198
1199    /// Calls `gestalt.provider.v1.Workflow.GetRun`.
1200    pub async fn get_run(
1201        &mut self,
1202        provider: String,
1203        run_id: String,
1204    ) -> Result<WorkflowRun, GestaltError> {
1205        let request = GetWorkflowProviderRunRequest {
1206            provider,
1207            run_id,
1208            context: self.context.clone(),
1209        };
1210        let mut tonic_request =
1211            tonic::Request::new(to_wire_get_workflow_provider_run_request(request));
1212        if let Some(timeout) = self.timeout {
1213            tonic_request.set_timeout(timeout);
1214        }
1215        let response = self.inner.get_run(tonic_request).await?;
1216        Ok(from_wire_workflow_run(response.into_inner()))
1217    }
1218
1219    /// Calls `gestalt.provider.v1.Workflow.GetRun` with the full request and response messages.
1220    pub async fn get_run_raw(
1221        &mut self,
1222        request: GetWorkflowProviderRunRequest,
1223    ) -> Result<WorkflowRun, GestaltError> {
1224        let mut request = request;
1225        if request.context.is_none() {
1226            request.context = self.context.clone();
1227        }
1228        let mut tonic_request =
1229            tonic::Request::new(to_wire_get_workflow_provider_run_request(request));
1230        if let Some(timeout) = self.timeout {
1231            tonic_request.set_timeout(timeout);
1232        }
1233        let response = self.inner.get_run(tonic_request).await?;
1234        Ok(from_wire_workflow_run(response.into_inner()))
1235    }
1236
1237    /// Calls `gestalt.provider.v1.Workflow.GetRunEvents`.
1238    pub async fn get_run_events(
1239        &mut self,
1240        provider: String,
1241        run_id: String,
1242    ) -> Result<Vec<WorkflowRunEvent>, GestaltError> {
1243        let request = GetWorkflowProviderRunEventsRequest {
1244            provider,
1245            run_id,
1246            context: self.context.clone(),
1247        };
1248        let mut tonic_request =
1249            tonic::Request::new(to_wire_get_workflow_provider_run_events_request(request));
1250        if let Some(timeout) = self.timeout {
1251            tonic_request.set_timeout(timeout);
1252        }
1253        let response = from_wire_get_workflow_provider_run_events_response(
1254            self.inner.get_run_events(tonic_request).await?.into_inner(),
1255        );
1256        Ok(response.events)
1257    }
1258
1259    /// Calls `gestalt.provider.v1.Workflow.GetRunEvents` with the full request and response messages.
1260    pub async fn get_run_events_raw(
1261        &mut self,
1262        request: GetWorkflowProviderRunEventsRequest,
1263    ) -> Result<GetWorkflowProviderRunEventsResponse, GestaltError> {
1264        let mut request = request;
1265        if request.context.is_none() {
1266            request.context = self.context.clone();
1267        }
1268        let mut tonic_request =
1269            tonic::Request::new(to_wire_get_workflow_provider_run_events_request(request));
1270        if let Some(timeout) = self.timeout {
1271            tonic_request.set_timeout(timeout);
1272        }
1273        let response = self.inner.get_run_events(tonic_request).await?;
1274        Ok(from_wire_get_workflow_provider_run_events_response(
1275            response.into_inner(),
1276        ))
1277    }
1278
1279    /// Calls `gestalt.provider.v1.Workflow.GetRunOutput`.
1280    pub async fn get_run_output(
1281        &mut self,
1282        provider: String,
1283        run_id: String,
1284    ) -> Result<Option<serde_json::Value>, GestaltError> {
1285        let request = GetWorkflowProviderRunOutputRequest {
1286            provider,
1287            run_id,
1288            context: self.context.clone(),
1289        };
1290        let mut tonic_request =
1291            tonic::Request::new(to_wire_get_workflow_provider_run_output_request(request));
1292        if let Some(timeout) = self.timeout {
1293            tonic_request.set_timeout(timeout);
1294        }
1295        let response = from_wire_get_workflow_provider_run_output_response(
1296            self.inner.get_run_output(tonic_request).await?.into_inner(),
1297        );
1298        Ok(response.output)
1299    }
1300
1301    /// Calls `gestalt.provider.v1.Workflow.GetRunOutput` with the full request and response messages.
1302    pub async fn get_run_output_raw(
1303        &mut self,
1304        request: GetWorkflowProviderRunOutputRequest,
1305    ) -> Result<GetWorkflowProviderRunOutputResponse, GestaltError> {
1306        let mut request = request;
1307        if request.context.is_none() {
1308            request.context = self.context.clone();
1309        }
1310        let mut tonic_request =
1311            tonic::Request::new(to_wire_get_workflow_provider_run_output_request(request));
1312        if let Some(timeout) = self.timeout {
1313            tonic_request.set_timeout(timeout);
1314        }
1315        let response = self.inner.get_run_output(tonic_request).await?;
1316        Ok(from_wire_get_workflow_provider_run_output_response(
1317            response.into_inner(),
1318        ))
1319    }
1320
1321    /// Calls `gestalt.provider.v1.Workflow.CancelRun`.
1322    pub async fn cancel_run(
1323        &mut self,
1324        provider: String,
1325        run_id: String,
1326        reason: String,
1327    ) -> Result<WorkflowRun, GestaltError> {
1328        let request = CancelWorkflowProviderRunRequest {
1329            provider,
1330            run_id,
1331            reason,
1332            context: self.context.clone(),
1333        };
1334        let mut tonic_request =
1335            tonic::Request::new(to_wire_cancel_workflow_provider_run_request(request));
1336        if let Some(timeout) = self.timeout {
1337            tonic_request.set_timeout(timeout);
1338        }
1339        let response = self.inner.cancel_run(tonic_request).await?;
1340        Ok(from_wire_workflow_run(response.into_inner()))
1341    }
1342
1343    /// Calls `gestalt.provider.v1.Workflow.CancelRun` with the full request and response messages.
1344    pub async fn cancel_run_raw(
1345        &mut self,
1346        request: CancelWorkflowProviderRunRequest,
1347    ) -> Result<WorkflowRun, GestaltError> {
1348        let mut request = request;
1349        if request.context.is_none() {
1350            request.context = self.context.clone();
1351        }
1352        let mut tonic_request =
1353            tonic::Request::new(to_wire_cancel_workflow_provider_run_request(request));
1354        if let Some(timeout) = self.timeout {
1355            tonic_request.set_timeout(timeout);
1356        }
1357        let response = self.inner.cancel_run(tonic_request).await?;
1358        Ok(from_wire_workflow_run(response.into_inner()))
1359    }
1360
1361    /// Calls `gestalt.provider.v1.Workflow.SignalRun`.
1362    pub async fn signal_run(
1363        &mut self,
1364        provider: String,
1365        run_id: String,
1366        signal: Option<WorkflowSignal>,
1367    ) -> Result<SignalWorkflowRunResponse, GestaltError> {
1368        let request = SignalWorkflowProviderRunRequest {
1369            provider,
1370            run_id,
1371            signal,
1372            context: self.context.clone(),
1373        };
1374        let mut tonic_request =
1375            tonic::Request::new(to_wire_signal_workflow_provider_run_request(request));
1376        if let Some(timeout) = self.timeout {
1377            tonic_request.set_timeout(timeout);
1378        }
1379        let response = self.inner.signal_run(tonic_request).await?;
1380        Ok(from_wire_signal_workflow_run_response(
1381            response.into_inner(),
1382        ))
1383    }
1384
1385    /// Calls `gestalt.provider.v1.Workflow.SignalRun` with the full request and response messages.
1386    pub async fn signal_run_raw(
1387        &mut self,
1388        request: SignalWorkflowProviderRunRequest,
1389    ) -> Result<SignalWorkflowRunResponse, GestaltError> {
1390        let mut request = request;
1391        if request.context.is_none() {
1392            request.context = self.context.clone();
1393        }
1394        let mut tonic_request =
1395            tonic::Request::new(to_wire_signal_workflow_provider_run_request(request));
1396        if let Some(timeout) = self.timeout {
1397            tonic_request.set_timeout(timeout);
1398        }
1399        let response = self.inner.signal_run(tonic_request).await?;
1400        Ok(from_wire_signal_workflow_run_response(
1401            response.into_inner(),
1402        ))
1403    }
1404
1405    /// Calls `gestalt.provider.v1.Workflow.SignalOrStartRun`.
1406    #[allow(clippy::too_many_arguments)]
1407    pub async fn signal_or_start_run(
1408        &mut self,
1409        workflow_key: String,
1410        idempotency_key: String,
1411        provider: String,
1412        definition_id: String,
1413        expected_definition_generation: i64,
1414        signal: Option<WorkflowSignal>,
1415        input: Option<serde_json::Map<String, serde_json::Value>>,
1416    ) -> Result<SignalWorkflowRunResponse, GestaltError> {
1417        let request = SignalOrStartWorkflowProviderRunRequest {
1418            workflow_key,
1419            idempotency_key,
1420            provider,
1421            definition_id,
1422            expected_definition_generation,
1423            signal,
1424            input,
1425            context: self.context.clone(),
1426        };
1427        let mut tonic_request = tonic::Request::new(
1428            to_wire_signal_or_start_workflow_provider_run_request(request),
1429        );
1430        if let Some(timeout) = self.timeout {
1431            tonic_request.set_timeout(timeout);
1432        }
1433        let response = self.inner.signal_or_start_run(tonic_request).await?;
1434        Ok(from_wire_signal_workflow_run_response(
1435            response.into_inner(),
1436        ))
1437    }
1438
1439    /// Calls `gestalt.provider.v1.Workflow.SignalOrStartRun` with the full request and response messages.
1440    pub async fn signal_or_start_run_raw(
1441        &mut self,
1442        request: SignalOrStartWorkflowProviderRunRequest,
1443    ) -> Result<SignalWorkflowRunResponse, GestaltError> {
1444        let mut request = request;
1445        if request.context.is_none() {
1446            request.context = self.context.clone();
1447        }
1448        let mut tonic_request = tonic::Request::new(
1449            to_wire_signal_or_start_workflow_provider_run_request(request),
1450        );
1451        if let Some(timeout) = self.timeout {
1452            tonic_request.set_timeout(timeout);
1453        }
1454        let response = self.inner.signal_or_start_run(tonic_request).await?;
1455        Ok(from_wire_signal_workflow_run_response(
1456            response.into_inner(),
1457        ))
1458    }
1459
1460    /// Calls `gestalt.provider.v1.Workflow.DeliverEvent`.
1461    pub async fn deliver_event(
1462        &mut self,
1463        provider: String,
1464        event: Option<WorkflowEvent>,
1465    ) -> Result<WorkflowEvent, GestaltError> {
1466        let request = DeliverWorkflowProviderEventRequest {
1467            provider,
1468            event,
1469            context: self.context.clone(),
1470        };
1471        let mut tonic_request =
1472            tonic::Request::new(to_wire_deliver_workflow_provider_event_request(request));
1473        if let Some(timeout) = self.timeout {
1474            tonic_request.set_timeout(timeout);
1475        }
1476        let response = self.inner.deliver_event(tonic_request).await?;
1477        Ok(from_wire_workflow_event(response.into_inner()))
1478    }
1479
1480    /// Calls `gestalt.provider.v1.Workflow.DeliverEvent` with the full request and response messages.
1481    pub async fn deliver_event_raw(
1482        &mut self,
1483        request: DeliverWorkflowProviderEventRequest,
1484    ) -> Result<WorkflowEvent, GestaltError> {
1485        let mut request = request;
1486        if request.context.is_none() {
1487            request.context = self.context.clone();
1488        }
1489        let mut tonic_request =
1490            tonic::Request::new(to_wire_deliver_workflow_provider_event_request(request));
1491        if let Some(timeout) = self.timeout {
1492            tonic_request.set_timeout(timeout);
1493        }
1494        let response = self.inner.deliver_event(tonic_request).await?;
1495        Ok(from_wire_workflow_event(response.into_inner()))
1496    }
1497}