Hook up the Buienradar provider metric in the forecast

Also, sync up the Luchtmeetnet provider documentation a bit.
This commit is contained in:
Paul van Tilburg 2022-02-13 15:39:09 +01:00
parent 6279d379ab
commit 4232263a45
Signed by untrusted user: paul
GPG Key ID: C6DE073EDA9EEC4D
2 changed files with 13 additions and 3 deletions

View File

@ -21,6 +21,7 @@ use rocket::tokio::{self, select};
use rocket::{get, routes, FromFormField, State};
use self::maps::{Maps, MapsHandle};
use self::providers::buienradar::Item as BuienradarItem;
use self::providers::luchtmeetnet::Item as LuchtmeetnetItem;
pub(crate) mod maps;
@ -69,7 +70,7 @@ struct Forecast {
/// The precipitation (when asked for).
#[serde(skip_serializing_if = "Option::is_none")]
precipitation: Option<()>,
precipitation: Option<Vec<BuienradarItem>>,
/// The UV index (when asked for).
#[serde(rename = "UVI", skip_serializing_if = "Option::is_none")]
@ -154,7 +155,9 @@ async fn forecast(
Metric::PAQI => forecast.paqi = Some(()),
Metric::PM10 => forecast.pm10 = providers::luchtmeetnet::get(lat, lon, metric).await,
Metric::Pollen => forecast.pollen = Some(()),
Metric::Precipitation => forecast.precipitation = Some(()),
Metric::Precipitation => {
forecast.precipitation = providers::buienradar::get(lat, lon, metric).await
}
Metric::UVI => forecast.uvi = Some(()),
}
}

View File

@ -25,12 +25,13 @@ struct Container {
#[derive(Debug, Deserialize, Serialize)]
#[serde(crate = "rocket::serde")]
pub(crate) struct Item {
/// The time for when the value is forecast.
/// The time(stamp) of the forecast.
#[serde(
rename(deserialize = "timestamp_measured"),
serialize_with = "ts_seconds::serialize"
)]
time: DateTime<Utc>,
/// The forecasted value.
///
/// The unit depends on the selected [metric](Metric).
@ -39,6 +40,12 @@ pub(crate) struct Item {
/// Retrieves the Luchtmeetnet forecasted items for the provided position and metric.
///
/// It supports the following metrics:
/// * [`Metric::AQI`]
/// * [`Metric::NO2`]
/// * [`Metric::O3`]
/// * [`Metric::PM10`]
///
/// Returns [`None`] if retrieval or deserialization fails, or if the metric is not supported by
/// this provider.
pub(crate) async fn get(lat: f64, lon: f64, metric: Metric) -> Option<Vec<Item>> {