diff options
author | stuebinm | 2022-02-09 02:51:59 +0100 |
---|---|---|
committer | stuebinm | 2022-02-09 02:51:59 +0100 |
commit | cd13c85c69cf761b2da84ad91af64d23a3568aa5 (patch) | |
tree | 4cbdbf6f348508ad7f70aa11450dccc8148ae0cb /src/main.rs | |
parent | cf88935b5245daea51d2b513709b61a0e43483d6 (diff) |
existential types in rust are weird
… lots and lots of traits …
Diffstat (limited to '')
-rw-r--r-- | src/main.rs | 89 |
1 files changed, 38 insertions, 51 deletions
diff --git a/src/main.rs b/src/main.rs index 7e1c85a..9bb2f9e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,8 +2,9 @@ use clap::{Parser, Subcommand}; use colored::*; use serde::Deserialize; -use traveltext::types::*; -use traveltext::{iceportal::*, travelynx::*}; +use traveltext::onboard::{choose_api, OnBoardAPI}; +use traveltext::{traits::*, travelynx::*, types::*}; + #[derive(Parser)] struct Cli { @@ -34,15 +35,21 @@ enum Command { Destination { to: String }, + Station { + station: String + }, Arewethereyet, /// If iceportal.de is available, ask it which train we're in and /// check in - Autocheckin, + Autocheckin { + train: String + }, /// Undo the last checkin (if any). Undo, - /// Query iceportal.de (for testing) - ICEPortal, - Zugportal + /// Query a train's on-board API + Query { + train: String + } } #[derive(Deserialize)] @@ -119,11 +126,9 @@ fn main() -> Result<(), ureq::Error> { None => println!("{}: I have no idea", traveltext) } } - Some(_to) => println!( - "{}: {}", - traveltext, - "you're not checked in".red() - ) + Some(_to) => { + println!("{}: {}", traveltext, "you're not checked in".red()) + } } } Command::Checkin { from, to, train } => { @@ -165,23 +170,25 @@ fn main() -> Result<(), ureq::Error> { println!("{}: {}", traveltext, resp); } - Command::Autocheckin => { - let iceportal: TripInfo = exiting_get_request( - "https://iceportal.de/api1/rs/tripInfo/trip", - cli.debug - ); - - let last_stop = iceportal.guess_last_station().unwrap(); - let train = iceportal.get_train_ref(); + Command::Autocheckin { train } => { + let onboard = match choose_api(&train).request(cli.debug) { + Ok(resp) => resp, + Err(e) => exit_err(&e.to_string(), "failed to parse api response") + }; + let last_stop = onboard.guess_last_station().unwrap(); + let train = onboard.get_train_ref(); println!( "{}: guessing you got onto {} {} in {}, checking in …", - traveltext, train._type, train.no, last_stop + traveltext, + train._type, + train.no, + last_stop.to_fancy_string() ); let resp: Response = exiting_post_request( &format!("{}/api/v1/travel", cli.baseurl), Action::CheckIn { train, - from_station: last_stop, + from_station: last_stop.name().to_owned(), to_station: None, comment: None, token: format!("{}", config.token_travel) @@ -192,51 +199,31 @@ fn main() -> Result<(), ureq::Error> { // eprintln!("{:?}", resp); println!("{}: {}", traveltext, resp); } - Command::ICEPortal => { - match get_request::<TripInfo>( - "https://iceportal.de/api1/rs/tripInfo/trip" - ) { + Command::Query { train } => { + let api: &dyn OnBoardAPI = choose_api(&train); + match api.request(cli.debug) { Ok(resp) => { println!( "{}: Currently in {}\n", traveltext, resp.get_train_ref().to_string().green() ); - println!("guessing last stop was: {:?}\n", resp.guess_last_station()); - println!("Stops:\n{}", resp.trip()) - } - Err(err) => { - if cli.debug { - eprintln!("{:?}", err); - } - println!("either this tool or the iceportal broke or you're not actually on an ICE\n\ - (get a response but couldn't parse it)"); - } - } - } - Command::Zugportal => { - match get_request::<traveltext::zugportal::Journey>( - // "https://iceportal.de/api1/rs/tripInfo/trip" - "https://zugportal.de/prd/zupo-travel-information/api/public/ri/journey" - ) { - Ok(resp) => { println!( - "{}: Currently in {}\n", - traveltext, - resp.get_train_ref().to_string().green() + "guessing last stop was: {:?}\n", + resp.guess_last_station().unwrap().name() ); - // println!("guessing last stop was: {:?}\n", resp.guess_last_station()); - println!("Stops:\n{}", resp.trip()) + // println!("Stops:\n{}", resp.stops()) } Err(err) => { - if cli.debug { - eprintln!("{:?}", err); - } println!("either this tool or the zugportal broke or you're not actually on an ICE\n\ (get a response but couldn't parse it)"); } } } + Command::Station { station } => { + // let c = HafasClient::new(DbProfile, HyperRustlsRequester::new()); + // println!("{:#?}", c.suggestions("München Hbf", None).await.unwrap()); + } } Ok(()) } |