From 002b7d02d57d52bdb5309092285ea94c4cd68f7e Mon Sep 17 00:00:00 2001 From: stuebinm Date: Mon, 9 Sep 2024 17:20:01 +0200 Subject: update dependencies, hafas-rs -> railway-provider-hafas turns out the old hafas-rs project that started with trainsear.ch has since been picked up by some gnome people who use it for their (creatively named) Railway app. It's a lot more general now, though the documentation doesn't seem to have improved much 🙃 --- src/main.rs | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 7327785..3c5fc5f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,18 +1,15 @@ -use chrono::{DateTime, Utc}; +use chrono::NaiveDateTime; use clap::{Parser, Subcommand}; use colored::*; +use railway_provider_hafas::client::HafasClient; +use railway_provider_hafas::profile::db::DbProfile; use serde::Deserialize; use serde_json::json; use traveltext::onboard::{choose_api, OnBoardAPI}; use traveltext::{traits::*, travelynx::*, types::*}; -use hafas_rs::api::journeys::*; -use hafas_rs::api::locations::*; -use hafas_rs::client::HafasClient; -use hafas_rs::profile::db::DbProfile; -use hafas_rs::requester::hyper::HyperRustlsRequester; -use hafas_rs::{Place, ProductsSelection}; +use railway_core::{HyperRustlsRequesterBuilder, IntermediateLocation, JourneysOptions, LocationsOptions, Place, ProductsSelection, Provider}; #[derive(Parser)] struct Cli { @@ -54,7 +51,7 @@ enum Command { /// destination station's name (fuzzy-matched) to_name: String, /// departure time; takes the next available connection - time: Option>, + time: Option, /// set the dryRun flag to 'true' when importing to travelynx #[clap(short = 'd', long = "dry-run")] dry_run: bool, @@ -283,11 +280,11 @@ async fn main() -> Result<(), ureq::Error> { dry_run, import } => { - let c = HafasClient::new(DbProfile, HyperRustlsRequester::new()); + let c = HafasClient::new(DbProfile, HyperRustlsRequesterBuilder::default()); let from = &c .locations(LocationsOptions { query: from_name, - results: None, + results: 0, // TODO: respect locale set language: Some("de".to_string()) }) @@ -297,19 +294,19 @@ async fn main() -> Result<(), ureq::Error> { let to = &c .locations(LocationsOptions { query: to_name, - results: None, + results: 0, language: None }) .await .unwrap()[0]; + let tz_str = iana_time_zone::get_timezone().unwrap(); + let tz: chrono_tz::Tz = tz_str.parse().unwrap(); + let opts = JourneysOptions { - products: ProductsSelection { - bus: Some(false), - ..ProductsSelection::default() - }, - departure: time.map(|t| t.timestamp()), //Some(1650536340); - stopovers: Some(true), + products: ProductsSelection::all(), + departure: time.map(|naive| naive.and_local_timezone(tz).unwrap()), //Some(1650536340); + stopovers: true, language: Some("de".to_string()), ..JourneysOptions::default() }; @@ -321,13 +318,16 @@ async fn main() -> Result<(), ureq::Error> { .journeys[0] .legs[0]; - let stops = journey.stopovers.as_ref().unwrap(); + let stops = journey.intermediate_locations + .iter() + .filter_map(|l| match l { IntermediateLocation::Stop(s) => Some(s), _ => None }) + .collect::>(); println!("{}: found this trip:", traveltext); - for stop in stops { - match &stop.stop { - Place::Stop(station) => { + for stop in &stops { + match &stop.place { + Place::Station(station) => { println!("{}", station.name.as_ref().unwrap()) } _ => panic!("this train stops somewhere that's not a station??") @@ -340,15 +340,15 @@ async fn main() -> Result<(), ureq::Error> { let travelynx = json!({ "token": config.token_import.unwrap(), "dryRun": dry_run, - "fromStation": match &stops[0].stop { - Place::Stop (station) => json!({ + "fromStation": match &stops[0].place { + Place::Station (station) => json!({ "name":station.name, "scheduledTime":stops[0].departure.unwrap().timestamp() }), _ => panic!("this trip lacks a first station?") }, - "toStation": match &stops[stops.len()-1].stop { - Place::Stop (station) => json!({ + "toStation": match &stops[stops.len()-1].place { + Place::Station (station) => json!({ "name": station.name, "scheduledTime": stops[stops.len()-1].arrival.unwrap().timestamp() }), @@ -364,8 +364,8 @@ async fn main() -> Result<(), ureq::Error> { }, "intermediateStops": &stops[1..stops.len()-1] .iter() - .filter_map(|s| match &s.stop { - Place::Stop (station) => station.name.as_ref(), + .filter_map(|s| match &s.place { + Place::Station (station) => station.name.as_ref(), _ => None }) .collect::>() -- cgit v1.2.3