From 0a24985b329a5436693f9d600717174d0450b7f0 Mon Sep 17 00:00:00 2001 From: Rory Coffey Date: Wed, 14 Jul 2021 16:43:42 -0400 Subject: [PATCH 1/9] moved fetching vehicle info to multiple threads --- src/mbta_info.rs | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/src/mbta_info.rs b/src/mbta_info.rs index 2d29e36..9d10ddd 100644 --- a/src/mbta_info.rs +++ b/src/mbta_info.rs @@ -1,5 +1,5 @@ use scraper::{Html, Selector}; -use std::{io::{BufWriter, BufReader},path::Path, fs::File, collections::HashMap}; +use std::{io::{BufWriter, BufReader},path::Path, fs::File, collections::HashMap, sync::{Arc, Mutex}, thread}; use reqwest; use serde_json; @@ -28,17 +28,36 @@ pub fn all_mbta_info(update: bool) -> Result<(HashMap Result> /// Retrieve commuter rail conversion for MBTA API from common understandable name to MTBA API code fn retrieve_commuter() -> Result, Box> { + println!("Starting Commuter"); // use the commuter rail schedule website to find the commuter rail codes which are located within the buttons let commuter_url = "https://www.mbta.com/schedules/commuter-rail"; // parse the commuter rail schedule website let commuter_info = parse_schedule_website(commuter_url, r#"a[class="c-grid-button c-grid-button--commuter-rail"]"#, r#"span[class="c-grid-button__name"]"#)?; // crate a hashmap out of the conversion information let commuter_conversion: HashMap = commuter_info.iter().map(|commuter| (commuter[0].clone(), commuter[1].clone())).collect(); + println!("Finished Commuter"); return Ok(commuter_conversion) } /// Retrieve ferry conversion for MBTA API from common understandable name to MTBA API code fn retrieve_ferry() -> Result, Box> { + println!("Starting Ferry"); // use the ferry schedule website to find the ferry codes which are located within the buttons let ferry_url = "https://www.mbta.com/schedules/ferry"; // parse the ferry schedule website let ferry_info = parse_schedule_website(ferry_url, r#"a[class="c-grid-button c-grid-button--ferry"]"#, r#"span[class="c-grid-button__name"]"#)?; // crate a hashmap out of the conversion information let ferry_conversion: HashMap = ferry_info.iter().map(|ferry| (ferry[0].clone(), ferry[1].clone())).collect(); + println!("Finished Ferry"); return Ok(ferry_conversion) } /// Retrieve subway conversion for MBTA API from common understandable name to MTBA API code. fn retrieve_subway() -> Result, Box> { + println!("Starting Subway"); // use the subway schedule website to get the conversion information from the buttons let subway_url = "https://www.mbta.com/schedules/subway"; // buttons are setup slightly different than the commuter rail. Each colored line starts with the &str below but finishes with the color, so each needs to be determined for a scraper selector @@ -168,6 +192,7 @@ fn retrieve_subway() -> Result, Box Date: Thu, 15 Jul 2021 09:12:38 -0400 Subject: [PATCH 2/9] all retrieval using multiple threads now' --- src/mbta_info.rs | 125 +++++++++++++++++++++++++++-------------------- 1 file changed, 71 insertions(+), 54 deletions(-) diff --git a/src/mbta_info.rs b/src/mbta_info.rs index 9d10ddd..ec4263f 100644 --- a/src/mbta_info.rs +++ b/src/mbta_info.rs @@ -1,7 +1,13 @@ use scraper::{Html, Selector}; -use std::{io::{BufWriter, BufReader},path::Path, fs::File, collections::HashMap, sync::{Arc, Mutex}, thread}; +use std::{io::{BufWriter, BufReader},path::Path, fs::File, collections::HashMap}; use reqwest; use serde_json; +use num_cpus; +use rayon; +use std::{ + sync::{Arc, Mutex}, + thread, +}; /// Scrapes MBTA station and vehicle info from their website then stores the information in JSON files and returns in HashMaps /// @@ -20,14 +26,9 @@ pub fn all_mbta_info(update: bool) -> Result<(HashMap Result<(HashMap Result<(HashMap Result>>, let ferry_url = "https://www.mbta.com/stops/ferry#ferry-tab"; // Parse the urls for the station information and add to the hashmap - let stations_info = parse_stations(subway_url)?; - let mut station_conversion: HashMap>> = stations_info.iter().cloned().collect(); - station_conversion.extend(parse_stations(communter_url)?); - station_conversion.extend(parse_stations(ferry_url)?); + let mut station_conversion = HashMap::new(); + station_conversion = update_station_hashmap(station_conversion, parse_stations(subway_url)?); + station_conversion = update_station_hashmap(station_conversion, parse_stations(communter_url)?); + station_conversion = update_station_hashmap(station_conversion, parse_stations(ferry_url)?); return Ok(station_conversion) } +fn update_station_hashmap(mut station_conversion: HashMap>>, new_stations_info: Vec<(String, String, Vec)>) -> HashMap>> { + for (station, station_api, vehicles) in new_stations_info { + let mut api_veh = HashMap::new(); + api_veh.insert(station_api, vehicles); + station_conversion.insert(station, api_veh); + } + return station_conversion +} + /// Pulls the station information along with vehicles that stop at the station from the given URL -fn parse_stations(url: &str) -> Result>)>, Box> { +fn parse_stations(url: &str) -> Result)>, Box> { // get the website text let website_text = reqwest::blocking::get(url)?.text()?; @@ -104,31 +111,45 @@ fn parse_stations(url: &str) -> Result> let buttons = document.select(&button_selector); // iterate on buttons and pull out the station information - let station_conversion: Vec<(String, HashMap>)> = buttons - .map(|button| ( - // get and rename the common understood station name - button + let pool = rayon::ThreadPoolBuilder::new().num_threads(num_cpus::get()).build().unwrap(); + // let (tx, rx) = mpsc::channel(); + let station_api: Vec<(String, String)> = buttons.map(|button|{ + let station_name = button + .value() + .attr("data-name") + .unwrap() + .replace(" ", "_") + .replace("'", ""); + let station_api_name = button .value() - .attr("data-name") + .attr("href") .unwrap() - .replace(" ", "_") - .replace("'", ""), - // get the API station name and the vehicles that stop at the station - station_vehicles( - button - .value() - .attr("href") - .unwrap() - .replace("/stops/", "") - ).unwrap() - ) - ) - .collect(); + .replace("/stops/", ""); + (station_name, station_api_name) + }).collect(); + let station_start = Arc::new(Mutex::new(Vec::new())); + let station_clone = Arc::clone(&station_start); + pool.scope(move |s| { + for (station_name, station_api_name) in station_api { + let station_clone_2 = Arc::clone(&station_clone); + s.spawn(move |_s| { + let vehicles = station_vehicles(&station_api_name).unwrap_or_else(|err| panic!("Station vehicle error: {}", err)); + let mut station_unlocked = station_clone_2.lock().unwrap(); + station_unlocked.push((station_name, station_api_name, vehicles)); + } + ); + }; + }); + let station_conversion = Arc::try_unwrap(station_start).unwrap().into_inner().unwrap(); + // let mut station_conversion = Vec::new(); + // for (station_name, station_api_name, vehicles) in *station_start.into_inner().unwrap() { + // station_conversion.push((station_name, station_api_name, vehicles)); + // }; return Ok(station_conversion) } /// Finds all vehicles that stop at the station of interest -fn station_vehicles(station_code: String) -> Result>, Box> { +fn station_vehicles(station_code: &str) -> Result, Box> { println!("Retrieving info for station: {}", station_code); // get the website text for the station let station_url = format!("https://www.mbta.com/stops/{}", station_code); @@ -141,11 +162,7 @@ fn station_vehicles(station_code: String) -> Result> // pull out vehicle codes from the buttons and place into a vec let vehicles: Vec = vehicle_buttons.map(|button| button.value().attr("href").unwrap().replace("/schedules/", "")).collect(); - - // create hashmap of station_code:[vehicle_codes] - let mut station_vehicles_hash = HashMap::new(); - station_vehicles_hash.insert(station_code, vehicles); - return Ok(station_vehicles_hash) + return Ok(vehicles) } /// Retrieve commuter rail conversion for MBTA API from common understandable name to MTBA API code From 3e9a23a7eca287d2291689a98988cf4d5dd0e020 Mon Sep 17 00:00:00 2001 From: Rory Coffey Date: Thu, 15 Jul 2021 09:12:55 -0400 Subject: [PATCH 3/9] updated info version --- mbta_station_info.json | 2 +- mbta_vehicle_info.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mbta_station_info.json b/mbta_station_info.json index ce697ea..97d75c5 100644 --- a/mbta_station_info.json +++ b/mbta_station_info.json @@ -1 +1 @@ -{"Franklin":{"place-FB-0275":["CR-Franklin"]},"Green_Street":{"place-grnst":["Orange"]},"Morton_Street":{"place-DB-2230":["CR-Fairmount"]},"Braintree":{"place-brntn":["Red","210","226","230","236","CR-Kingston","CR-Middleborough"]},"Boston_University_West":{"place-buwst":["Green-B"]},"Englewood_Avenue":{"place-engav":["Green-C"]},"Melrose/Cedar_Park":{"place-WR-0067":["CR-Haverhill"]},"Rowley":{"place-ER-0312":["CR-Newburyport"]},"TF_Green_Airport":{"place-NEC-1768":["CR-Providence"]},"Bellevue":{"place-NB-0072":["CR-Needham"]},"Kent_Street":{"place-kntst":["Green-C"]},"Griggs_Street":{"place-grigg":["Green-B"]},"Lansdowne":{"place-WML-0025":["CR-Worcester"]},"Lowell":{"place-NHRML-0254":["CR-Lowell"]},"Wickford_Junction":{"place-NEC-1659":["CR-Providence"]},"Lincoln":{"place-FR-0167":["CR-Fitchburg"]},"Wellesley_Square":{"place-WML-0147":["CR-Worcester"]},"Harvard":{"place-harsq":["Red","74","75","77","78","86","96"]},"Talbot_Avenue":{"place-DB-2240":["CR-Fairmount"]},"Brandon_Hall":{"place-bndhl":["Green-C"]},"West_Gloucester":{"place-GB-0296":["CR-Newburyport"]},"Quincy_Adams":{"place-qamnl":["Red"]},"Logan_Airport_Ferry_Terminal":{"Boat-Logan":["Boat-F1"]},"Chinatown":{"place-chncl":["Orange"]},"West_Roxbury":{"place-NB-0080":["CR-Needham"]},"Fenway":{"place-fenwy":["Green-D"]},"Wakefield":{"place-WR-0099":["CR-Haverhill"]},"Hawes_Street":{"place-hwsst":["Green-C"]},"Montello":{"place-MM-0186":["230","CR-Middleborough"]},"Porter":{"place-portr":["Red","CR-Fitchburg"]},"North_Leominster":{"place-FR-0451":["CR-Fitchburg"]},"Charles/MGH":{"place-chmnl":["Red"]},"Suffolk_Downs":{"place-sdmnl":["Blue"]},"Sharon":{"place-NEC-2108":["CR-Providence"]},"Canton_Center":{"place-SB-0156":["CR-Providence"]},"Community_College":{"place-ccmnl":["Orange"]},"Longwood":{"place-longw":["Green-D"]},"Fenwood_Road":{"place-fenwd":["Green-E"]},"Hynes_Convention_Center":{"place-hymnl":["Green-B","Green-C","Green-D"]},"Chestnut_Hill":{"place-chhil":["Green-D"]},"Kendall/MIT":{"place-knncl":["Red"]},"Canton_Junction":{"place-NEC-2139":["CR-Providence"]},"Oak_Grove":{"place-ogmnl":["Orange","131","137"]},"Brandeis/Roberts":{"place-FR-0115":["CR-Fitchburg"]},"Saint_Marys_Street":{"place-smary":["Green-C"]},"Newmarket":{"place-DB-2265":["CR-Fairmount"]},"North_Scituate":{"place-GRB-0233":["CR-Greenbush"]},"Summit_Avenue":{"place-sumav":["Green-C"]},"Fields_Corner":{"place-fldcr":["Red","15","17","18","19","201","202","210","215"]},"Wellesley_Farms":{"place-WML-0125":["CR-Worcester"]},"Concord":{"place-FR-0201":["CR-Fitchburg"]},"Halifax":{"place-PB-0281":["CR-Kingston"]},"Babcock_Street":{"place-babck":["Green-B"]},"Newtonville":{"place-WML-0081":["CR-Worcester"]},"Beverly_Farms":{"place-GB-0229":["CR-Newburyport"]},"Mansfield":{"place-NEC-2040":["CR-Providence"]},"Rowes_Wharf":{"Boat-Rowes":["Boat-F1"]},"Greenbush":{"place-GRB-0276":["CR-Greenbush"]},"Route_128":{"place-NEC-2173":["CR-Providence"]},"Alewife":{"place-alfcl":["Red","67","350"]},"Mission_Park":{"place-mispk":["Green-E"]},"Brigham_Circle":{"place-brmnl":["Green-E"]},"Holbrook/Randolph":{"place-MM-0150":["238","240","CR-Middleborough"]},"Long_Wharf_(South)":{"Boat-Long-South":["Boat-F4"]},"Blandford_Street":{"place-bland":["Green-B"]},"Reservoir":{"place-rsmnl":["Green-D","51","86"]},"Bridgewater":{"place-MM-0277":["CR-Middleborough"]},"Maverick":{"place-mvbcl":["Blue","114","116","117","120","121"]},"Newburyport":{"place-ER-0362":["CR-Newburyport"]},"Westborough":{"place-WML-0340":["CR-Worcester"]},"Brookline_Village":{"place-bvmnl":["Green-D"]},"Brockton":{"place-MM-0200":["CR-Middleborough"]},"Gloucester":{"place-GB-0316":[]},"Revere_Beach":{"place-rbmnl":["Blue"]},"Boston_Landing":{"place-WML-0035":["CR-Worcester"]},"Walpole":{"place-FB-0191":["CR-Franklin"]},"Hyde_Park":{"place-NEC-2203":["CR-Franklin","CR-Providence"]},"Ashland":{"place-WML-0252":["CR-Worcester"]},"Copley":{"place-coecl":["Green-B","Green-C","Green-D","Green-E"]},"Ruggles":{"place-rugg":["Orange","747","708","8","15","19","22","23","28","29","43","44","45","47","CR-Franklin","CR-Needham","CR-Providence"]},"Tufts_Medical_Center":{"place-tumnl":["Orange"]},"Campello":{"place-MM-0219":["CR-Middleborough"]},"Boston_University_Central":{"place-bucen":["Green-B"]},"Newton_Centre":{"place-newto":["Green-D"]},"North_Beverly":{"place-ER-0208":["CR-Newburyport"]},"Symphony":{"place-symcl":["Green-E"]},"Highland":{"place-NB-0076":["CR-Needham"]},"Aquarium":{"place-aqucl":["Blue"]},"Sullivan_Square":{"place-sull":["Orange","747","86","89","90","91","92","93","95","101","104","105","109"]},"Airport":{"place-aport":["Blue","743","171"]},"Warren_Street":{"place-wrnst":["Green-B"]},"North_Quincy":{"place-nqncy":["Red","210","211","215","217"]},"Wollaston":{"place-wlsta":["Red"]},"Haymarket":{"place-haecl":["Orange","Green-C","Green-D","Green-E"]},"Northeastern_University":{"place-nuniv":["Green-E"]},"Forest_Hills":{"place-forhl":["Orange","16","21","30","31","32","33","34","34E","35","36","37","38","39","40","42","50","51","CR-Needham"]},"Beverly":{"place-ER-0183":["CR-Newburyport"]},"South_Street":{"place-sougr":["Green-B"]},"Tappan_Street":{"place-tapst":["Green-C"]},"Washington_Square":{"place-bcnwa":["Green-C"]},"Assembly":{"place-astao":["Orange"]},"Kenmore":{"place-kencl":["Green-B","Green-C","Green-D","8","19","57","60","65"]},"Belmont":{"place-FR-0064":["CR-Fitchburg"]},"Hingham":{"Boat-Hingham":["Boat-F1"]},"Wood_Island":{"place-wimnl":["Blue","112","120","121"]},"Wachusett":{"place-FR-3338":["CR-Fitchburg"]},"Riverside":{"place-river":["Green-D","558"]},"Norwood_Depot":{"place-FB-0143":["CR-Franklin"]},"Prudential":{"place-prmnl":["Green-E"]},"Windsor_Gardens":{"place-FB-0166":["CR-Franklin"]},"State":{"place-state":["Orange","Blue"]},"Lawrence":{"place-WR-0264":["CR-Haverhill"]},"Reading":{"place-WR-0120":["CR-Haverhill"]},"Bowdoin":{"place-bomnl":["Blue"]},"Longwood_Medical_Area":{"place-lngmd":["Green-E"]},"Hersey":{"place-NB-0109":["CR-Needham"]},"Riverway":{"place-rvrwy":["Green-E"]},"Washington_Street":{"place-wascm":["Green-B"]},"Long_Wharf_(North)":{"Boat-Long":["Boat-F1"]},"Ballardvale":{"place-WR-0205":["CR-Haverhill"]},"Four_Corners/Geneva":{"place-DB-2249":["CR-Fairmount"]},"West_Hingham":{"place-GRB-0162":["CR-Greenbush"]},"Boston_University_East":{"place-buest":["Green-B"]},"South_Acton":{"place-FR-0253":["CR-Fitchburg"]},"Ipswich":{"place-ER-0276":["CR-Newburyport"]},"Central_Avenue":{"place-cenav":["Mattapan"]},"Dean_Road":{"place-denrd":["Green-C"]},"Middleborough/Lakeville":{"place-MM-0356":["CR-Middleborough"]},"Uphams_Corner":{"place-DB-2258":["CR-Fairmount"]},"Harvard_Avenue":{"place-harvd":["Green-B"]},"Beaconsfield":{"place-bcnfd":["Green-D"]},"Newton_Highlands":{"place-newtn":["Green-D","59"]},"Natick_Center":{"place-WML-0177":["CR-Worcester"]},"Mattapan":{"place-matt":["Mattapan","15","24","28","29","30","31","33","245","716"]},"Grafton":{"place-WML-0364":["CR-Worcester"]},"Georges_Island":{"Boat-George":["Boat-F1"]},"Back_Bay":{"place-bbsta":["Orange","39","CR-Worcester","CR-Franklin","CR-Needham","CR-Providence"]},"Davis":{"place-davis":["Red","87","88","89","90","94","96"]},"Anderson/Woburn":{"place-NHRML-0127":["CR-Lowell"]},"Needham_Heights":{"place-NB-0137":["CR-Needham"]},"North_Wilmington":{"place-WR-0163":["CR-Haverhill"]},"Fairmount":{"place-DB-2205":["CR-Fairmount"]},"Needham_Junction":{"place-NB-0120":["59","CR-Needham"]},"Beachmont":{"place-bmmnl":["Blue"]},"Broadway":{"place-brdwy":["Red"]},"Central":{"place-cntsq":["Red"]},"Savin_Hill":{"place-shmnl":["Red"]},"Butler":{"place-butlr":["Mattapan"]},"Norfolk":{"place-FB-0230":["CR-Franklin"]},"Wellington":{"place-welln":["Orange","97","99","100","106","108","110","112","134"]},"Weymouth_Landing/East_Braintree":{"place-GRB-0118":["CR-Greenbush"]},"Cohasset":{"place-GRB-0199":["CR-Greenbush"]},"Greenwood":{"place-WR-0085":["CR-Haverhill"]},"Lynn":{"place-ER-0115":["426","429","435","436","439","441","442","455","CR-Newburyport"]},"Fairbanks_Street":{"place-fbkst":["Green-C"]},"Dedham_Corporate_Center":{"place-FB-0118":["CR-Franklin"]},"Ashmont":{"place-asmnl":["Red","Mattapan","15","18","21","22","23","24","26","45","215","217","240"]},"Nantasket_Junction":{"place-GRB-0183":["CR-Greenbush"]},"Providence":{"place-NEC-1851":["CR-Providence"]},"Wellesley_Hills":{"place-WML-0135":["CR-Worcester"]},"Kendal_Green":{"place-FR-0132":["CR-Fitchburg"]},"Andrew":{"place-andrw":["Red","708","10","16","17","18","171"]},"West_Concord":{"place-FR-0219":["CR-Fitchburg"]},"Back_of_the_Hill":{"place-bckhl":["Green-E"]},"Boylston":{"place-boyls":["Green-B","Green-C","Green-D","Green-E"]},"Wedgemere":{"place-NHRML-0073":["CR-Lowell"]},"Wyoming_Hill":{"place-WR-0062":["CR-Haverhill"]},"Waban":{"place-waban":["Green-D"]},"Saint_Paul_Street":{"place-stpul":["Green-C"]},"Downtown_Crossing":{"place-dwnxg":["Red","Orange"]},"North_Station":{"place-north":["Orange","Green-C","Green-D","Green-E","CR-Fitchburg","CR-Haverhill","CR-Lowell","CR-Newburyport"]},"Whitman":{"place-PB-0212":["CR-Kingston"]},"Kingston":{"place-KB-0351":["CR-Kingston"]},"Hanson":{"place-PB-0245":["CR-Kingston"]},"JFK/UMass":{"place-jfk":["Red","8","16","41","CR-Greenbush","CR-Kingston","CR-Middleborough"]},"Haverhill":{"place-WR-0329":["CR-Haverhill"]},"Allston_Street":{"place-alsgr":["Green-B"]},"South_Weymouth":{"place-PB-0158":["CR-Kingston"]},"Hull":{"Boat-Hull":["Boat-F1"]},"East_Weymouth":{"place-GRB-0146":["CR-Greenbush"]},"Shirley":{"place-FR-0394":["CR-Fitchburg"]},"Valley_Road":{"place-valrd":["Mattapan"]},"West_Medford":{"place-NHRML-0055":["CR-Lowell"]},"Arlington":{"place-armnl":["Green-B","Green-C","Green-D","Green-E"]},"Bradford":{"place-WR-0325":["CR-Haverhill"]},"River_Works":{"place-ER-0099":["CR-Newburyport"]},"Auburndale":{"place-WML-0102":["CR-Worcester"]},"Ayer":{"place-FR-0361":["CR-Fitchburg"]},"Park_Street":{"place-pktrm":["Red","Green-B","Green-C","Green-D","Green-E"]},"Melrose_Highlands":{"place-WR-0075":["CR-Haverhill"]},"Chelsea":{"place-ER-0046":["CR-Newburyport"]},"Coolidge_Corner":{"place-cool":["Green-C"]},"Swampscott":{"place-ER-0128":["CR-Newburyport"]},"Charlestown":{"Boat-Charlestown":["Boat-F4"]},"Fitchburg":{"place-FR-0494":["CR-Fitchburg"]},"Woodland":{"place-woodl":["Green-D"]},"Rockport":{"place-GB-0353":[]},"Government_Center":{"place-gover":["Green-C","Green-D","Green-E","Blue"]},"Montserrat":{"place-GB-0198":["CR-Newburyport"]},"Heath_Street":{"place-hsmnl":["Green-E"]},"Shawmut":{"place-smmnl":["Red"]},"Needham_Center":{"place-NB-0127":["CR-Needham"]},"Cleveland_Circle":{"place-clmnl":["Green-C"]},"Stony_Brook":{"place-sbmnl":["Orange"]},"Orient_Heights":{"place-orhte":["Blue","120","712","713"]},"Forge_Park/495":{"place-FB-0303":["CR-Franklin"]},"Attleboro":{"place-NEC-1969":["CR-Providence"]},"Norwood_Central":{"place-FB-0148":["CR-Franklin"]},"Chiswick_Road":{"place-chswk":["Green-B"]},"West_Natick":{"place-WML-0199":["CR-Worcester"]},"Endicott":{"place-FB-0109":["CR-Franklin"]},"Packards_Corner":{"place-brico":["Green-B"]},"Wonderland":{"place-wondl":["Blue","110","116","117","411","424","426","439","441","442","450","455"]},"Capen_Street":{"place-capst":["Mattapan"]},"Massachusetts_Avenue":{"place-masta":["Orange"]},"Abington":{"place-PB-0194":["CR-Kingston"]},"Islington":{"place-FB-0125":["CR-Franklin"]},"Chestnut_Hill_Avenue":{"place-chill":["Green-B"]},"West_Newton":{"place-WML-0091":["CR-Worcester"]},"Cedar_Grove":{"place-cedgr":["Mattapan"]},"Museum_of_Fine_Arts":{"place-mfa":["Green-E"]},"Andover":{"place-WR-0228":["CR-Haverhill"]},"Salem":{"place-ER-0168":["435","450","455","CR-Newburyport"]},"Manchester":{"place-GB-0254":["CR-Newburyport"]},"Jackson_Square":{"place-jaksn":["Orange","14","22","29","41","44"]},"Wilmington":{"place-NHRML-0152":["CR-Lowell"]},"Milton":{"place-miltt":["Mattapan"]},"Roslindale_Village":{"place-NB-0064":["CR-Needham"]},"Waverley":{"place-FR-0074":["CR-Fitchburg"]},"Roxbury_Crossing":{"place-rcmnl":["Orange"]},"South_Station":{"place-sstat":["Red","741","742","743","CR-Fairmount","CR-Worcester","CR-Franklin","CR-Greenbush","CR-Kingston","CR-Middleborough","CR-Needham","CR-Providence"]},"Littleton/Route_495":{"place-FR-0301":["CR-Fitchburg"]},"Hamilton/Wenham":{"place-ER-0227":["CR-Newburyport"]},"Readville":{"place-DB-0095":["CR-Fairmount","CR-Franklin"]},"Waltham":{"place-FR-0098":["CR-Fitchburg"]},"Malden_Center":{"place-mlmnl":["Orange","97","99","101","104","105","106","108","131","132","137","411","430","CR-Haverhill"]},"Stoughton":{"place-SB-0189":["CR-Providence"]},"Sutherland_Road":{"place-sthld":["Green-B"]},"Blue_Hill_Avenue":{"place-DB-2222":["CR-Fairmount"]},"North_Billerica":{"place-NHRML-0218":["CR-Lowell"]},"Eliot":{"place-eliot":["Green-D"]},"Framingham":{"place-WML-0214":["CR-Worcester"]},"Southborough":{"place-WML-0274":["CR-Worcester"]},"Worcester":{"place-WML-0442":["CR-Worcester"]},"Boston_College":{"place-lake":["Green-B"]},"Quincy_Center":{"place-qnctr":["Red","210","211","215","216","217","220","222","225","230","236","238","245","CR-Greenbush","CR-Kingston","CR-Middleborough"]}} \ No newline at end of file +{"Hamilton/Wenham":{"place-ER-0227":["CR-Newburyport"]},"Boylston":{"place-boyls":["Green-B","Green-C","Green-D","Green-E"]},"North_Beverly":{"place-ER-0208":["CR-Newburyport"]},"Weymouth_Landing/East_Braintree":{"place-GRB-0118":["CR-Greenbush"]},"Saint_Marys_Street":{"place-smary":["Green-C"]},"Swampscott":{"place-ER-0128":["CR-Newburyport"]},"Englewood_Avenue":{"place-engav":["Green-C"]},"South_Street":{"place-sougr":["Green-B"]},"Newtonville":{"place-WML-0081":["CR-Worcester"]},"Wellesley_Hills":{"place-WML-0135":["CR-Worcester"]},"Central_Avenue":{"place-cenav":["Mattapan"]},"South_Weymouth":{"place-PB-0158":["CR-Kingston"]},"Sutherland_Road":{"place-sthld":["Green-B"]},"Hersey":{"place-NB-0109":["CR-Needham"]},"Malden_Center":{"place-mlmnl":["Orange","97","99","101","104","105","106","108","131","132","137","411","430","CR-Haverhill"]},"Kendal_Green":{"place-FR-0132":["CR-Fitchburg"]},"Abington":{"place-PB-0194":["CR-Kingston"]},"Reservoir":{"place-rsmnl":["Green-D","51","86"]},"Eliot":{"place-eliot":["Green-D"]},"Hyde_Park":{"place-NEC-2203":["CR-Franklin","CR-Providence"]},"Long_Wharf_(South)":{"Boat-Long-South":["Boat-F4"]},"Braintree":{"place-brntn":["Red","210","226","230","236","CR-Kingston","CR-Middleborough"]},"Hull":{"Boat-Hull":["Boat-F1"]},"Brookline_Village":{"place-bvmnl":["Green-D"]},"Woodland":{"place-woodl":["Green-D"]},"Park_Street":{"place-pktrm":["Red","Green-B","Green-C","Green-D","Green-E"]},"Charles/MGH":{"place-chmnl":["Red"]},"Tappan_Street":{"place-tapst":["Green-C"]},"Warren_Street":{"place-wrnst":["Green-B"]},"Lowell":{"place-NHRML-0254":["CR-Lowell"]},"Orient_Heights":{"place-orhte":["Blue","120","712","713"]},"Massachusetts_Avenue":{"place-masta":["Orange"]},"West_Natick":{"place-WML-0199":["CR-Worcester"]},"Jackson_Square":{"place-jaksn":["Orange","14","22","29","41","44"]},"Wedgemere":{"place-NHRML-0073":["CR-Lowell"]},"Newburyport":{"place-ER-0362":["CR-Newburyport"]},"Green_Street":{"place-grnst":["Orange"]},"Downtown_Crossing":{"place-dwnxg":["Red","Orange"]},"Davis":{"place-davis":["Red","87","88","89","90","94","96"]},"Lawrence":{"place-WR-0264":["CR-Haverhill"]},"Haverhill":{"place-WR-0329":["CR-Haverhill"]},"Bridgewater":{"place-MM-0277":["CR-Middleborough"]},"Lynn":{"place-ER-0115":["426","429","435","436","439","441","442","455","CR-Newburyport"]},"Boston_College":{"place-lake":["Green-B"]},"Boston_University_Central":{"place-bucen":["Green-B"]},"Fairmount":{"place-DB-2205":["CR-Fairmount"]},"North_Wilmington":{"place-WR-0163":["CR-Haverhill"]},"Norwood_Depot":{"place-FB-0143":["CR-Franklin"]},"Chestnut_Hill_Avenue":{"place-chill":["Green-B"]},"Boston_University_East":{"place-buest":["Green-B"]},"Wachusett":{"place-FR-3338":["CR-Fitchburg"]},"Sullivan_Square":{"place-sull":["Orange","747","86","89","90","91","92","93","95","101","104","105","109"]},"Andover":{"place-WR-0228":["CR-Haverhill"]},"Coolidge_Corner":{"place-cool":["Green-C"]},"West_Roxbury":{"place-NB-0080":["CR-Needham"]},"Mission_Park":{"place-mispk":["Green-E"]},"Back_Bay":{"place-bbsta":["Orange","39","CR-Worcester","CR-Franklin","CR-Needham","CR-Providence"]},"Bowdoin":{"place-bomnl":["Blue"]},"Ayer":{"place-FR-0361":["CR-Fitchburg"]},"North_Leominster":{"place-FR-0451":["CR-Fitchburg"]},"Washington_Square":{"place-bcnwa":["Green-C"]},"Andrew":{"place-andrw":["Red","708","10","16","17","18","171"]},"Capen_Street":{"place-capst":["Mattapan"]},"Ipswich":{"place-ER-0276":["CR-Newburyport"]},"Uphams_Corner":{"place-DB-2258":["CR-Fairmount"]},"Oak_Grove":{"place-ogmnl":["Orange","131","137"]},"Greenwood":{"place-WR-0085":["CR-Haverhill"]},"North_Quincy":{"place-nqncy":["Red","210","211","215","217"]},"West_Medford":{"place-NHRML-0055":["CR-Lowell"]},"Wollaston":{"place-wlsta":["Red"]},"Chestnut_Hill":{"place-chhil":["Green-D"]},"Summit_Avenue":{"place-sumav":["Green-C"]},"Central":{"place-cntsq":["Red"]},"Needham_Junction":{"place-NB-0120":["59","CR-Needham"]},"Beverly_Farms":{"place-GB-0229":["CR-Newburyport"]},"Fenway":{"place-fenwy":["Green-D"]},"Museum_of_Fine_Arts":{"place-mfa":["Green-E"]},"Westborough":{"place-WML-0340":["CR-Worcester"]},"Washington_Street":{"place-wascm":["Green-B"]},"Wilmington":{"place-NHRML-0152":["CR-Lowell"]},"Needham_Heights":{"place-NB-0137":["CR-Needham"]},"Endicott":{"place-FB-0109":["CR-Franklin"]},"Wellesley_Farms":{"place-WML-0125":["CR-Worcester"]},"Salem":{"place-ER-0168":["435","450","455","CR-Newburyport"]},"Griggs_Street":{"place-grigg":["Green-B"]},"Forest_Hills":{"place-forhl":["Orange","16","21","30","31","32","33","34","34E","35","36","37","38","39","40","42","50","51","CR-Needham"]},"Providence":{"place-NEC-1851":["CR-Providence"]},"Long_Wharf_(North)":{"Boat-Long":["Boat-F1"]},"Readville":{"place-DB-0095":["CR-Fairmount","CR-Franklin"]},"Brigham_Circle":{"place-brmnl":["Green-E"]},"Wonderland":{"place-wondl":["Blue","110","116","117","411","424","426","439","441","442","450","455"]},"Maverick":{"place-mvbcl":["Blue","114","116","117","120","121"]},"Nantasket_Junction":{"place-GRB-0183":["CR-Greenbush"]},"Roslindale_Village":{"place-NB-0064":["CR-Needham"]},"Broadway":{"place-brdwy":["Red"]},"Cleveland_Circle":{"place-clmnl":["Green-C"]},"Beachmont":{"place-bmmnl":["Blue"]},"Prudential":{"place-prmnl":["Green-E"]},"Auburndale":{"place-WML-0102":["CR-Worcester"]},"Savin_Hill":{"place-shmnl":["Red"]},"Stoughton":{"place-SB-0189":["CR-Providence"]},"Waltham":{"place-FR-0098":["CR-Fitchburg"]},"Wellesley_Square":{"place-WML-0147":["CR-Worcester"]},"Suffolk_Downs":{"place-sdmnl":["Blue"]},"Canton_Center":{"place-SB-0156":["CR-Providence"]},"Needham_Center":{"place-NB-0127":["CR-Needham"]},"Kingston":{"place-KB-0351":["CR-Kingston"]},"Georges_Island":{"Boat-George":["Boat-F1"]},"Belmont":{"place-FR-0064":["CR-Fitchburg"]},"Kent_Street":{"place-kntst":["Green-C"]},"Allston_Street":{"place-alsgr":["Green-B"]},"Concord":{"place-FR-0201":["CR-Fitchburg"]},"Longwood":{"place-longw":["Green-D"]},"Stony_Brook":{"place-sbmnl":["Orange"]},"Mansfield":{"place-NEC-2040":["CR-Providence"]},"Chelsea":{"place-ER-0046":["CR-Newburyport"]},"Ashmont":{"place-asmnl":["Red","Mattapan","15","18","21","22","23","24","26","45","215","217","240"]},"Wellington":{"place-welln":["Orange","97","99","100","106","108","110","112","134"]},"Ballardvale":{"place-WR-0205":["CR-Haverhill"]},"North_Station":{"place-north":["Orange","Green-C","Green-D","Green-E","CR-Fitchburg","CR-Haverhill","CR-Lowell","CR-Newburyport"]},"Newton_Centre":{"place-newto":["Green-D"]},"South_Station":{"place-sstat":["Red","741","742","743","CR-Fairmount","CR-Worcester","CR-Franklin","CR-Greenbush","CR-Kingston","CR-Middleborough","CR-Needham","CR-Providence"]},"Wakefield":{"place-WR-0099":["CR-Haverhill"]},"Rowes_Wharf":{"Boat-Rowes":["Boat-F1"]},"Melrose_Highlands":{"place-WR-0075":["CR-Haverhill"]},"Rockport":{"place-GB-0353":[]},"Bradford":{"place-WR-0325":["CR-Haverhill"]},"Wood_Island":{"place-wimnl":["Blue","112","120","121"]},"Longwood_Medical_Area":{"place-lngmd":["Green-E"]},"Talbot_Avenue":{"place-DB-2240":["CR-Fairmount"]},"Norfolk":{"place-FB-0230":["CR-Franklin"]},"Assembly":{"place-astao":["Orange"]},"Fenwood_Road":{"place-fenwd":["Green-E"]},"Boston_Landing":{"place-WML-0035":["CR-Worcester"]},"North_Scituate":{"place-GRB-0233":["CR-Greenbush"]},"Newton_Highlands":{"place-newtn":["Green-D","59"]},"Wickford_Junction":{"place-NEC-1659":["CR-Providence"]},"Tufts_Medical_Center":{"place-tumnl":["Orange"]},"Riverway":{"place-rvrwy":["Green-E"]},"Shirley":{"place-FR-0394":["CR-Fitchburg"]},"Rowley":{"place-ER-0312":["CR-Newburyport"]},"Waverley":{"place-FR-0074":["CR-Fitchburg"]},"West_Hingham":{"place-GRB-0162":["CR-Greenbush"]},"West_Gloucester":{"place-GB-0296":["CR-Newburyport"]},"Southborough":{"place-WML-0274":["CR-Worcester"]},"Babcock_Street":{"place-babck":["Green-B"]},"Brandeis/Roberts":{"place-FR-0115":["CR-Fitchburg"]},"Brandon_Hall":{"place-bndhl":["Green-C"]},"Chiswick_Road":{"place-chswk":["Green-B"]},"Montello":{"place-MM-0186":["230","CR-Middleborough"]},"Arlington":{"place-armnl":["Green-B","Green-C","Green-D","Green-E"]},"Logan_Airport_Ferry_Terminal":{"Boat-Logan":["Boat-F1"]},"Alewife":{"place-alfcl":["Red","67","350"]},"Hingham":{"Boat-Hingham":["Boat-F1"]},"Copley":{"place-coecl":["Green-B","Green-C","Green-D","Green-E"]},"Attleboro":{"place-NEC-1969":["CR-Providence"]},"Kenmore":{"place-kencl":["Green-B","Green-C","Green-D","8","19","57","60","65"]},"Saint_Paul_Street":{"place-stplb":["Green-B"]},"Quincy_Center":{"place-qnctr":["Red","210","211","215","216","217","220","222","225","230","236","238","245","CR-Greenbush","CR-Kingston","CR-Middleborough"]},"Ruggles":{"place-rugg":["Orange","747","708","8","15","19","22","23","28","29","43","44","45","47","CR-Franklin","CR-Needham","CR-Providence"]},"Shawmut":{"place-smmnl":["Red"]},"Lincoln":{"place-FR-0167":["CR-Fitchburg"]},"Fairbanks_Street":{"place-fbkst":["Green-C"]},"Northeastern_University":{"place-nuniv":["Green-E"]},"Cedar_Grove":{"place-cedgr":["Mattapan"]},"Dedham_Corporate_Center":{"place-FB-0118":["CR-Franklin"]},"Packards_Corner":{"place-brico":["Green-B"]},"West_Newton":{"place-WML-0091":["CR-Worcester"]},"Riverside":{"place-river":["Green-D","558"]},"Charlestown":{"Boat-Charlestown":["Boat-F4"]},"Anderson/Woburn":{"place-NHRML-0127":["CR-Lowell"]},"Quincy_Adams":{"place-qamnl":["Red"]},"Hawes_Street":{"place-hwsst":["Green-C"]},"Aquarium":{"place-aqucl":["Blue"]},"Beaconsfield":{"place-bcnfd":["Green-D"]},"Hynes_Convention_Center":{"place-hymnl":["Green-B","Green-C","Green-D"]},"Walpole":{"place-FB-0191":["CR-Franklin"]},"East_Weymouth":{"place-GRB-0146":["CR-Greenbush"]},"Melrose/Cedar_Park":{"place-WR-0067":["CR-Haverhill"]},"Sharon":{"place-NEC-2108":["CR-Providence"]},"Revere_Beach":{"place-rbmnl":["Blue"]},"Lansdowne":{"place-WML-0025":["CR-Worcester"]},"Chinatown":{"place-chncl":["Orange"]},"Grafton":{"place-WML-0364":["CR-Worcester"]},"Back_of_the_Hill":{"place-bckhl":["Green-E"]},"Milton":{"place-miltt":["Mattapan"]},"Government_Center":{"place-gover":["Green-C","Green-D","Green-E","Blue"]},"Fitchburg":{"place-FR-0494":["CR-Fitchburg"]},"Kendall/MIT":{"place-knncl":["Red"]},"State":{"place-state":["Orange","Blue"]},"Four_Corners/Geneva":{"place-DB-2249":["CR-Fairmount"]},"Framingham":{"place-WML-0214":["CR-Worcester"]},"Campello":{"place-MM-0219":["CR-Middleborough"]},"Natick_Center":{"place-WML-0177":["CR-Worcester"]},"Dean_Road":{"place-denrd":["Green-C"]},"Community_College":{"place-ccmnl":["Orange"]},"Roxbury_Crossing":{"place-rcmnl":["Orange"]},"Islington":{"place-FB-0125":["CR-Franklin"]},"Porter":{"place-portr":["Red","CR-Fitchburg"]},"Greenbush":{"place-GRB-0276":["CR-Greenbush"]},"Whitman":{"place-PB-0212":["CR-Kingston"]},"Heath_Street":{"place-hsmnl":["Green-E"]},"Blue_Hill_Avenue":{"place-DB-2222":["CR-Fairmount"]},"Morton_Street":{"place-DB-2230":["CR-Fairmount"]},"Ashland":{"place-WML-0252":["CR-Worcester"]},"Canton_Junction":{"place-NEC-2139":["CR-Providence"]},"Highland":{"place-NB-0076":["CR-Needham"]},"Route_128":{"place-NEC-2173":["CR-Providence"]},"Holbrook/Randolph":{"place-MM-0150":["238","240","CR-Middleborough"]},"Norwood_Central":{"place-FB-0148":["CR-Franklin"]},"Haymarket":{"place-haecl":["Orange","Green-C","Green-D","Green-E"]},"Newmarket":{"place-DB-2265":["CR-Fairmount"]},"Littleton/Route_495":{"place-FR-0301":["CR-Fitchburg"]},"Forge_Park/495":{"place-FB-0303":["CR-Franklin"]},"South_Acton":{"place-FR-0253":["CR-Fitchburg"]},"River_Works":{"place-ER-0099":["CR-Newburyport"]},"Cohasset":{"place-GRB-0199":["CR-Greenbush"]},"Blandford_Street":{"place-bland":["Green-B"]},"TF_Green_Airport":{"place-NEC-1768":["CR-Providence"]},"Hanson":{"place-PB-0245":["CR-Kingston"]},"Reading":{"place-WR-0120":["CR-Haverhill"]},"Middleborough/Lakeville":{"place-MM-0356":["CR-Middleborough"]},"Beverly":{"place-ER-0183":["CR-Newburyport"]},"North_Billerica":{"place-NHRML-0218":["CR-Lowell"]},"Montserrat":{"place-GB-0198":["CR-Newburyport"]},"Brockton":{"place-MM-0200":["CR-Middleborough"]},"Manchester":{"place-GB-0254":["CR-Newburyport"]},"West_Concord":{"place-FR-0219":["CR-Fitchburg"]},"Fields_Corner":{"place-fldcr":["Red","15","17","18","19","201","202","210","215"]},"Boston_University_West":{"place-buwst":["Green-B"]},"Gloucester":{"place-GB-0316":[]},"Waban":{"place-waban":["Green-D"]},"Harvard":{"place-harsq":["Red","74","75","77","78","86","96"]},"Franklin":{"place-FB-0275":["CR-Franklin"]},"Wyoming_Hill":{"place-WR-0062":["CR-Haverhill"]},"Airport":{"place-aport":["Blue","743","171"]},"Bellevue":{"place-NB-0072":["CR-Needham"]},"Butler":{"place-butlr":["Mattapan"]},"Harvard_Avenue":{"place-harvd":["Green-B"]},"Valley_Road":{"place-valrd":["Mattapan"]},"Halifax":{"place-PB-0281":["CR-Kingston"]},"JFK/UMass":{"place-jfk":["Red","8","16","41","CR-Greenbush","CR-Kingston","CR-Middleborough"]},"Worcester":{"place-WML-0442":["CR-Worcester"]},"Mattapan":{"place-matt":["Mattapan","15","24","28","29","30","31","33","245","716"]},"Symphony":{"place-symcl":["Green-E"]},"Windsor_Gardens":{"place-FB-0166":["CR-Franklin"]}} \ No newline at end of file diff --git a/mbta_vehicle_info.json b/mbta_vehicle_info.json index 3963519..34fcc0a 100644 --- a/mbta_vehicle_info.json +++ b/mbta_vehicle_info.json @@ -1 +1 @@ -{"Subway":{"Green-D":"Green-D","Orange":"Orange","Green-B":"Green-B","Green":"Green","Green-E":"Green-E","Red":"Red","Mattapan_Trolley":"Mattapan","Blue":"Blue","Green-C":"Green-C"},"Commuter_Rail":{"Foxboro_Event_Service":"CR-Foxboro","Fitchburg":"CR-Fitchburg","Franklin":"CR-Franklin","Providence/Stoughton":"CR-Providence","Greenbush":"CR-Greenbush","Fairmount":"CR-Fairmount","Lowell":"CR-Lowell","Haverhill":"CR-Haverhill","Middleborough/Lakeville":"CR-Middleborough","Needham":"CR-Needham","Kingston":"CR-Kingston","Newburyport/Rockport":"CR-Newburyport","Framingham/Worcester":"CR-Worcester"},"Ferry":{"Hingham/Hull_Ferry":"Boat-F1","Charlestown_Ferry":"Boat-F4"}} \ No newline at end of file +{"Subway":{"Mattapan_Trolley":"Mattapan","Blue":"Blue","Green-C":"Green-C","Green-D":"Green-D","Green-E":"Green-E","Orange":"Orange","Green-B":"Green-B","Red":"Red","Green":"Green"},"Ferry":{"Charlestown_Ferry":"Boat-F4","Hingham/Hull_Ferry":"Boat-F1"},"Commuter_Rail":{"Lowell":"CR-Lowell","Newburyport/Rockport":"CR-Newburyport","Providence/Stoughton":"CR-Providence","Fairmount":"CR-Fairmount","Franklin":"CR-Franklin","Haverhill":"CR-Haverhill","Middleborough/Lakeville":"CR-Middleborough","Needham":"CR-Needham","Fitchburg":"CR-Fitchburg","Foxboro_Event_Service":"CR-Foxboro","Kingston":"CR-Kingston","Framingham/Worcester":"CR-Worcester","Greenbush":"CR-Greenbush"}} \ No newline at end of file From 8bb46939a34c8b8738a275849184cdade2133056 Mon Sep 17 00:00:00 2001 From: Rory Coffey Date: Thu, 15 Jul 2021 09:30:54 -0400 Subject: [PATCH 4/9] handling error where json exists but a key is missing --- src/main.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 8ef3eaa..d86786a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,7 +6,7 @@ use mbta_countdown; // use rppal::gpio; use std::{ sync::{Arc, Mutex}, - thread, time, + thread, time,collections::HashMap, }; fn main() { @@ -66,16 +66,19 @@ pub fn arguments() -> Result<(String, String, u8, String), Box = station_info.keys().map(|key| key.as_str()).collect(); input_stations.sort(); + // create an empty hashmap to handle errors when the key does not exist and update is called + let mut empty_vehicle_hashmap = HashMap::new(); + empty_vehicle_hashmap.insert("".to_string(), "".to_string()); // get a list of commuter rail lines to limit the commuter rail argument input - let commuter_rails = vehicle_info.get("Commuter_Rail").unwrap(); + let commuter_rails = vehicle_info.get("Commuter_Rail").unwrap_or(&empty_vehicle_hashmap); let mut input_commuter: Vec<&str> = commuter_rails.keys().map(|key| key.as_str()).collect(); input_commuter.sort(); // get a list of subway lines to limit the subway argument input - let subway_lines = vehicle_info.get("Subway").unwrap(); + let subway_lines = vehicle_info.get("Subway").unwrap_or(&empty_vehicle_hashmap); let mut input_subway: Vec<&str> = subway_lines.keys().map(|key| key.as_str()).collect(); input_subway.sort(); // get a list of ferry lines to limit the ferry argument input - let ferry_lines = vehicle_info.get("Ferry").unwrap(); + let ferry_lines = vehicle_info.get("Ferry").unwrap_or(&empty_vehicle_hashmap); let mut input_ferry: Vec<&str> = ferry_lines.keys().map(|key| key.as_str()).collect(); input_ferry.sort(); From f307bef25cf266d8ef61bbf3bbfca3e286bb086a Mon Sep 17 00:00:00 2001 From: Rory Coffey Date: Thu, 15 Jul 2021 10:43:52 -0400 Subject: [PATCH 5/9] cleaned up and annotation added --- src/mbta_info.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/mbta_info.rs b/src/mbta_info.rs index ec4263f..5ddaba3 100644 --- a/src/mbta_info.rs +++ b/src/mbta_info.rs @@ -111,8 +111,7 @@ fn parse_stations(url: &str) -> Result)>, Box = buttons.map(|button|{ let station_name = button .value() @@ -127,24 +126,31 @@ fn parse_stations(url: &str) -> Result)>, Box Date: Fri, 16 Jul 2021 07:35:03 -0400 Subject: [PATCH 6/9] moved to cleaner rayon threads --- src/mbta_info.rs | 86 ++++++++++++++++++++---------------------------- 1 file changed, 36 insertions(+), 50 deletions(-) diff --git a/src/mbta_info.rs b/src/mbta_info.rs index 5ddaba3..aa92632 100644 --- a/src/mbta_info.rs +++ b/src/mbta_info.rs @@ -2,8 +2,7 @@ use scraper::{Html, Selector}; use std::{io::{BufWriter, BufReader},path::Path, fs::File, collections::HashMap}; use reqwest; use serde_json; -use num_cpus; -use rayon; +use rayon::{ThreadPoolBuilder, prelude::*}; use std::{ sync::{Arc, Mutex}, thread, @@ -29,33 +28,35 @@ pub fn all_mbta_info(update: bool) -> Result<(HashMap Result)>, Box Date: Fri, 16 Jul 2021 07:35:23 -0400 Subject: [PATCH 7/9] added rayon --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index b8974ce..4422602 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,3 +18,4 @@ embedded-graphics = "0.6" embedded-hal = "0.2" clap = "2.33.0" scraper = "0.12.0" +rayon = "1.5.1" From d23acf438b0b906c45dad99791d4dd97d7603770 Mon Sep 17 00:00:00 2001 From: Rory Coffey Date: Sat, 17 Jul 2021 17:48:18 -0400 Subject: [PATCH 8/9] removed unused thread import --- src/mbta_info.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/mbta_info.rs b/src/mbta_info.rs index aa92632..b1effbe 100644 --- a/src/mbta_info.rs +++ b/src/mbta_info.rs @@ -3,10 +3,7 @@ use std::{io::{BufWriter, BufReader},path::Path, fs::File, collections::HashMap} use reqwest; use serde_json; use rayon::{ThreadPoolBuilder, prelude::*}; -use std::{ - sync::{Arc, Mutex}, - thread, -}; +use std::sync::{Arc, Mutex}; /// Scrapes MBTA station and vehicle info from their website then stores the information in JSON files and returns in HashMaps /// From 534c0d1507fd76ec15e9c7958b41ab5424b7ab99 Mon Sep 17 00:00:00 2001 From: Rory Coffey Date: Sat, 17 Jul 2021 18:05:26 -0400 Subject: [PATCH 9/9] fixed small errors --- src/main.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index d86786a..f067136 100644 --- a/src/main.rs +++ b/src/main.rs @@ -178,6 +178,7 @@ pub fn arguments() -> Result<(String, String, u8, String), Box Result<(String, String, u8, String), Box