Expand description
§Snurr
Snurr can run the process flow from a Business Process Model and Notation (BPMN) 2.0 file created by https://demo.bpmn.io/new.
- Add your own behavior with Rust code from a small API. The wiring is already setup from the file.
- Easy to update the BPMN diagram with new Task and Gateways without the need to refactor your old code.
- The BPMN file is the actual design. Forget outdated documentation.
- Scaffold the initial BPMN diagram so you don’t have to do the boilerplate code.
- Contains no database.
- Single or multithreaded (opt in)
This is not a complete implementation of the BPMN 2.0 specification but intend to be a light weight subset of it.
§Example
§Cargo.toml
[dependencies]
snurr = "0.13"
log = "0.4"
pretty_env_logger = "0.5"§main.rs
use snurr::Process;
extern crate pretty_env_logger;
#[derive(Debug, Default)]
struct Counter {
count: u32,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
pretty_env_logger::init();
// Create process from BPMN file
let bpmn = Process::<Counter>::new("examples/example.bpmn")?
.task("Count 1", |input| {
input.lock().unwrap().count += 1;
None
})
.exclusive("equal to 3", |input| {
match input.lock().unwrap().count {
3 => "YES",
_ => "NO",
}
.into()
})
.build()?;
// Run the process with input data
let counter = bpmn.run(Counter::default())?;
// Print the result.
println!("Count: {}", counter.count);
Ok(())
}Structs§
- Build
- Process Build state
- Intermediate
Event - Event based gateway return type
- Process
- Process that contains information from the BPMN file
- Run
- Process Run state
Enums§
Type Aliases§
- Data
- Generic type for the task and gateway inputs.
- Result
- Task
Result - Task result type