use std::collections::HashMap; use chrono::{DateTime, Local}; use serde::Deserialize; #[derive(Deserialize)] pub struct DeparturesMerklingen { #[serde(rename = "entries")] pub entries: Vec>, } #[derive(Deserialize)] pub struct DeparturesMerklingen1 { #[serde(rename = "timeSchedule")] pub time_schedule: Option>, #[serde(rename = "timeDelayed")] pub time_delayed: Option>, #[serde(rename = "platform")] pub platform: Option, #[serde(rename = "platformSchedule")] pub platform_schedule: Option, #[serde(rename = "canceled")] pub canceled: Option, #[serde(rename = "lineName")] pub line_name: Option, #[serde(rename = "stopPlace")] pub stop_place: Option, #[serde(rename = "destination")] pub destination: Option, #[serde(rename = "messages")] pub messages: Option>>, } #[derive(Deserialize)] pub struct DeparturesMerklingen2 { #[serde(rename = "name")] pub name: Option, #[serde(rename = "canceled")] pub canceled: Option, } #[derive(Deserialize)] pub struct DeparturesMerklingen3 { #[serde(rename = "text")] pub text: Option, #[serde(rename = "important")] pub important: Option, } pub async fn departures_merklingen() -> Result { let url = format!( r#"https://www.bahnhof.de/api/boards/departures?evaNumbers=8003983&filterTransports=REGIONAL_TRAIN&duration=120&stationCategory=5&locale=de&sortBy=TIME_SCHEDULE"# ); match reqwest::get(&url).await { Ok(response) => match response.text().await { Ok(response) => { match serde_json::from_str::(&response) { Ok(response) => Ok(response), Err(e) => Err(format!("Couldn't parse HTTP response from URL {url:?}: {e}\nResponse was (raw):\n{response}"))?, } } Err(e) => Err(format!("Couldn't get HTTP response from URL {url:?}: {e}"))?, }, Err(e) => Err(format!("Couldn't make GET request to URL {url:?}: {e}"))?, } }