libpetri-core — Core Types for Coloured Time Petri Nets
This crate defines the structural model: places, tokens, transitions, arcs,
and timing constraints. It contains no execution logic — see
libpetri-runtime for that.
Concepts
| Type |
Description |
Place<T> |
Typed, named token container. Identity by name. |
Token<T> |
Immutable value + timestamp. |
Transition |
Consumes/produces tokens via arcs. Optional timing and priority. |
PetriNet |
Immutable net definition built via builder pattern. |
Arc Types
| Arc |
Module |
Semantics |
| Input |
[input] |
Consume tokens (one, exactly N, at least N, all) |
| Output |
[output] |
Produce tokens (single, AND-fork, XOR-split, timeout) |
| Inhibitor |
[arc] |
Block firing when place has tokens |
| Read |
[arc] |
Require token without consuming |
| Reset |
[arc] |
Clear all tokens from place on firing |
Timing Modes
Quick Example
use libpetri_core::place::Place;
use libpetri_core::token::Token;
use libpetri_core::transition::Transition;
use libpetri_core::petri_net::PetriNet;
use libpetri_core::input::one;
use libpetri_core::output::out_place;
use libpetri_core::action::fork;
use libpetri_core::timing::delayed;
let inbox = Place::<String>::new("inbox");
let outbox = Place::<String>::new("outbox");
let send = Transition::builder("send")
.input(one(&inbox))
.output(out_place(&outbox))
.timing(delayed(100))
.action(fork())
.build();
let net = PetriNet::builder("mailer")
.transition(send)
.build();
assert_eq!(net.transitions().len(), 1);