Expand description
Rust client for ECMWF Open Data.
This crate is a Rust re-implementation of the core ideas from the upstream
ecmwf-opendata Python package: you express a MARS-like request (keyword/value
pairs), URLs are derived from that request, and downloads can either fetch whole
files or use the .index sidecar to download only matching fields via HTTP
range requests.
Quick start
use ecmwf_opendata::{Client, ClientOptions, Request};
let opts = ClientOptions {
// Python: Client(source="ecmwf", model="ifs", resol="0p25", ...)
source: "ecmwf".to_string(),
model: "ifs".to_string(),
resol: "0p25".to_string(),
preserve_request_order: false,
infer_stream_keyword: true,
..ClientOptions::default()
};
let client = Client::new(opts)?;
// Builder style
let req = Request::new().r#type("fc").param("msl").step(240).target("data.grib2");
let result = client.retrieve_request(req)?;
println!("{} bytes", result.size_bytes);Pairs (kwargs-like) style
use ecmwf_opendata::{Client, ClientOptions, RequestValue};
let client = Client::new(ClientOptions::default())?;
let result = client.retrieve_pairs([
("type", RequestValue::from("fc")),
("param", RequestValue::from("msl")),
("step", 240.into()),
("target", "data.grib2".into()),
])?;
println!("{}", result.datetime);Macro (closest to Python client.retrieve(time=..., ...))
use ecmwf_opendata::{retrieve, Client, ClientOptions};
let client = Client::new(ClientOptions::default())?;
let steps: Vec<i32> = (12..=360).step_by(12).collect();
let result = retrieve!(
client,
time = 0,
stream = "enfo",
type = "ep",
step = steps,
param = ["tpg1", "tpg5", "10fgg10"],
target = "data.grib2",
)?;
println!("{}", result.datetime);GUI/config style (string key/value pairs)
use ecmwf_opendata::{Client, ClientOptions, Request};
let client = Client::new(ClientOptions::default())?;
let req = Request::from_str_pairs([
("time", "0"),
("stream", "enfo"),
("type", "ep"),
("step", "12,24,36"),
("param", "tpg1,tpg5,10fgg10"),
("target", "data.grib2"),
]);
let _ = client.retrieve_request(req)?;Notes:
- Downloads are governed by ECMWF Open Data terms (e.g. attribution requirements).
- Network conditions vary by mirror/source; if
latest()cannot be established, specifydate/timeexplicitly in your request. - In line with the upstream Python client, omitting
stepmeans “retrieve all available steps”.
Macros§
- request
- Build a
Requestusing a kwargs-like syntax. - retrieve
- Python-like
client.retrieve(...)convenience using kwargs-like syntax.
Structs§
- Client
- Client
Options - Request
- MARS-like request expressed as keyword/value pairs.
- Result
Enums§
- Error
- Request
Value - Value type for a request keyword.