openmeteo-rs 1.0.0

Rust client for the Open-Meteo weather API.
Documentation
use std::borrow::Cow;

use crate::query::AsApiStr;

/// Daily variables for the general forecast endpoint.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum DailyVar {
    /// WMO weather code.
    WeatherCode,
    /// Maximum 2 m temperature.
    Temperature2mMax,
    /// Minimum 2 m temperature.
    Temperature2mMin,
    /// Mean 2 m temperature.
    Temperature2mMean,
    /// Maximum apparent temperature.
    ApparentTemperatureMax,
    /// Mean apparent temperature.
    ApparentTemperatureMean,
    /// Minimum apparent temperature.
    ApparentTemperatureMin,
    /// Sunrise time.
    Sunrise,
    /// Sunset time.
    Sunset,
    /// Daylight duration.
    DaylightDuration,
    /// Sunshine duration.
    SunshineDuration,
    /// Maximum UV index.
    UvIndexMax,
    /// Maximum clear-sky UV index.
    UvIndexClearSkyMax,
    /// Daily precipitation sum.
    PrecipitationSum,
    /// Daily rain sum.
    RainSum,
    /// Daily showers sum.
    ShowersSum,
    /// Daily snowfall sum.
    SnowfallSum,
    /// Daily precipitation hours.
    PrecipitationHours,
    /// Maximum precipitation probability.
    PrecipitationProbabilityMax,
    /// Mean precipitation probability.
    PrecipitationProbabilityMean,
    /// Minimum precipitation probability.
    PrecipitationProbabilityMin,
    /// Maximum 10 m wind speed.
    WindSpeed10mMax,
    /// Mean 10 m wind speed.
    WindSpeed10mMean,
    /// Minimum 10 m wind speed.
    WindSpeed10mMin,
    /// Maximum 10 m wind gusts.
    WindGusts10mMax,
    /// Mean 10 m wind gusts.
    WindGusts10mMean,
    /// Minimum 10 m wind gusts.
    WindGusts10mMin,
    /// Dominant 10 m wind direction.
    WindDirection10mDominant,
    /// Daily shortwave radiation sum.
    ShortwaveRadiationSum,
    /// Daily sum of FAO reference evapotranspiration.
    Et0FaoEvapotranspiration,
    /// Mean convective available potential energy.
    CapeMean,
    /// Maximum convective available potential energy.
    CapeMax,
    /// Minimum convective available potential energy.
    CapeMin,
    /// Mean cloud cover.
    CloudCoverMean,
    /// Maximum cloud cover.
    CloudCoverMax,
    /// Minimum cloud cover.
    CloudCoverMin,
    /// Mean 2 m dew point.
    DewPoint2mMean,
    /// Maximum 2 m dew point.
    DewPoint2mMax,
    /// Minimum 2 m dew point.
    DewPoint2mMin,
    /// Growing degree days with base 0 and limit 50.
    GrowingDegreeDaysBase0Limit50,
    /// Mean leaf wetness probability.
    LeafWetnessProbabilityMean,
    /// Mean 2 m relative humidity.
    RelativeHumidity2mMean,
    /// Maximum 2 m relative humidity.
    RelativeHumidity2mMax,
    /// Minimum 2 m relative humidity.
    RelativeHumidity2mMin,
    /// Snowfall water equivalent sum.
    SnowfallWaterEquivalentSum,
    /// Mean sea-level pressure.
    PressureMslMean,
    /// Maximum mean sea-level pressure.
    PressureMslMax,
    /// Minimum mean sea-level pressure.
    PressureMslMin,
    /// Mean surface pressure.
    SurfacePressureMean,
    /// Maximum surface pressure.
    SurfacePressureMax,
    /// Minimum surface pressure.
    SurfacePressureMin,
    /// Maximum updraft.
    UpdraftMax,
    /// Mean visibility.
    VisibilityMean,
    /// Minimum visibility.
    VisibilityMin,
    /// Maximum visibility.
    VisibilityMax,
    /// Mean wet-bulb temperature at 2 m.
    WetBulbTemperature2mMean,
    /// Maximum wet-bulb temperature at 2 m.
    WetBulbTemperature2mMax,
    /// Minimum wet-bulb temperature at 2 m.
    WetBulbTemperature2mMin,
    /// Maximum vapour pressure deficit.
    VapourPressureDeficitMax,
}

impl AsApiStr for DailyVar {
    fn as_api_str(&self) -> Cow<'static, str> {
        Cow::Borrowed(match self {
            Self::WeatherCode => "weather_code",
            Self::Temperature2mMax => "temperature_2m_max",
            Self::Temperature2mMin => "temperature_2m_min",
            Self::Temperature2mMean => "temperature_2m_mean",
            Self::ApparentTemperatureMax => "apparent_temperature_max",
            Self::ApparentTemperatureMean => "apparent_temperature_mean",
            Self::ApparentTemperatureMin => "apparent_temperature_min",
            Self::Sunrise => "sunrise",
            Self::Sunset => "sunset",
            Self::DaylightDuration => "daylight_duration",
            Self::SunshineDuration => "sunshine_duration",
            Self::UvIndexMax => "uv_index_max",
            Self::UvIndexClearSkyMax => "uv_index_clear_sky_max",
            Self::PrecipitationSum => "precipitation_sum",
            Self::RainSum => "rain_sum",
            Self::ShowersSum => "showers_sum",
            Self::SnowfallSum => "snowfall_sum",
            Self::PrecipitationHours => "precipitation_hours",
            Self::PrecipitationProbabilityMax => "precipitation_probability_max",
            Self::PrecipitationProbabilityMean => "precipitation_probability_mean",
            Self::PrecipitationProbabilityMin => "precipitation_probability_min",
            Self::WindSpeed10mMax => "wind_speed_10m_max",
            Self::WindSpeed10mMean => "wind_speed_10m_mean",
            Self::WindSpeed10mMin => "wind_speed_10m_min",
            Self::WindGusts10mMax => "wind_gusts_10m_max",
            Self::WindGusts10mMean => "wind_gusts_10m_mean",
            Self::WindGusts10mMin => "wind_gusts_10m_min",
            Self::WindDirection10mDominant => "wind_direction_10m_dominant",
            Self::ShortwaveRadiationSum => "shortwave_radiation_sum",
            Self::Et0FaoEvapotranspiration => "et0_fao_evapotranspiration",
            Self::CapeMean => "cape_mean",
            Self::CapeMax => "cape_max",
            Self::CapeMin => "cape_min",
            Self::CloudCoverMean => "cloud_cover_mean",
            Self::CloudCoverMax => "cloud_cover_max",
            Self::CloudCoverMin => "cloud_cover_min",
            Self::DewPoint2mMean => "dew_point_2m_mean",
            Self::DewPoint2mMax => "dew_point_2m_max",
            Self::DewPoint2mMin => "dew_point_2m_min",
            Self::GrowingDegreeDaysBase0Limit50 => "growing_degree_days_base_0_limit_50",
            Self::LeafWetnessProbabilityMean => "leaf_wetness_probability_mean",
            Self::RelativeHumidity2mMean => "relative_humidity_2m_mean",
            Self::RelativeHumidity2mMax => "relative_humidity_2m_max",
            Self::RelativeHumidity2mMin => "relative_humidity_2m_min",
            Self::SnowfallWaterEquivalentSum => "snowfall_water_equivalent_sum",
            Self::PressureMslMean => "pressure_msl_mean",
            Self::PressureMslMax => "pressure_msl_max",
            Self::PressureMslMin => "pressure_msl_min",
            Self::SurfacePressureMean => "surface_pressure_mean",
            Self::SurfacePressureMax => "surface_pressure_max",
            Self::SurfacePressureMin => "surface_pressure_min",
            Self::UpdraftMax => "updraft_max",
            Self::VisibilityMean => "visibility_mean",
            Self::VisibilityMin => "visibility_min",
            Self::VisibilityMax => "visibility_max",
            Self::WetBulbTemperature2mMean => "wet_bulb_temperature_2m_mean",
            Self::WetBulbTemperature2mMax => "wet_bulb_temperature_2m_max",
            Self::WetBulbTemperature2mMin => "wet_bulb_temperature_2m_min",
            Self::VapourPressureDeficitMax => "vapour_pressure_deficit_max",
        })
    }
}