Skip to main content

openmeteo_rs/
lib.rs

1//! Typed Rust client for the Open-Meteo API.
2//!
3//! The current surface includes the general forecast, archive, historical
4//! forecast, previous model runs, ensemble forecast, seasonal forecast, climate
5//! projections, satellite radiation, flood forecast, marine forecast,
6//! air-quality, geocoding, and elevation endpoints. Request variables are typed
7//! and weather-like responses use nullable column-oriented data.
8//!
9//! Most users should import types from the crate root:
10//! `Client`, endpoint builders, request variable enums such as [`HourlyVar`],
11//! response carriers such as [`ForecastResponse`], and the crate-wide
12//! [`Result`] alias are all re-exported here.
13//!
14//! Open-Meteo data is licensed under CC BY 4.0. Applications using the API
15//! should include attribution such as `Weather data by Open-Meteo.com`.
16//!
17//! ```
18//! use openmeteo_rs::{Client, HourlyVar};
19//!
20//! # async fn example() -> openmeteo_rs::Result<()> {
21//! let client = Client::new();
22//! let forecast = client
23//!     .forecast(52.52, 13.41)
24//!     .hourly([HourlyVar::Temperature2m])
25//!     .forecast_days(1)
26//!     .send()
27//!     .await?;
28//!
29//! if let Some(hourly) = forecast.hourly {
30//!     let temps = hourly.temperature_2m().unwrap().values_f32().unwrap();
31//!     let observed = temps.iter().flatten().count();
32//!     println!("{} hourly temperatures, {} observed", temps.len(), observed);
33//! }
34//! # Ok(())
35//! # }
36//! ```
37
38#![cfg_attr(docsrs, feature(doc_cfg))]
39#![forbid(unsafe_code)]
40#![warn(missing_docs)]
41
42#[cfg(all(feature = "rustls-tls", feature = "native-tls"))]
43compile_error!("features `rustls-tls` and `native-tls` are mutually exclusive");
44
45#[cfg(not(feature = "time"))]
46compile_error!("feature `time` must be enabled");
47
48mod client;
49mod error;
50mod json_sanitize;
51mod query;
52
53mod endpoints;
54pub mod response;
55pub mod units;
56pub mod variables;
57pub mod weather_code;
58
59pub use client::{Client, ClientBuilder};
60pub use endpoints::air_quality::AirQualityBuilder;
61pub use endpoints::archive::ArchiveBuilder;
62pub use endpoints::climate::ClimateBuilder;
63pub use endpoints::ensemble::EnsembleBuilder;
64pub use endpoints::flood::FloodBuilder;
65pub use endpoints::forecast::{ForecastBatchBuilder, ForecastBuilder};
66pub use endpoints::geocoding::{GeocodedLocation, GeocodingBuilder};
67pub use endpoints::historical_forecast::HistoricalForecastBuilder;
68pub use endpoints::marine::MarineBuilder;
69pub use endpoints::previous_runs::PreviousRunsBuilder;
70pub use endpoints::satellite_radiation::SatelliteRadiationBuilder;
71pub use endpoints::seasonal::SeasonalBuilder;
72pub use error::{Error, HttpError, Result};
73pub use response::{
74    CurrentData, DailyData, ForecastResponse, HourlyData, Minutely15Data, MonthlyData,
75    SeriesValues, Variable, VariableDescriptor, VariableSeries,
76};
77pub use units::{
78    CellSelection, LengthUnit, PrecipitationUnit, TemperatureUnit, TimeFormat, Timezone,
79    WindSpeedUnit,
80};
81pub use variables::{
82    Aggregation, AirQualityCurrentVar, AirQualityDomain, AirQualityHourlyVar, ArchiveModel,
83    ClimateDailyVar, ClimateModel, CurrentVar, DailyVar, EnsembleModel, FloodDailyVar, FloodModel,
84    HourlyVar, MarineCurrentVar, MarineDailyVar, MarineHourlyVar, MarineMinutely15Var, MarineModel,
85    Minutely15Var, PressureLevel, SatelliteRadiationHourlyVar, SatelliteRadiationModel,
86    SatelliteRadiationTemporalResolution, SeasonalModel, SeasonalMonthlyVar, SoilMoistureDepth,
87    SoilTemperatureDepth, TowerLevel, WeatherModel,
88};
89pub use weather_code::{Severity, WmoCode};
90
91/// Response returned by archive requests.
92pub type ArchiveResponse = ForecastResponse;
93
94/// Response returned by historical forecast requests.
95pub type HistoricalForecastResponse = ForecastResponse;
96
97/// Response returned by previous-runs requests.
98pub type PreviousRunsResponse = ForecastResponse;
99
100/// Response returned by ensemble forecast requests.
101pub type EnsembleResponse = ForecastResponse;
102
103/// Response returned by seasonal forecast requests.
104pub type SeasonalResponse = ForecastResponse;
105
106/// Response returned by climate projection requests.
107pub type ClimateResponse = ForecastResponse;
108
109/// Response returned by satellite-radiation requests.
110pub type SatelliteRadiationResponse = ForecastResponse;
111
112/// Response returned by flood requests.
113pub type FloodResponse = ForecastResponse;
114
115/// Response returned by marine requests.
116pub type MarineResponse = ForecastResponse;
117
118/// Response returned by air-quality requests.
119pub type AirQualityResponse = ForecastResponse;