openmeteo-rs 1.0.0

Rust client for the Open-Meteo weather API.
Documentation
//! Typed Rust client for the Open-Meteo API.
//!
//! The current surface includes the general forecast, archive, historical
//! forecast, previous model runs, ensemble forecast, seasonal forecast, climate
//! projections, satellite radiation, flood forecast, marine forecast,
//! air-quality, geocoding, and elevation endpoints. Request variables are typed
//! and weather-like responses use nullable column-oriented data.
//!
//! Most users should import types from the crate root:
//! `Client`, endpoint builders, request variable enums such as [`HourlyVar`],
//! response carriers such as [`ForecastResponse`], and the crate-wide
//! [`Result`] alias are all re-exported here.
//!
//! Open-Meteo data is licensed under CC BY 4.0. Applications using the API
//! should include attribution such as `Weather data by Open-Meteo.com`.
//!
//! ```
//! use openmeteo_rs::{Client, HourlyVar};
//!
//! # async fn example() -> openmeteo_rs::Result<()> {
//! let client = Client::new();
//! let forecast = client
//!     .forecast(52.52, 13.41)
//!     .hourly([HourlyVar::Temperature2m])
//!     .forecast_days(1)
//!     .send()
//!     .await?;
//!
//! if let Some(hourly) = forecast.hourly {
//!     let temps = hourly.temperature_2m().unwrap().values_f32().unwrap();
//!     let observed = temps.iter().flatten().count();
//!     println!("{} hourly temperatures, {} observed", temps.len(), observed);
//! }
//! # Ok(())
//! # }
//! ```

#![cfg_attr(docsrs, feature(doc_cfg))]
#![forbid(unsafe_code)]
#![warn(missing_docs)]

#[cfg(all(feature = "rustls-tls", feature = "native-tls"))]
compile_error!("features `rustls-tls` and `native-tls` are mutually exclusive");

#[cfg(not(feature = "time"))]
compile_error!("feature `time` must be enabled");

mod client;
mod error;
mod json_sanitize;
mod query;

mod endpoints;
pub mod response;
pub mod units;
pub mod variables;
pub mod weather_code;

pub use client::{Client, ClientBuilder};
pub use endpoints::air_quality::AirQualityBuilder;
pub use endpoints::archive::ArchiveBuilder;
pub use endpoints::climate::ClimateBuilder;
pub use endpoints::ensemble::EnsembleBuilder;
pub use endpoints::flood::FloodBuilder;
pub use endpoints::forecast::{ForecastBatchBuilder, ForecastBuilder};
pub use endpoints::geocoding::{GeocodedLocation, GeocodingBuilder};
pub use endpoints::historical_forecast::HistoricalForecastBuilder;
pub use endpoints::marine::MarineBuilder;
pub use endpoints::previous_runs::PreviousRunsBuilder;
pub use endpoints::satellite_radiation::SatelliteRadiationBuilder;
pub use endpoints::seasonal::SeasonalBuilder;
pub use error::{Error, HttpError, Result};
pub use response::{
    CurrentData, DailyData, ForecastResponse, HourlyData, Minutely15Data, MonthlyData,
    SeriesValues, Variable, VariableDescriptor, VariableSeries,
};
pub use units::{
    CellSelection, LengthUnit, PrecipitationUnit, TemperatureUnit, TimeFormat, Timezone,
    WindSpeedUnit,
};
pub use variables::{
    Aggregation, AirQualityCurrentVar, AirQualityDomain, AirQualityHourlyVar, ArchiveModel,
    ClimateDailyVar, ClimateModel, CurrentVar, DailyVar, EnsembleModel, FloodDailyVar, FloodModel,
    HourlyVar, MarineCurrentVar, MarineDailyVar, MarineHourlyVar, MarineMinutely15Var, MarineModel,
    Minutely15Var, PressureLevel, SatelliteRadiationHourlyVar, SatelliteRadiationModel,
    SatelliteRadiationTemporalResolution, SeasonalModel, SeasonalMonthlyVar, SoilMoistureDepth,
    SoilTemperatureDepth, TowerLevel, WeatherModel,
};
pub use weather_code::{Severity, WmoCode};

/// Response returned by archive requests.
pub type ArchiveResponse = ForecastResponse;

/// Response returned by historical forecast requests.
pub type HistoricalForecastResponse = ForecastResponse;

/// Response returned by previous-runs requests.
pub type PreviousRunsResponse = ForecastResponse;

/// Response returned by ensemble forecast requests.
pub type EnsembleResponse = ForecastResponse;

/// Response returned by seasonal forecast requests.
pub type SeasonalResponse = ForecastResponse;

/// Response returned by climate projection requests.
pub type ClimateResponse = ForecastResponse;

/// Response returned by satellite-radiation requests.
pub type SatelliteRadiationResponse = ForecastResponse;

/// Response returned by flood requests.
pub type FloodResponse = ForecastResponse;

/// Response returned by marine requests.
pub type MarineResponse = ForecastResponse;

/// Response returned by air-quality requests.
pub type AirQualityResponse = ForecastResponse;