use crate::records::*;
#[cfg_attr(feature = "debug", derive(Debug))]
#[derive(Default)]
pub struct Dataset {
pub agency: Vec<Agency>,
pub stops: Vec<Stops>,
pub routes: Vec<Routes>,
pub trips: Vec<Trips>,
pub stop_times: Vec<StopTimes>,
pub calendar: Option<Vec<Calendar>>,
pub calendar_dates: Option<Vec<CalendarDates>>,
pub fare_attributes: Option<Vec<FareAttributes>>,
pub fare_rules: Option<Vec<FareRules>>,
pub timeframes: Option<Vec<Timeframes>>,
pub fare_media: Option<Vec<FareMedia>>,
pub fare_products: Option<Vec<FareProducts>>,
pub fare_leg_rules: Option<Vec<FareLegRules>>,
pub fare_transfer_rules: Option<Vec<FareTransferRules>>,
pub areas: Option<Vec<Areas>>,
pub stop_areas: Option<Vec<StopAreas>>,
pub networks: Option<Vec<Networks>>,
pub route_networks: Option<Vec<RouteNetworks>>,
pub shapes: Option<Vec<Shapes>>,
pub frequencies: Option<Vec<Frequencies>>,
pub transfers: Option<Vec<Transfers>>,
pub pathways: Option<Vec<Pathways>>,
pub levels: Option<Vec<Levels>>,
pub location_groups: Option<Vec<LocationGroups>>,
pub location_group_stops: Option<Vec<LocationGroupStops>>,
pub booking_rules: Option<Vec<BookingRules>>,
pub translations: Option<Vec<Translations>>,
pub feed_info: Vec<FeedInfo>,
pub attributions: Option<Vec<Attributions>>,
}
#[cfg(feature = "from-dataset")]
use std::{convert::AsRef, path::Path};
#[cfg(feature = "from-dataset")]
use crate::parse::parse_csv;
#[cfg(feature = "from-dataset")]
impl Dataset {
pub fn read_from_path<T: AsRef<Path>>(dataset_path: T) -> Result<Self, &'static str> {
let dataset_path = dataset_path.as_ref();
Ok(Self {
agency: parse_csv(&dataset_path.join("agency.txt"))
.expect("File 'agency.txt' is required, but failed to parse"),
stops: parse_csv(&dataset_path.join("stops.txt"))
.expect("File 'stops.txt' is required, but failed to parse"),
routes: parse_csv(&dataset_path.join("routes.txt"))
.expect("File 'routes.txt' is required, but failed to parse"),
trips: parse_csv(&dataset_path.join("trips.txt"))
.expect("File 'trips.txt' is required, but failed to parse"),
stop_times: parse_csv(&dataset_path.join("stop_times.txt"))
.expect("File 'stop_times.txt' is required, but failed to parse"),
calendar: parse_csv(&dataset_path.join("calendar.txt")).ok(),
calendar_dates: parse_csv(&dataset_path.join("calendar_dates.txt")).ok(),
fare_attributes: parse_csv(&dataset_path.join("fare_attributes.txt")).ok(),
fare_rules: parse_csv(&dataset_path.join("fare_rules.txt")).ok(),
timeframes: parse_csv(&dataset_path.join("timeframes.txt")).ok(),
fare_media: parse_csv(&dataset_path.join("fare_media.txt")).ok(),
fare_products: parse_csv(&dataset_path.join("fare_products.txt")).ok(),
fare_leg_rules: parse_csv(&dataset_path.join("fare_leg_rules.txt")).ok(),
fare_transfer_rules: parse_csv(&dataset_path.join("fare_transfer_rules.txt")).ok(),
areas: parse_csv(&dataset_path.join("areas.txt")).ok(),
stop_areas: parse_csv(&dataset_path.join("stop_areas.txt")).ok(),
networks: parse_csv(&dataset_path.join("networks.txt")).ok(),
route_networks: parse_csv(&dataset_path.join("route_networks.txt")).ok(),
shapes: parse_csv(&dataset_path.join("shapes.txt")).ok(),
frequencies: parse_csv(&dataset_path.join("frequencies.txt")).ok(),
transfers: parse_csv(&dataset_path.join("transfers.txt")).ok(),
pathways: parse_csv(&dataset_path.join("pathways.txt")).ok(),
levels: parse_csv(&dataset_path.join("levels.txt")).ok(),
location_groups: parse_csv(&dataset_path.join("location_groups.txt")).ok(),
location_group_stops: parse_csv(&dataset_path.join("location_group_stops.txt")).ok(),
booking_rules: parse_csv(&dataset_path.join("booking_rules.txt")).ok(),
translations: parse_csv(&dataset_path.join("translations.txt")).ok(),
feed_info: parse_csv(&dataset_path.join("feed_info.txt"))
.expect("File 'feed_info.txt' is required, but failed to parse"),
attributions: parse_csv(&dataset_path.join("attributions.txt")).ok(),
})
}
}