Skip to main content

ranvier_core/
lib.rs

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
12// NOTE: service module moved to ranvier-http (Discussion 190: Protocol-agnostic Core)
13// For Ingress adapters, use: ranvier_http
14
15// Static generation exports
16pub use static_gen::{
17    StaticAxon, StaticBuildConfig, StaticBuildResult, StaticManifest, StaticNode, StaticStateEntry,
18    read_json_file, write_json_file,
19};
20
21// Prelude module for convenient imports
22pub 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
31// Legacy modules removed/deprecated
32// pub mod module;
33// pub mod circuit;
34// pub mod service; // Moved to ranvier-http
35
36pub use bus::{Bus, BusAccessError, BusAccessPolicy, BusTypeRef};
37pub use outcome::Outcome;
38pub use schematic::Schematic;
39pub use transition::Transition;
40
41/// Build a `Bus` with optional resource inserts in one expression.
42///
43/// This macro is a helper for repetitive example/test wiring and does not
44/// change Bus boundary semantics: resources remain explicit values.
45#[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}