use serde::{Deserialize, Serialize};
use std::cell::Cell;
use thiserror::Error;
use zeebe::{Client, Data, State};
#[derive(Error, Debug)]
enum MyError {}
#[derive(Deserialize)]
struct MyJobData {
increment: u32,
}
#[derive(Serialize)]
struct MyJobResult {
result: u32,
}
struct JobState {
total: Cell<u32>,
}
async fn handle_job(
job_data: Data<MyJobData>,
job_state: State<JobState>,
) -> Result<MyJobResult, MyError> {
let current_total = job_state.total.get();
let new_total = current_total + job_data.increment;
job_state.total.set(new_total);
Ok(MyJobResult { result: new_total })
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
let job_state = JobState {
total: Cell::new(0),
};
let _job = client
.job_worker()
.with_job_type("my-job-type")
.with_auto_handler(handle_job)
.with_state(job_state)
.run()
.await?;
Ok(())
}