DeployResourceRequest

Struct DeployResourceRequest 

Source
pub struct DeployResourceRequest<T: DeployResourceState> { /* private fields */ }
Expand description

Request to deploy one or more resources to Zeebe

Supports:

  • BPMN process definitions
  • DMN decision tables
  • Custom forms

§Examples

let result = client
    .deploy_resource()
    .with_resource_file(PathBuf::from("./examples/resources/hello_world.bpmn"))
    .read_resource_files()?
    .send()
    .await?;

§Notes

  • Deployment is atomic - all resources succeed or none are deployed
  • Resources are validated before deployment

§Errors

  • PERMISSION_DENIED:
    • Deployment to unauthorized tenant
  • INVALID_ARGUMENT:
    • No resources provided
    • Invalid resource content (broken XML, invalid BPMN/DMN)
    • Missing/invalid tenant ID with multi-tenancy enabled
    • Tenant ID provided with multi-tenancy disabled

Implementations§

Source§

impl DeployResourceRequest<Initial>

Source

pub fn with_resource_file( self, file_path: PathBuf, ) -> DeployResourceRequest<WithFile>

Adds a single resource file to the deployment request.

This method allows you to specify a single resource file, such as a BPMN, DMN, or Form file, to be included in the deployment.

§Arguments
  • file_path - A PathBuf representing the path to the resource file.
§Returns

A DeployResourceRequest<WithFile> instance with the specified resource file added.

Examples found in repository?
examples/deploy_resource.rs (line 38)
17async fn main() -> Result<(), Box<dyn std::error::Error>> {
18    unsafe { std::env::set_var("RUST_BACKTRACE", "1") };
19
20    let client = zeebe_rs::Client::builder()
21        .with_address("http://localhost", 26500)
22        .with_oauth(
23            String::from("zeebe"),
24            String::from("zecret"),
25            String::from(
26                "http://localhost:18080/auth/realms/camunda-platform/protocol/openid-connect/token",
27            ),
28            String::from("zeebe-api"),
29            Duration::from_secs(30),
30            None,
31        )
32        .build()
33        .await?;
34
35    let _ = client.auth_initialized().await;
36    let result = client
37        .deploy_resource()
38        .with_resource_file(PathBuf::from("./examples/resources/hello_world.bpmn"))
39        .read_resource_files()?
40        .send()
41        .await?;
42
43    println!("{:?}", result);
44
45    let result = client
46        .publish_message()
47        .with_name(String::from("hello_world"))
48        .without_correlation_key()
49        .with_variables(HelloWorld {
50            hello: String::from("foo"),
51        })?
52        .send()
53        .await?;
54
55    println!("{:?}", result);
56
57    sleep(Duration::from_secs(1)).await;
58
59    let result = client
60        .publish_message()
61        .with_name(String::from("hello_message"))
62        .with_correlation_key(String::from("foo"))
63        .send()
64        .await?;
65
66    println!("{:?}", result);
67
68    Ok(())
69}
More examples
Hide additional examples
examples/pizza.rs (line 100)
73async fn main() -> Result<(), Box<dyn std::error::Error>> {
74    unsafe { std::env::set_var("RUST_BACKTRACE", "1") };
75
76    // Default configuration using Camunda's docker compose
77    // https://github.com/camunda/camunda-platform/blob/5dc74fe71667e18fbb5c8d4694068d662d83ad00/README.md
78    let client = Client::builder()
79        .with_address("http://localhost", 26500)
80        .with_oauth(
81            String::from("zeebe"),
82            String::from("zecret"),
83            String::from(
84                "http://localhost:18080/auth/realms/camunda-platform/protocol/openid-connect/token",
85            ),
86            String::from("zeebe-api"),
87            Duration::from_secs(30),
88            None,
89        )
90        .build()
91        .await?;
92
93    // Wait until first OAuth token has been retrieved
94    client.auth_initialized().await;
95
96    // Deploy our pizza ordering process
97    // We just discard the result for brevity
98    let deploy_resource_response = client
99        .deploy_resource()
100        .with_resource_file(PathBuf::from("examples/resources/pizza-order.bpmn"))
101        .read_resource_files()?
102        .send()
103        .await?;
104
105    let process_definition_key =
106        if let Some(deployment) = deploy_resource_response.deployments().first() {
107            match deployment.metadata() {
108                Some(metadata) => match metadata {
109                    zeebe_rs::Metadata::Process(process_metadata) => {
110                        process_metadata.process_definition_key()
111                    }
112                    _ => {
113                        unreachable!("We're only deploying a bpmn here");
114                    }
115                },
116                _ => -1,
117            }
118        } else {
119            -1
120        };
121
122    // Let's define our shared state, how much stock we have
123    let mut initial_stock = HashMap::new();
124    initial_stock.insert(String::from("Pepperoni"), 5);
125    initial_stock.insert(String::from("Margherita"), 8);
126    initial_stock.insert(String::from("Hawaiian"), 3);
127    initial_stock.insert(String::from("Quattro Formaggi"), 0);
128    initial_stock.insert(String::from("Vegetarian"), 6);
129
130    let stock = Arc::new(SharedState(Mutex::new(Stock {
131        items: initial_stock,
132    })));
133
134    // This will share the stock among all the workers confirming orders
135    // counting it down for each order.
136    let confirm_worker = client
137        .worker()
138        .with_request_timeout(Duration::from_secs(10))
139        .with_job_timeout(Duration::from_secs(10))
140        .with_max_jobs_to_activate(4)
141        .with_concurrency_limit(2)
142        .with_job_type(String::from("confirm_order"))
143        .with_state(stock)
144        .with_handler(confirm_order)
145        .with_fetch_variable(String::from("items"))
146        .build();
147
148    // We can reuse the worker builder for sharing some configurations
149    let base_worker = client
150        .worker()
151        .with_request_timeout(Duration::from_secs(10))
152        .with_job_timeout(Duration::from_secs(10));
153
154    let bake_worker = base_worker
155        .clone()
156        .with_max_jobs_to_activate(10)
157        .with_concurrency_limit(10)
158        .with_job_type(String::from("bake_pizzas"))
159        .with_handler(bake_pizzas)
160        .build();
161
162    // Handler can be both function callbacks or closures
163    // Handlers have to share return type for this to work
164    let reject_order_worker = client
165        .worker()
166        .with_request_timeout(Duration::from_secs(10))
167        .with_job_timeout(Duration::from_secs(10))
168        .with_max_jobs_to_activate(5)
169        .with_concurrency_limit(5)
170        .with_job_type(String::from("reject_order"))
171        .with_handler(|_client, _job| async move { Ok::<(), WorkerError<()>>(()) })
172        .build();
173
174    let deliver_worker = client
175        .worker()
176        .with_request_timeout(Duration::from_secs(10))
177        .with_job_timeout(Duration::from_secs(10))
178        .with_max_jobs_to_activate(1)
179        .with_concurrency_limit(1)
180        .with_job_type(String::from("deliver_order"))
181        .with_handler(deliver_order)
182        .build();
183
184    let clarify_address_worker = base_worker
185        .clone()
186        .with_max_jobs_to_activate(5)
187        .with_concurrency_limit(5)
188        .with_job_type(String::from("call_customer"))
189        .with_handler(|client, job| async move {
190            let mut customer = job.data::<Customer>().unwrap();
191
192            //Same guy keeps leaving out his address for some reason
193            customer.address = String::from("1337 Coolsville, USA");
194            if let Ok(req) = client
195                .complete_job()
196                .with_job_key(job.key())
197                .with_variables(customer)
198            {
199                let _ = req.send().await;
200            }
201        })
202        .build();
203
204    tokio::spawn(place_order(
205        client.clone(),
206        process_definition_key,
207        "Jane Doe",
208        "100 Coolsville, USA",
209        true,
210        vec!["Pepperoni"],
211    ));
212
213    tokio::spawn(place_order(
214        client.clone(),
215        process_definition_key,
216        "John Doe",
217        "999 NotCoolsville, USA",
218        false,
219        vec!["Quattro Formaggi"; 100],
220    ));
221
222    tokio::spawn(place_order(
223        client.clone(),
224        process_definition_key,
225        "Lorem Ipsum",
226        "",
227        false,
228        vec!["Hawaiian", "Pepperoni"],
229    ));
230
231    tokio::spawn(place_order(
232        client.clone(),
233        process_definition_key,
234        "George W Bush",
235        "White House",
236        true,
237        vec!["Burger"],
238    ));
239
240    let _ = tokio::join!(
241        confirm_worker.run(),
242        reject_order_worker.run(),
243        bake_worker.run(),
244        deliver_worker.run(),
245        clarify_address_worker.run(),
246    );
247
248    Ok(())
249}
Source

pub fn with_resource_files( self, file_paths: Vec<PathBuf>, ) -> DeployResourceRequest<WithFile>

Adds multiple resource files to the deployment request.

This method allows you to specify multiple resource files, such as BPMN, DMN, or Form files, to be included in the deployment.

§Arguments
  • file_paths - A Vec<PathBuf> containing the paths to the resource files.
§Returns

A DeployResourceRequest<WithFile> instance with the specified resource files added.

Source

pub fn with_definition( self, name: String, definition: Vec<u8>, ) -> DeployResourceRequest<WithDefinition>

Adds a single resource definition to the deployment request.

This method allows you to specify a single resource definition, including its name and raw content bytes, to be included in the deployment.

§Arguments
  • name - A String representing the resource name (e.g., process.bpmn).
  • definition - A Vec<u8> containing the raw content bytes of the resource.
§Returns

A DeployResourceRequest<WithDefinition> instance with the specified resource definition added.

Source

pub fn with_definitions( self, definitions: Vec<(String, Vec<u8>)>, ) -> DeployResourceRequest<WithDefinition>

Adds multiple resource definitions to the deployment request.

This method allows you to specify multiple resource definitions, each including its name and raw content bytes, to be included in the deployment.

§Arguments
  • definitions - A Vec<(String, Vec<u8>)> containing pairs of resource names and their raw content bytes.
§Returns

A DeployResourceRequest<WithDefinition> instance with the specified resource definitions added.

Source§

impl DeployResourceRequest<WithFile>

Source

pub fn read_resource_files( self, ) -> Result<DeployResourceRequest<WithDefinition>, ClientError>

Reads resource files and transitions to definition state

§Errors
  • ResourceLoad: Failed to read file
  • MissingName: File name missing
Examples found in repository?
examples/deploy_resource.rs (line 39)
17async fn main() -> Result<(), Box<dyn std::error::Error>> {
18    unsafe { std::env::set_var("RUST_BACKTRACE", "1") };
19
20    let client = zeebe_rs::Client::builder()
21        .with_address("http://localhost", 26500)
22        .with_oauth(
23            String::from("zeebe"),
24            String::from("zecret"),
25            String::from(
26                "http://localhost:18080/auth/realms/camunda-platform/protocol/openid-connect/token",
27            ),
28            String::from("zeebe-api"),
29            Duration::from_secs(30),
30            None,
31        )
32        .build()
33        .await?;
34
35    let _ = client.auth_initialized().await;
36    let result = client
37        .deploy_resource()
38        .with_resource_file(PathBuf::from("./examples/resources/hello_world.bpmn"))
39        .read_resource_files()?
40        .send()
41        .await?;
42
43    println!("{:?}", result);
44
45    let result = client
46        .publish_message()
47        .with_name(String::from("hello_world"))
48        .without_correlation_key()
49        .with_variables(HelloWorld {
50            hello: String::from("foo"),
51        })?
52        .send()
53        .await?;
54
55    println!("{:?}", result);
56
57    sleep(Duration::from_secs(1)).await;
58
59    let result = client
60        .publish_message()
61        .with_name(String::from("hello_message"))
62        .with_correlation_key(String::from("foo"))
63        .send()
64        .await?;
65
66    println!("{:?}", result);
67
68    Ok(())
69}
More examples
Hide additional examples
examples/pizza.rs (line 101)
73async fn main() -> Result<(), Box<dyn std::error::Error>> {
74    unsafe { std::env::set_var("RUST_BACKTRACE", "1") };
75
76    // Default configuration using Camunda's docker compose
77    // https://github.com/camunda/camunda-platform/blob/5dc74fe71667e18fbb5c8d4694068d662d83ad00/README.md
78    let client = Client::builder()
79        .with_address("http://localhost", 26500)
80        .with_oauth(
81            String::from("zeebe"),
82            String::from("zecret"),
83            String::from(
84                "http://localhost:18080/auth/realms/camunda-platform/protocol/openid-connect/token",
85            ),
86            String::from("zeebe-api"),
87            Duration::from_secs(30),
88            None,
89        )
90        .build()
91        .await?;
92
93    // Wait until first OAuth token has been retrieved
94    client.auth_initialized().await;
95
96    // Deploy our pizza ordering process
97    // We just discard the result for brevity
98    let deploy_resource_response = client
99        .deploy_resource()
100        .with_resource_file(PathBuf::from("examples/resources/pizza-order.bpmn"))
101        .read_resource_files()?
102        .send()
103        .await?;
104
105    let process_definition_key =
106        if let Some(deployment) = deploy_resource_response.deployments().first() {
107            match deployment.metadata() {
108                Some(metadata) => match metadata {
109                    zeebe_rs::Metadata::Process(process_metadata) => {
110                        process_metadata.process_definition_key()
111                    }
112                    _ => {
113                        unreachable!("We're only deploying a bpmn here");
114                    }
115                },
116                _ => -1,
117            }
118        } else {
119            -1
120        };
121
122    // Let's define our shared state, how much stock we have
123    let mut initial_stock = HashMap::new();
124    initial_stock.insert(String::from("Pepperoni"), 5);
125    initial_stock.insert(String::from("Margherita"), 8);
126    initial_stock.insert(String::from("Hawaiian"), 3);
127    initial_stock.insert(String::from("Quattro Formaggi"), 0);
128    initial_stock.insert(String::from("Vegetarian"), 6);
129
130    let stock = Arc::new(SharedState(Mutex::new(Stock {
131        items: initial_stock,
132    })));
133
134    // This will share the stock among all the workers confirming orders
135    // counting it down for each order.
136    let confirm_worker = client
137        .worker()
138        .with_request_timeout(Duration::from_secs(10))
139        .with_job_timeout(Duration::from_secs(10))
140        .with_max_jobs_to_activate(4)
141        .with_concurrency_limit(2)
142        .with_job_type(String::from("confirm_order"))
143        .with_state(stock)
144        .with_handler(confirm_order)
145        .with_fetch_variable(String::from("items"))
146        .build();
147
148    // We can reuse the worker builder for sharing some configurations
149    let base_worker = client
150        .worker()
151        .with_request_timeout(Duration::from_secs(10))
152        .with_job_timeout(Duration::from_secs(10));
153
154    let bake_worker = base_worker
155        .clone()
156        .with_max_jobs_to_activate(10)
157        .with_concurrency_limit(10)
158        .with_job_type(String::from("bake_pizzas"))
159        .with_handler(bake_pizzas)
160        .build();
161
162    // Handler can be both function callbacks or closures
163    // Handlers have to share return type for this to work
164    let reject_order_worker = client
165        .worker()
166        .with_request_timeout(Duration::from_secs(10))
167        .with_job_timeout(Duration::from_secs(10))
168        .with_max_jobs_to_activate(5)
169        .with_concurrency_limit(5)
170        .with_job_type(String::from("reject_order"))
171        .with_handler(|_client, _job| async move { Ok::<(), WorkerError<()>>(()) })
172        .build();
173
174    let deliver_worker = client
175        .worker()
176        .with_request_timeout(Duration::from_secs(10))
177        .with_job_timeout(Duration::from_secs(10))
178        .with_max_jobs_to_activate(1)
179        .with_concurrency_limit(1)
180        .with_job_type(String::from("deliver_order"))
181        .with_handler(deliver_order)
182        .build();
183
184    let clarify_address_worker = base_worker
185        .clone()
186        .with_max_jobs_to_activate(5)
187        .with_concurrency_limit(5)
188        .with_job_type(String::from("call_customer"))
189        .with_handler(|client, job| async move {
190            let mut customer = job.data::<Customer>().unwrap();
191
192            //Same guy keeps leaving out his address for some reason
193            customer.address = String::from("1337 Coolsville, USA");
194            if let Ok(req) = client
195                .complete_job()
196                .with_job_key(job.key())
197                .with_variables(customer)
198            {
199                let _ = req.send().await;
200            }
201        })
202        .build();
203
204    tokio::spawn(place_order(
205        client.clone(),
206        process_definition_key,
207        "Jane Doe",
208        "100 Coolsville, USA",
209        true,
210        vec!["Pepperoni"],
211    ));
212
213    tokio::spawn(place_order(
214        client.clone(),
215        process_definition_key,
216        "John Doe",
217        "999 NotCoolsville, USA",
218        false,
219        vec!["Quattro Formaggi"; 100],
220    ));
221
222    tokio::spawn(place_order(
223        client.clone(),
224        process_definition_key,
225        "Lorem Ipsum",
226        "",
227        false,
228        vec!["Hawaiian", "Pepperoni"],
229    ));
230
231    tokio::spawn(place_order(
232        client.clone(),
233        process_definition_key,
234        "George W Bush",
235        "White House",
236        true,
237        vec!["Burger"],
238    ));
239
240    let _ = tokio::join!(
241        confirm_worker.run(),
242        reject_order_worker.run(),
243        bake_worker.run(),
244        deliver_worker.run(),
245        clarify_address_worker.run(),
246    );
247
248    Ok(())
249}
Source§

impl DeployResourceRequest<WithDefinition>

Source

pub fn with_tenant( self, tenant_id: String, ) -> DeployResourceRequest<WithDefinition>

Sets the tenant ID that will own the deployed resources.

§Arguments
  • tenant_id - A String representing the ID of the tenant that will own these resources.
§Notes
  • This field is required when multi-tenancy is enabled.
  • This field must not be set when multi-tenancy is disabled.
Source

pub async fn send(self) -> Result<DeployResourceResponse, ClientError>

Sends the deploy resource request to the gateway.

§Returns

A Result containing:

  • Ok(DeployResourceResponse) on success, which includes:
    • Deployment key
    • List of deployed resources with metadata
    • Tenant ID
  • Err(ClientError) on failure, with possible errors:
    • PERMISSION_DENIED: Deployment to an unauthorized tenant.
    • INVALID_ARGUMENT:
      • No resources provided.
      • Invalid resource content.
      • Missing or invalid tenant ID when multi-tenancy is enabled.
      • Tenant ID provided when multi-tenancy is disabled.
§Errors

This function will return an error if the request fails due to permission issues or invalid arguments.

Examples found in repository?
examples/deploy_resource.rs (line 40)
17async fn main() -> Result<(), Box<dyn std::error::Error>> {
18    unsafe { std::env::set_var("RUST_BACKTRACE", "1") };
19
20    let client = zeebe_rs::Client::builder()
21        .with_address("http://localhost", 26500)
22        .with_oauth(
23            String::from("zeebe"),
24            String::from("zecret"),
25            String::from(
26                "http://localhost:18080/auth/realms/camunda-platform/protocol/openid-connect/token",
27            ),
28            String::from("zeebe-api"),
29            Duration::from_secs(30),
30            None,
31        )
32        .build()
33        .await?;
34
35    let _ = client.auth_initialized().await;
36    let result = client
37        .deploy_resource()
38        .with_resource_file(PathBuf::from("./examples/resources/hello_world.bpmn"))
39        .read_resource_files()?
40        .send()
41        .await?;
42
43    println!("{:?}", result);
44
45    let result = client
46        .publish_message()
47        .with_name(String::from("hello_world"))
48        .without_correlation_key()
49        .with_variables(HelloWorld {
50            hello: String::from("foo"),
51        })?
52        .send()
53        .await?;
54
55    println!("{:?}", result);
56
57    sleep(Duration::from_secs(1)).await;
58
59    let result = client
60        .publish_message()
61        .with_name(String::from("hello_message"))
62        .with_correlation_key(String::from("foo"))
63        .send()
64        .await?;
65
66    println!("{:?}", result);
67
68    Ok(())
69}
More examples
Hide additional examples
examples/pizza.rs (line 102)
73async fn main() -> Result<(), Box<dyn std::error::Error>> {
74    unsafe { std::env::set_var("RUST_BACKTRACE", "1") };
75
76    // Default configuration using Camunda's docker compose
77    // https://github.com/camunda/camunda-platform/blob/5dc74fe71667e18fbb5c8d4694068d662d83ad00/README.md
78    let client = Client::builder()
79        .with_address("http://localhost", 26500)
80        .with_oauth(
81            String::from("zeebe"),
82            String::from("zecret"),
83            String::from(
84                "http://localhost:18080/auth/realms/camunda-platform/protocol/openid-connect/token",
85            ),
86            String::from("zeebe-api"),
87            Duration::from_secs(30),
88            None,
89        )
90        .build()
91        .await?;
92
93    // Wait until first OAuth token has been retrieved
94    client.auth_initialized().await;
95
96    // Deploy our pizza ordering process
97    // We just discard the result for brevity
98    let deploy_resource_response = client
99        .deploy_resource()
100        .with_resource_file(PathBuf::from("examples/resources/pizza-order.bpmn"))
101        .read_resource_files()?
102        .send()
103        .await?;
104
105    let process_definition_key =
106        if let Some(deployment) = deploy_resource_response.deployments().first() {
107            match deployment.metadata() {
108                Some(metadata) => match metadata {
109                    zeebe_rs::Metadata::Process(process_metadata) => {
110                        process_metadata.process_definition_key()
111                    }
112                    _ => {
113                        unreachable!("We're only deploying a bpmn here");
114                    }
115                },
116                _ => -1,
117            }
118        } else {
119            -1
120        };
121
122    // Let's define our shared state, how much stock we have
123    let mut initial_stock = HashMap::new();
124    initial_stock.insert(String::from("Pepperoni"), 5);
125    initial_stock.insert(String::from("Margherita"), 8);
126    initial_stock.insert(String::from("Hawaiian"), 3);
127    initial_stock.insert(String::from("Quattro Formaggi"), 0);
128    initial_stock.insert(String::from("Vegetarian"), 6);
129
130    let stock = Arc::new(SharedState(Mutex::new(Stock {
131        items: initial_stock,
132    })));
133
134    // This will share the stock among all the workers confirming orders
135    // counting it down for each order.
136    let confirm_worker = client
137        .worker()
138        .with_request_timeout(Duration::from_secs(10))
139        .with_job_timeout(Duration::from_secs(10))
140        .with_max_jobs_to_activate(4)
141        .with_concurrency_limit(2)
142        .with_job_type(String::from("confirm_order"))
143        .with_state(stock)
144        .with_handler(confirm_order)
145        .with_fetch_variable(String::from("items"))
146        .build();
147
148    // We can reuse the worker builder for sharing some configurations
149    let base_worker = client
150        .worker()
151        .with_request_timeout(Duration::from_secs(10))
152        .with_job_timeout(Duration::from_secs(10));
153
154    let bake_worker = base_worker
155        .clone()
156        .with_max_jobs_to_activate(10)
157        .with_concurrency_limit(10)
158        .with_job_type(String::from("bake_pizzas"))
159        .with_handler(bake_pizzas)
160        .build();
161
162    // Handler can be both function callbacks or closures
163    // Handlers have to share return type for this to work
164    let reject_order_worker = client
165        .worker()
166        .with_request_timeout(Duration::from_secs(10))
167        .with_job_timeout(Duration::from_secs(10))
168        .with_max_jobs_to_activate(5)
169        .with_concurrency_limit(5)
170        .with_job_type(String::from("reject_order"))
171        .with_handler(|_client, _job| async move { Ok::<(), WorkerError<()>>(()) })
172        .build();
173
174    let deliver_worker = client
175        .worker()
176        .with_request_timeout(Duration::from_secs(10))
177        .with_job_timeout(Duration::from_secs(10))
178        .with_max_jobs_to_activate(1)
179        .with_concurrency_limit(1)
180        .with_job_type(String::from("deliver_order"))
181        .with_handler(deliver_order)
182        .build();
183
184    let clarify_address_worker = base_worker
185        .clone()
186        .with_max_jobs_to_activate(5)
187        .with_concurrency_limit(5)
188        .with_job_type(String::from("call_customer"))
189        .with_handler(|client, job| async move {
190            let mut customer = job.data::<Customer>().unwrap();
191
192            //Same guy keeps leaving out his address for some reason
193            customer.address = String::from("1337 Coolsville, USA");
194            if let Ok(req) = client
195                .complete_job()
196                .with_job_key(job.key())
197                .with_variables(customer)
198            {
199                let _ = req.send().await;
200            }
201        })
202        .build();
203
204    tokio::spawn(place_order(
205        client.clone(),
206        process_definition_key,
207        "Jane Doe",
208        "100 Coolsville, USA",
209        true,
210        vec!["Pepperoni"],
211    ));
212
213    tokio::spawn(place_order(
214        client.clone(),
215        process_definition_key,
216        "John Doe",
217        "999 NotCoolsville, USA",
218        false,
219        vec!["Quattro Formaggi"; 100],
220    ));
221
222    tokio::spawn(place_order(
223        client.clone(),
224        process_definition_key,
225        "Lorem Ipsum",
226        "",
227        false,
228        vec!["Hawaiian", "Pepperoni"],
229    ));
230
231    tokio::spawn(place_order(
232        client.clone(),
233        process_definition_key,
234        "George W Bush",
235        "White House",
236        true,
237        vec!["Burger"],
238    ));
239
240    let _ = tokio::join!(
241        confirm_worker.run(),
242        reject_order_worker.run(),
243        bake_worker.run(),
244        deliver_worker.run(),
245        clarify_address_worker.run(),
246    );
247
248    Ok(())
249}

Trait Implementations§

Source§

impl<T: Debug + DeployResourceState> Debug for DeployResourceRequest<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> !Freeze for DeployResourceRequest<T>

§

impl<T> !RefUnwindSafe for DeployResourceRequest<T>

§

impl<T> Send for DeployResourceRequest<T>
where T: Send,

§

impl<T> Sync for DeployResourceRequest<T>
where T: Sync,

§

impl<T> Unpin for DeployResourceRequest<T>
where T: Unpin,

§

impl<T> !UnwindSafe for DeployResourceRequest<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,