Skip to main content

rustsim_mobility/
lib.rs

1//! Multi-modal mobility for rustsim.
2//!
3//! This crate is the *glue* layer that lets pedestrians, cyclists, cars,
4//! taxis, buses, trains, and lifts participate in the same simulation
5//! without any one domain crate having to know about the others.
6//!
7//! It provides:
8//!
9//! - [`leg`] — a trip broken into per-mode legs with waypoints in 2-D or
10//!   3-D.
11//! - [`mode_state`] — a deterministic state machine that advances a
12//!   traveller through their legs (walk → board → ride → alight → walk
13//!   → drive → park → walk → …).
14//! - [`obstacle`] — a shared [`Obstacle`] trait every domain can
15//!   implement, so crowd models can see vehicles and vehicles can see
16//!   crowd clusters.
17//! - [`router`] — a multi-modal Dijkstra over mode-tagged graphs, with
18//!   construction helpers for `rustsim-traffic` link metadata.
19//! - [`policy`] — cross-domain queue, dispatch, dwell, and control policy
20//!   contracts re-exported for multimodal orchestration.
21//!
22//! The crate is deliberately small and opinionated — it is *not* a full
23//! MATSim/SUMO replacement, it is the engineering contract that keeps
24//! domain crates decoupled while still allowing them to interact.
25
26#![deny(missing_docs)]
27
28pub mod leg;
29pub mod mode_state;
30pub mod obstacle;
31pub mod policy;
32pub mod router;
33
34pub use leg::{Leg, TripPlan, Waypoint};
35pub use mode_state::{ModeController, ModeState, TravellerContext};
36pub use obstacle::{Obstacle, ObstacleKind, ObstacleSnapshot, PedestrianObstacle, VehicleObstacle};
37pub use policy::{
38    board_with_policy, BoardingPolicy, CapacityStopQueuePolicy, ControlContext, ControlDecision,
39    ControlPolicy, DispatchContext, DispatchDecision, DispatchPolicy, DwellPolicy,
40    FifoBoardingPolicy, FifoGapPolicy, FixedControlPolicy, LinearDwellPolicy, QueuePolicy,
41    ScheduledDispatchPolicy, SpeedConstraint, SpeedDecision, StopQueuePolicy,
42};
43pub use router::{only, shortest_path, ModalEdge, ModalGraph, ModalGraphBuildError, ModalRoute};
44
45/// Convenience re-exports.
46pub mod prelude {
47    pub use crate::leg::{Leg, TripPlan, Waypoint};
48    pub use crate::mode_state::{ModeController, ModeState, TravellerContext};
49    pub use crate::obstacle::{
50        Obstacle, ObstacleKind, ObstacleSnapshot, PedestrianObstacle, VehicleObstacle,
51    };
52    pub use crate::policy::{
53        board_with_policy, BoardingPolicy, CapacityStopQueuePolicy, ControlContext,
54        ControlDecision, ControlPolicy, DispatchContext, DispatchDecision, DispatchPolicy,
55        DwellPolicy, FifoBoardingPolicy, FifoGapPolicy, FixedControlPolicy, LinearDwellPolicy,
56        QueuePolicy, ScheduledDispatchPolicy, SpeedConstraint, SpeedDecision, StopQueuePolicy,
57    };
58    pub use crate::router::{
59        only, shortest_path, ModalEdge, ModalGraph, ModalGraphBuildError, ModalRoute,
60    };
61    pub use rustsim_modes::TravelMode;
62}