use std::sync::Arc;
use crate::shared::{
Identifiable,
geo::{Coordinate, Distance},
time::{Duration, Time},
};
#[derive(Debug, Default, Clone)]
pub struct Area {
pub index: u32,
pub id: Arc<str>,
pub name: Arc<str>,
pub normalized_name: Arc<str>,
}
impl Identifiable for Area {
fn id(&self) -> &str {
&self.id
}
fn name(&self) -> &str {
&self.name
}
fn normalized_name(&self) -> &str {
&self.normalized_name
}
}
#[derive(Debug, Default, Clone)]
pub enum LocationType {
#[default]
Stop,
Platform {
parent_station: Arc<str>,
platform_code: Arc<str>,
},
Station,
Entrance(Arc<str>),
Node,
Boarding,
}
#[derive(Debug, Default, Clone)]
pub struct Stop {
pub index: u32,
pub id: Arc<str>,
pub name: Arc<str>,
pub normalized_name: Arc<str>,
pub coordinate: Coordinate,
pub parent_index: Option<u32>,
}
impl Identifiable for Stop {
fn id(&self) -> &str {
&self.id
}
fn name(&self) -> &str {
&self.name
}
fn normalized_name(&self) -> &str {
&self.normalized_name
}
}
#[derive(Debug, Default, Clone)]
pub enum Timepoint {
#[default]
Approximate,
Exact,
}
#[derive(Debug, Default, Clone)]
pub enum StopAccessType {
#[default]
Regularly,
NoneAvailable,
AgencyArrange,
DriverArrange,
}
#[derive(Debug, Default, Clone)]
pub struct StopTime {
pub index: u32,
pub trip_idx: u32,
pub stop_idx: u32,
pub sequence: u32,
pub slice: Slice,
pub inner_idx: u32,
pub arrival_time: Time,
pub departure_time: Time,
pub headsign: Option<Arc<str>>,
pub distance_traveled: Option<Distance>,
pub pickup_type: StopAccessType,
pub drop_off_type: StopAccessType,
pub timepoint: Timepoint,
}
#[derive(Default, Debug, Clone, Copy)]
pub struct Slice {
pub start_idx: u32,
pub count: u32,
}
#[derive(Debug, Default, Clone)]
pub struct Transfer {
pub from_stop_idx: u32,
pub to_stop_idx: u32,
pub from_trip_idx: Option<u32>,
pub to_trip_idx: Option<u32>,
pub min_transfer_time: Option<Duration>,
}
#[derive(Debug, Default, Clone)]
pub struct Trip {
pub index: u32,
pub id: Arc<str>,
pub route_idx: u32,
pub raptor_route_idx: u32,
pub head_sign: Option<Arc<str>>,
pub short_name: Option<Arc<str>>,
}
#[derive(Debug, Default, Clone)]
pub struct Route {
pub index: u32,
pub id: Arc<str>,
pub agency_id: Arc<str>,
pub short_name: Option<Arc<str>>,
pub long_name: Option<Arc<str>>,
pub route_type: i32,
pub route_desc: Option<Arc<str>>,
}
#[derive(Debug, Default, Clone)]
pub struct Shape {
pub index: u32,
pub coordinate: Coordinate,
pub sequence: u32,
pub inner_idx: u32,
pub distance_traveled: Option<Distance>,
pub slice: Slice,
}
#[derive(Debug, Default, Clone)]
pub struct RaptorRoute {
pub index: u32,
pub route_idx: u32,
pub stops: Arc<[u32]>,
pub trips: Arc<[u32]>,
}