gistools/readers/gtfs/schedule/
areas.rs

1use crate::readers::csv::parse_csv_as_record;
2use alloc::{collections::BTreeMap, string::String};
3use s2json::MValueCompatible;
4
5/// # Areas
6///
7/// **Optional**
8/// Defines area identifiers.
9/// Each record in `areas.txt` contains a unique `area_id` that can be referenced
10/// in `stop_areas.txt`.
11#[derive(Debug, Default, Clone, PartialEq, MValueCompatible)]
12pub struct GTFSArea {
13    /// **Required**
14    /// Identifies an area (`area_id`). Must be unique within `areas.txt`.
15    pub area_id: String,
16    /// **Optional**
17    /// Name of the area as displayed to the rider.
18    pub area_name: Option<String>,
19}
20impl GTFSArea {
21    /// Create a new GTFSArea
22    pub fn new(source: &str) -> BTreeMap<String, GTFSArea> {
23        let mut res = BTreeMap::new();
24        for record in parse_csv_as_record::<GTFSArea>(source, None, None) {
25            res.insert(record.area_id.clone(), record);
26        }
27        res
28    }
29}