Skip to main content

ranvier_core/
lib.rs

1/// Crate version, set at compile time from Cargo.toml.
2pub const VERSION: &str = env!("CARGO_PKG_VERSION");
3
4pub mod bus;
5pub mod cluster;
6pub mod config;
7pub mod debug;
8pub mod error;
9pub mod event;
10pub mod iam;
11pub mod metadata;
12pub mod never;
13pub mod outcome;
14pub mod policy;
15pub mod saga;
16pub mod schematic;
17pub mod static_gen;
18pub mod synapse;
19pub mod telemetry;
20pub mod tenant;
21pub mod timeline;
22pub mod transition;
23
24// NOTE: service module moved to ranvier-http (Discussion 190: Protocol-agnostic Core)
25// For Ingress adapters, use: ranvier_http
26
27// Static generation exports
28#[allow(deprecated)]
29pub use static_gen::{
30    StaticAxon, StaticBuildConfig, StaticBuildResult, StaticManifest, StaticNode, StaticStateEntry,
31    read_json_file, write_json_file,
32};
33
34// Prelude module for convenient imports
35pub mod prelude {
36    pub use crate::bus::{Bus, BusAccessError, BusAccessPolicy, BusTypeRef};
37    pub use crate::config::{RanvierConfig, ServerConfig, LoggingConfig, TlsConfig, InspectorConfig, TelemetryConfig, OtlpProtocol, LogFormat, ConfigError};
38    pub use crate::debug::{DebugControl, DebugState};
39    pub use crate::event::{DeadLetter, DlqPolicy, DlqReader, DlqSink, EventSink, EventSource};
40    pub use crate::iam::{
41        AuthContext, AuthScheme, IamError, IamHandle, IamIdentity, IamPolicy, IamToken,
42        IamVerifier,
43    };
44    pub use crate::metadata::StepMetadata;
45    pub use crate::outcome::{BranchId, NodeId, Outcome};
46    pub use crate::policy::{DynamicPolicy, PolicyRegistry};
47    pub use crate::saga::{SagaCompensationRegistry, SagaPolicy, SagaStack, SagaTask};
48    pub use crate::schematic::{Edge, EdgeType, Node, NodeKind, SchemaMigrationMapper, Schematic};
49    pub use crate::tenant::{IsolationPolicy, TenantExtractor, TenantId, TenantResolver};
50    pub use crate::timeline::{Timeline, TimelineEvent};
51    pub use crate::error::RanvierError;
52    pub use crate::never::Never;
53    pub use crate::transition::{ResourceRequirement, Transition};
54}
55
56// Legacy modules removed/deprecated
57// pub mod module;
58// pub mod circuit;
59// pub mod service; // Moved to ranvier-http
60
61pub use bus::{Bus, BusAccessError, BusAccessPolicy, BusTypeRef};
62pub use cluster::{ClusterBus, ClusterError, DistributedLock};
63pub use never::Never;
64pub use outcome::Outcome;
65pub use schematic::Schematic;
66pub use timeline::{Timeline, TimelineEvent};
67pub use transition::Transition;
68
69/// Build a `Bus` with optional resource inserts in one expression.
70///
71/// This macro is a helper for repetitive example/test wiring and does not
72/// change Bus boundary semantics: resources remain explicit values.
73#[macro_export]
74macro_rules! ranvier_bus {
75    () => {{
76        $crate::bus::Bus::new()
77    }};
78    ($($resource:expr),+ $(,)?) => {{
79        let mut __ranvier_bus = $crate::bus::Bus::new();
80        $(
81            __ranvier_bus.insert($resource);
82        )+
83        __ranvier_bus
84    }};
85}
86
87#[cfg(test)]
88mod macro_tests {
89    #[test]
90    fn ranvier_bus_macro_creates_empty_bus() {
91        let bus = crate::ranvier_bus!();
92        assert!(bus.is_empty());
93    }
94
95    #[test]
96    fn ranvier_bus_macro_inserts_multiple_resources() {
97        let bus = crate::ranvier_bus!(42i32, String::from("value"));
98        assert_eq!(*bus.read::<i32>().unwrap(), 42);
99        assert_eq!(bus.read::<String>().unwrap(), "value");
100    }
101}