use serde::{Serialize,Deserialize};

#[derive(Serialize, Deserialize)]
pub struct WeatherData {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub winddir: Option<u16>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub windspeedmph: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub windgustmph: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub maxdailygust: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub windgustdir: Option<u16>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub windspdmph_avg2m: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub winddir_avg2m: Option<u16>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub windspdmph_avg10m: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub winddir_avg10m: Option<u16>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub humidity: Option<u8>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub humidityin: Option<u8>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub tempf: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub tempinf: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub hourlyrainin: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dailyrainin: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub hour24rainin: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub weeklyrainin: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub monthlyrainin: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub yearlyrainin: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub eventrainin: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub totalrainin: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub baromrelin: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub baromabsin: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub uv: Option<u8>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub solarradiation: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub co2: Option<u16>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pm25: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pm25_24h: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pm25_in: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pm25_in_24h: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub lightning_day: Option<u32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub lightning_hour: Option<u32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub lightning_time: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub lightning_distance: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub tz: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dateutc: Option<i64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub lastRain: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dewPoint: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub feelsLike: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub date: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub feelsLikein: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dewPointin: Option<f32>,
}
