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