#[derive(Copy, Clone, Debug, Deserialize, Eq, Hash, PartialEq, PartialOrd, Ord, Serialize)]
pub enum Icon {
#[serde(rename = "clear-day")]
ClearDay,
#[serde(rename = "clear-night")]
ClearNight,
#[serde(rename = "cloudy")]
Cloudy,
#[serde(rename = "fog")]
Fog,
#[serde(rename = "hail")]
Hail,
#[serde(rename = "partly-cloudy-day")]
PartlyCloudyDay,
#[serde(rename = "partly-cloudy-night")]
PartlyCloudyNight,
#[serde(rename = "rain")]
Rain,
#[serde(rename = "sleet")]
Sleet,
#[serde(rename = "snow")]
Snow,
#[serde(rename = "thunderstorm")]
Thunderstorm,
#[serde(rename = "tornado")]
Tornado,
#[serde(rename = "wind")]
Wind,
}
#[derive(Copy, Clone, Debug, Deserialize, Eq, Hash, PartialEq, PartialOrd, Ord, Serialize)]
pub enum PrecipitationType {
#[serde(rename = "rain")]
Rain,
#[serde(rename = "sleet")]
Sleet,
#[serde(rename = "snow")]
Snow,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all="lowercase")]
pub enum Severity {
Advisory,
Watch,
Warning,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Alert {
pub expires: u64,
pub description: String,
pub title: String,
pub uri: String,
pub regions: Vec<String>,
pub time: u64,
pub severity: Severity,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Datablock {
pub data: Option<Vec<Datapoint>>,
pub icon: Option<Icon>,
pub summary: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Datapoint {
pub apparent_temperature_max_time: Option<u64>,
pub apparent_temperature_max: Option<f64>,
pub apparent_temperature_min_time: Option<u64>,
pub apparent_temperature_min: Option<f64>,
pub apparent_temperature: Option<f64>,
pub cloud_cover_error: Option<f64>,
pub cloud_cover: Option<f64>,
pub dew_point_error: Option<f64>,
pub dew_point: Option<f64>,
pub humidity_error: Option<f64>,
pub humidity: Option<f64>,
pub icon: Option<Icon>,
pub moon_phase: Option<f64>,
pub nearest_storm_bearing: Option<f64>,
pub nearest_storm_distance: Option<f64>,
pub ozone_error: Option<f64>,
pub ozone: Option<f64>,
pub precip_accumulation_error: Option<f64>,
pub precip_accumulation: Option<f64>,
pub precip_intensity_error: Option<f64>,
pub precip_intensity_max_error: Option<f64>,
pub precip_intensity_max_time: Option<u64>,
pub precip_intensity_max: Option<f64>,
pub precip_intensity: Option<f64>,
pub precip_probability_error: Option<f64>,
pub precip_probability: Option<f64>,
pub precip_type: Option<PrecipitationType>,
pub pressure_error: Option<f64>,
pub pressure: Option<f64>,
pub summary: Option<String>,
pub sunrise_time: Option<u64>,
pub sunset_time: Option<u64>,
pub temperature_low: Option<f64>,
pub temperature_low_time: Option<u64>,
pub temperature_high: Option<f64>,
pub temperature_high_time: Option<u64>,
pub temperature_max_error: Option<f64>,
pub temperature_max_time: Option<u64>,
pub temperature_max: Option<f64>,
pub temperature_min_error: Option<f64>,
pub temperature_min_time: Option<u64>,
pub temperature_min: Option<f64>,
pub temperature_error: Option<f64>,
pub temperature: Option<f64>,
pub time: u64,
pub uv_index: Option<u64>,
pub uv_index_time: Option<u64>,
pub visibility_error: Option<f64>,
pub visibility: Option<f64>,
pub wind_bearing_error: Option<f64>,
pub wind_bearing: Option<f64>,
pub wind_gust: Option<f64>,
pub wind_gust_time: Option<u64>,
pub wind_speed_error: Option<f64>,
pub wind_speed: Option<f64>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "kebab-case")]
pub struct Flags {
pub darksky_stations: Option<Vec<String>>,
pub darksky_unavailable: Option<String>,
pub datapoint_stations: Option<Vec<String>>,
pub isd_stations: Option<Vec<String>>,
pub lamp_stations: Option<Vec<String>>,
pub metar_stations: Option<Vec<String>>,
pub metno_license: Option<String>,
pub sources: Option<Vec<String>>,
pub units: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Forecast {
#[serde(default)]
pub alerts: Vec<Alert>,
pub currently: Option<Datapoint>,
pub daily: Option<Datablock>,
pub flags: Option<Flags>,
pub hourly: Option<Datablock>,
pub latitude: f64,
pub longitude: f64,
pub minutely: Option<Datablock>,
pub offset: Option<f64>,
pub timezone: String,
}