1pub mod bus;
2pub mod event;
3pub mod metadata;
4pub mod outcome;
5pub mod schematic;
6pub mod static_gen;
7pub mod synapse;
8pub mod telemetry;
9pub mod timeline;
10pub mod transition;
11
12pub use static_gen::{
17 StaticAxon, StaticBuildConfig, StaticBuildResult, StaticManifest, StaticNode, StaticStateEntry,
18 read_json_file, write_json_file,
19};
20
21pub mod prelude {
23 pub use crate::bus::{Bus, BusAccessError, BusAccessPolicy, BusTypeRef};
24 pub use crate::event::{EventSink, EventSource};
25 pub use crate::metadata::StepMetadata;
26 pub use crate::outcome::{BranchId, NodeId, Outcome};
27 pub use crate::schematic::{Edge, Node, NodeKind, Schematic};
28 pub use crate::transition::Transition;
29}
30
31pub use bus::{Bus, BusAccessError, BusAccessPolicy, BusTypeRef};
37pub use outcome::Outcome;
38pub use schematic::Schematic;
39pub use transition::Transition;
40
41#[macro_export]
46macro_rules! ranvier_bus {
47 () => {{
48 $crate::bus::Bus::new()
49 }};
50 ($($resource:expr),+ $(,)?) => {{
51 let mut __ranvier_bus = $crate::bus::Bus::new();
52 $(
53 __ranvier_bus.insert($resource);
54 )+
55 __ranvier_bus
56 }};
57}
58
59#[cfg(test)]
60mod macro_tests {
61 #[test]
62 fn ranvier_bus_macro_creates_empty_bus() {
63 let bus = crate::ranvier_bus!();
64 assert!(bus.is_empty());
65 }
66
67 #[test]
68 fn ranvier_bus_macro_inserts_multiple_resources() {
69 let bus = crate::ranvier_bus!(42i32, String::from("value"));
70 assert_eq!(*bus.read::<i32>().unwrap(), 42);
71 assert_eq!(bus.read::<String>().unwrap(), "value");
72 }
73}