rustsim-mobility 0.0.1

Multi-modal mobility glue for rustsim: leg-based trips, mode transitions, shared obstacle interfaces between crowds, vehicles, and transit
Documentation
//! Multi-modal mobility for rustsim.
//!
//! This crate is the *glue* layer that lets pedestrians, cyclists, cars,
//! taxis, buses, trains, and lifts participate in the same simulation
//! without any one domain crate having to know about the others.
//!
//! It provides:
//!
//! - [`leg`] — a trip broken into per-mode legs with waypoints in 2-D or
//!   3-D.
//! - [`mode_state`] — a deterministic state machine that advances a
//!   traveller through their legs (walk → board → ride → alight → walk
//!   → drive → park → walk → …).
//! - [`obstacle`] — a shared [`Obstacle`] trait every domain can
//!   implement, so crowd models can see vehicles and vehicles can see
//!   crowd clusters.
//! - [`router`] — a multi-modal Dijkstra over mode-tagged graphs, with
//!   construction helpers for `rustsim-traffic` link metadata.
//! - [`policy`] — cross-domain queue, dispatch, dwell, and control policy
//!   contracts re-exported for multimodal orchestration.
//!
//! The crate is deliberately small and opinionated — it is *not* a full
//! MATSim/SUMO replacement, it is the engineering contract that keeps
//! domain crates decoupled while still allowing them to interact.

#![deny(missing_docs)]

pub mod leg;
pub mod mode_state;
pub mod obstacle;
pub mod policy;
pub mod router;

pub use leg::{Leg, TripPlan, Waypoint};
pub use mode_state::{ModeController, ModeState, TravellerContext};
pub use obstacle::{Obstacle, ObstacleKind, ObstacleSnapshot, PedestrianObstacle, VehicleObstacle};
pub use policy::{
    board_with_policy, BoardingPolicy, CapacityStopQueuePolicy, ControlContext, ControlDecision,
    ControlPolicy, DispatchContext, DispatchDecision, DispatchPolicy, DwellPolicy,
    FifoBoardingPolicy, FifoGapPolicy, FixedControlPolicy, LinearDwellPolicy, QueuePolicy,
    ScheduledDispatchPolicy, SpeedConstraint, SpeedDecision, StopQueuePolicy,
};
pub use router::{only, shortest_path, ModalEdge, ModalGraph, ModalGraphBuildError, ModalRoute};

/// Convenience re-exports.
pub mod prelude {
    pub use crate::leg::{Leg, TripPlan, Waypoint};
    pub use crate::mode_state::{ModeController, ModeState, TravellerContext};
    pub use crate::obstacle::{
        Obstacle, ObstacleKind, ObstacleSnapshot, PedestrianObstacle, VehicleObstacle,
    };
    pub use crate::policy::{
        board_with_policy, BoardingPolicy, CapacityStopQueuePolicy, ControlContext,
        ControlDecision, ControlPolicy, DispatchContext, DispatchDecision, DispatchPolicy,
        DwellPolicy, FifoBoardingPolicy, FifoGapPolicy, FixedControlPolicy, LinearDwellPolicy,
        QueuePolicy, ScheduledDispatchPolicy, SpeedConstraint, SpeedDecision, StopQueuePolicy,
    };
    pub use crate::router::{
        only, shortest_path, ModalEdge, ModalGraph, ModalGraphBuildError, ModalRoute,
    };
    pub use rustsim_modes::TravelMode;
}