zeebe_rs/process_instance/
cancel.rs

1use crate::Client;
2use crate::ClientError;
3use crate::proto;
4
5/// Initial state for the CancelProcessInstanceRequest builder pattern
6#[derive(Debug, Clone)]
7pub struct Initial;
8
9/// State indicating the process instance key has been set
10#[derive(Debug, Clone)]
11pub struct WithProcessInstance;
12
13/// Marker trait for CancelProcessInstanceRequest states
14pub trait CancelProcessInstanceState {}
15impl CancelProcessInstanceState for Initial {}
16impl CancelProcessInstanceState for WithProcessInstance {}
17
18/// Request to cancel a running process instance
19/// # Examples
20///
21/// ```ignore
22/// client
23///     .cancel_process_instance()
24///     .with_process_instance_key(123456)
25///     .send()
26///     .await?;
27/// ```
28///
29/// Errors:
30/// - NOT_FOUND: no process instance exists with the given key
31#[derive(Debug, Clone)]
32pub struct CancelProcessInstanceRequest<T: CancelProcessInstanceState> {
33    client: Client,
34    process_instance_key: i64,
35    operation_reference: Option<u64>,
36    _state: std::marker::PhantomData<T>,
37}
38
39impl<T: CancelProcessInstanceState> CancelProcessInstanceRequest<T> {
40    pub(crate) fn new(client: Client) -> CancelProcessInstanceRequest<Initial> {
41        CancelProcessInstanceRequest {
42            client,
43            process_instance_key: 0,
44            operation_reference: None,
45            _state: std::marker::PhantomData,
46        }
47    }
48
49    fn transition<NewState: CancelProcessInstanceState>(
50        self,
51    ) -> CancelProcessInstanceRequest<NewState> {
52        CancelProcessInstanceRequest {
53            client: self.client,
54            process_instance_key: self.process_instance_key,
55            operation_reference: self.operation_reference,
56            _state: std::marker::PhantomData,
57        }
58    }
59}
60
61impl CancelProcessInstanceRequest<Initial> {
62    /// Sets the process instance key identifying which instance to cancel
63    ///
64    /// # Arguments
65    ///
66    /// * `process_instance_key` - The unique key identifying the process instance to cancel
67    ///
68    /// # Returns
69    ///
70    /// A new CancelProcessInstanceRequest in the WithProcessInstance state
71    pub fn with_process_instance_key(
72        mut self,
73        process_instance_key: i64,
74    ) -> CancelProcessInstanceRequest<WithProcessInstance> {
75        self.process_instance_key = process_instance_key;
76        self.transition()
77    }
78}
79
80impl CancelProcessInstanceRequest<WithProcessInstance> {
81    /// Sends the process instance cancellation request to the Zeebe workflow engine
82    ///
83    /// # Returns
84    ///
85    /// A Result containing the CancelProcessInstanceResponse if successful, or a ClientError if not
86    pub async fn send(mut self) -> Result<CancelProcessInstanceResponse, ClientError> {
87        let res = self
88            .client
89            .gateway_client
90            .cancel_process_instance(proto::CancelProcessInstanceRequest {
91                process_instance_key: self.process_instance_key,
92                operation_reference: self.operation_reference,
93            })
94            .await?;
95
96        Ok(res.into_inner().into())
97    }
98
99    /// Sets a reference key for tracking this operation
100    ///
101    /// # Arguments
102    ///
103    /// * `operation_reference` - The reference key for tracking the operation
104    ///
105    /// # Returns
106    ///
107    /// The updated CancelProcessInstanceRequest with the operation reference set
108    pub fn with_operation_reference(mut self, operation_reference: u64) -> Self {
109        self.operation_reference = Some(operation_reference);
110        self
111    }
112}
113
114/// Empty response from canceling a process instance
115#[derive(Debug, Clone)]
116pub struct CancelProcessInstanceResponse {}
117
118impl From<proto::CancelProcessInstanceResponse> for CancelProcessInstanceResponse {
119    fn from(_value: proto::CancelProcessInstanceResponse) -> CancelProcessInstanceResponse {
120        CancelProcessInstanceResponse {}
121    }
122}