gistools/readers/gtfs/schedule/
fare_media.rs1use crate::readers::csv::parse_csv_as_record;
2use alloc::{collections::BTreeMap, string::String};
3use s2json::MValueCompatible;
4
5#[derive(Debug, Clone, Copy, PartialEq)]
12pub enum GTFSFareMediaType {
13 None = 0,
15 PhysicalPaperTicket = 1,
17 PhysicalTransitCard = 2,
19 CEMV = 3,
21 MobileApp = 4,
23}
24impl From<u8> for GTFSFareMediaType {
25 fn from(value: u8) -> Self {
26 match value {
27 1 => GTFSFareMediaType::PhysicalPaperTicket,
28 2 => GTFSFareMediaType::PhysicalTransitCard,
29 3 => GTFSFareMediaType::CEMV,
30 4 => GTFSFareMediaType::MobileApp,
31 _ => GTFSFareMediaType::None,
32 }
33 }
34}
35
36#[derive(Debug, Default, Clone, PartialEq, MValueCompatible)]
41pub struct GTFSFareMedia {
42 pub fare_media_id: String,
45 pub fare_media_name: Option<String>,
48 pub fare_media_type: u8,
56}
57impl GTFSFareMedia {
58 pub fn new(source: &str) -> BTreeMap<String, GTFSFareMedia> {
60 let mut res = BTreeMap::new();
61 for record in parse_csv_as_record::<GTFSFareMedia>(source, None, None) {
62 res.insert(record.fare_media_id.clone(), record);
63 }
64 res
65 }
66 pub fn fare_media_type(&self) -> GTFSFareMediaType {
68 self.fare_media_type.into()
69 }
70}