feat: caching
This commit is contained in:
24
src/main.rs
24
src/main.rs
@@ -196,22 +196,18 @@ async fn weather_overview(q: &str, data: &State, accept: &Accept) -> Page {
|
||||
let q = q.to_lowercase();
|
||||
dwd_stations
|
||||
.range((q.clone(), 0)..=(q, usize::MAX))
|
||||
.map(|(_, station)| station.station.as_str())
|
||||
.map(|(_, station)| station.station.clone())
|
||||
.take(WEATHER_MAX_STATIONS)
|
||||
.collect()
|
||||
}
|
||||
LocationString::Station(q) => q
|
||||
.iter()
|
||||
.map(|s| s.as_str())
|
||||
.take(WEATHER_MAX_STATIONS)
|
||||
.collect(),
|
||||
LocationString::Station(q) => q.iter().take(WEATHER_MAX_STATIONS).cloned().collect(),
|
||||
LocationString::Coords(lat, lon) => vec![
|
||||
dwd_stations
|
||||
.values()
|
||||
.min_by(|a, b| dist2(a, *lat, *lon).total_cmp(&dist2(b, *lat, *lon)))
|
||||
.unwrap()
|
||||
.station
|
||||
.as_str(),
|
||||
.clone(),
|
||||
],
|
||||
};
|
||||
if stations.is_empty() {
|
||||
@@ -220,7 +216,7 @@ async fn weather_overview(q: &str, data: &State, accept: &Accept) -> Page {
|
||||
"could not find any such station".to_owned(),
|
||||
)));
|
||||
}
|
||||
match crate::dwd::forecast(&stations, dwd_cache).await {
|
||||
match crate::dwd::forecast(stations, dwd_cache).await {
|
||||
Ok(forecast) => {
|
||||
fn forecasts(
|
||||
forecast: &HashMap<String, ForecastDatas>,
|
||||
@@ -230,7 +226,7 @@ async fn weather_overview(q: &str, data: &State, accept: &Accept) -> Page {
|
||||
.flat_map(|(_, forecast)| forecast.forecasts())
|
||||
}
|
||||
let mut timer = TimeStepper::invalid();
|
||||
for forecast in forecasts(&forecast) {
|
||||
for forecast in forecasts(forecast) {
|
||||
timer.add(forecast.time_start(), forecast.time_step());
|
||||
}
|
||||
if timer.count() == 0 {
|
||||
@@ -274,7 +270,7 @@ async fn weather_overview(q: &str, data: &State, accept: &Accept) -> Page {
|
||||
(35.0, "#FF0"),
|
||||
],
|
||||
|time| {
|
||||
avg(forecasts(&forecast)
|
||||
avg(forecasts(forecast)
|
||||
.flat_map(move |forecast| forecast.temperature(time)))
|
||||
},
|
||||
additional,
|
||||
@@ -286,7 +282,7 @@ async fn weather_overview(q: &str, data: &State, accept: &Accept) -> Page {
|
||||
(i(), Some(0.0), None),
|
||||
&[(0.0, "#333"), (1.0, "#446"), (5.0, "#22A"), (20.0, "#00F")],
|
||||
|time| {
|
||||
avg(forecasts(&forecast)
|
||||
avg(forecasts(forecast)
|
||||
.flat_map(move |forecast| forecast.precipitation(time)))
|
||||
},
|
||||
additional,
|
||||
@@ -298,7 +294,7 @@ async fn weather_overview(q: &str, data: &State, accept: &Accept) -> Page {
|
||||
(i(), Some(0.0), None),
|
||||
&[(0.0, "#333"), (60.0, "#DD0"), (360.0, "#F90")],
|
||||
|time| {
|
||||
avg(forecasts(&forecast)
|
||||
avg(forecasts(forecast)
|
||||
.flat_map(move |forecast| forecast.sunshine(time)))
|
||||
},
|
||||
additional,
|
||||
@@ -310,7 +306,7 @@ async fn weather_overview(q: &str, data: &State, accept: &Accept) -> Page {
|
||||
(i(), Some(0.0), Some(100.0)),
|
||||
&[(0.0, "#884"), (40.0, "#333"), (100.0, "#A0A")],
|
||||
|time| {
|
||||
avg(forecasts(&forecast)
|
||||
avg(forecasts(forecast)
|
||||
.flat_map(move |forecast| forecast.humidity(time)))
|
||||
},
|
||||
additional,
|
||||
@@ -329,7 +325,7 @@ async fn weather_overview(q: &str, data: &State, accept: &Accept) -> Page {
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(e) => Err(Err((Status::InternalServerError, e))),
|
||||
Err(e) => Err(Err((Status::InternalServerError, e.clone()))),
|
||||
}
|
||||
} else {
|
||||
Err(Err((
|
||||
|
||||
Reference in New Issue
Block a user