use chrono::{Date, DateTime, FixedOffset};
use serde::Deserialize;
use super::PSR;
use crate::{
common::{PlaceValUnit, ValUnit},
fetch::impl_api,
};
#[derive(Clone, Debug, Deserialize)]
pub struct WeatherForcast {
#[serde(rename = "forecastDate")]
#[serde(deserialize_with = "crate::internal::deserialize::deserialize_yyyymmdd_to_datetime")]
pub date: Date<FixedOffset>,
#[serde(rename = "forecastWeather")]
pub weather: String,
#[serde(rename = "ForecastIcon")]
pub icon: i32,
#[serde(rename = "forecastWind")]
pub wind: String,
#[serde(rename = "forecastMaxtemp")]
pub max_temp: ValUnit,
#[serde(rename = "forecastMintemp")]
pub min_temp: ValUnit,
#[serde(rename = "forecastMaxrh")]
pub max_humidity: ValUnit,
#[serde(rename = "forecastMinrh")]
pub min_humidity: ValUnit,
#[serde(rename = "PSR")]
#[serde(deserialize_with = "crate::internal::deserialize::deserialize_to_psr")]
pub psr: PSR,
}
#[derive(Clone, Debug, Deserialize)]
pub struct SeaTemp {
#[serde(flatten)]
pub temp: PlaceValUnit,
#[serde(rename = "recordTime")]
pub record_time: DateTime<FixedOffset>,
}
#[derive(Clone, Debug, Deserialize)]
pub struct SoilTemp {
#[serde(flatten)]
pub temp: PlaceValUnit,
pub depth: ValUnit,
#[serde(rename = "recordTime")]
pub record_time: DateTime<FixedOffset>,
}
#[derive(Clone, Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct NineDay {
pub general_situation: String,
pub weather_forecast: Vec<WeatherForcast>,
pub sea_temp: SeaTemp,
pub soil_temp: Vec<SoilTemp>,
pub update_time: DateTime<FixedOffset>,
}
impl_api!(NineDay, weather, fnd);