diff --git a/src/main.rs b/src/main.rs index 91e84c7..a06e93a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,7 @@ use axum::{ State, Path, }, + http::StatusCode, response::Html, routing::get, Router, @@ -142,9 +143,9 @@ async fn route_index( async fn route_station_overview( State(state): State, Path(station): Path -) -> Result, String> { +) -> Result, (StatusCode, String)> { if !state.stations.contains_key(&station) { - return Err(String::from("")); + return Err((StatusCode::NOT_FOUND, String::from("Unknown departing station"))); } let mut out = String::new(); @@ -163,40 +164,40 @@ async fn route_station_overview( async fn route_station_to_dest_station( State(state): State, Path((station_id, dest_station_id)): Path<(String, String)> -) -> Result { +) -> Result { if !state.stations.contains_key(&station_id) { - return Err(String::from("")); + return Err((StatusCode::NOT_FOUND, String::from("Unknown departing station"))); } if !state.stations.contains_key(&dest_station_id) { - return Err(String::from("")); + return Err((StatusCode::NOT_FOUND, String::from("Unknown destination station"))); } let station_properties = match state.stations.get(&station_id) { Some(v) => v, - None => return Err(String::from("")), + None => return Err((StatusCode::INTERNAL_SERVER_ERROR, String::from("Station properties for departing station missing"))), }; let dest_station_properties = match state.stations.get(&dest_station_id) { Some(v) => v, - None => return Err(String::from("")), + None => return Err((StatusCode::INTERNAL_SERVER_ERROR, String::from("Station properties for destination station missing"))), }; let client = reqwest::Client::new(); let stationdata_req = client.get(format!("https://bahn.expert/api/iris/v2/abfahrten/{}?lookahead=150&lookbehind=10", station_properties.code)) .send().await - .map_err(|_err| String::from("Station Data cannot be fetched"))?; + .map_err(|_err| (StatusCode::INTERNAL_SERVER_ERROR, String::from("Station Data cannot be fetched")))?; if stationdata_req.status() != reqwest::StatusCode::OK { - return Err(String::from("Station Data returned an unexpected response")); + return Err((StatusCode::INTERNAL_SERVER_ERROR, String::from("Station Data returned an unexpected response"))); } let stationdata_body = stationdata_req.text().await - .map_err(|_err| "Station Data cannot be read")?; + .map_err(|_err| (StatusCode::INTERNAL_SERVER_ERROR, String::from("Station Data cannot be read")))?; let stationdata: Departures = serde_json::from_str(stationdata_body.as_str()) - .map_err(|err| format!("{}", err))?; + .map_err(|err| (StatusCode::INTERNAL_SERVER_ERROR, format!("{}", err)))?; let mut out = String::new();