4 releases (2 breaking)
new 0.5.0 | Oct 6, 2024 |
---|---|
0.4.0 | Sep 22, 2024 |
0.3.5 | Sep 16, 2024 |
0.3.4 | Sep 1, 2024 |
#502 in Game dev
494 downloads per month
65KB
1.5K
SLoC
Snurr
Create and run the process flow from a BPMN 2.0 file created by BPMN Editor demo. Add your own behavior with Rust code from a small API. Read the Snurr documentation and explore the tests folder for more examples.
NOTE: To view or edit BPMN files in your project you can use the BPMN Editor plugin in VS Code.
Example
BPMN diagram used in example.
Usage
[dependencies]
snurr = "0.5"
log = "0.4"
pretty_env_logger = "0.5"
use snurr::{Eventhandler, 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();
let bpmn = Process::new("example.bpmn")?;
let mut handler: Eventhandler<Counter> = Eventhandler::default();
handler.add_task("Count 1", |input| {
input.lock().unwrap().count += 1;
Ok(())
});
handler.add_gateway("equal to 3", |input| {
let result = if input.lock().unwrap().count == 3 {
"YES"
} else {
"NO"
};
vec![result]
});
let pr = bpmn.run(&handler, Counter::default())?;
println!("Result: {:?}", pr.result);
Ok(())
}
Output
If RUST_LOG=info is set when running example
INFO snurr::process::engine > Start: Begin process
INFO snurr::process::engine > SequenceFlow: count
INFO snurr::process::engine > Task: Count 1
INFO snurr::process::engine > SequenceFlow: control
INFO snurr::process::engine > Exclusive: equal to 3
INFO snurr::process::engine > SequenceFlow: NO
INFO snurr::process::engine > Task: Count 1
INFO snurr::process::engine > SequenceFlow: control
INFO snurr::process::engine > Exclusive: equal to 3
INFO snurr::process::engine > SequenceFlow: NO
INFO snurr::process::engine > Task: Count 1
INFO snurr::process::engine > SequenceFlow: control
INFO snurr::process::engine > Exclusive: equal to 3
INFO snurr::process::engine > SequenceFlow: YES
INFO snurr::process::engine > End: End process
Result: Counter { count: 3 }
Prepared sample
Run or copy the simple.rs in the examples folder
RUST_LOG=info cargo run --example simple
Dependencies
~1.5–2.4MB
~45K SLoC