Candifloss 01c12478f6 Separate config loading from API library
- Create new library crate for config parsing
- Modularity & flexibility
2025-09-20 08:41:28 +05:30

46 lines
1.1 KiB
Rust

use serde::Deserialize;
use owm_api25::query::{QueryParams, Units};
#[derive(Debug, Deserialize)]
pub struct Free25Query {
pub api_key: String,
pub city_id: Option<String>,
pub city_name: Option<String>,
pub lat: Option<f32>,
pub lon: Option<f32>,
pub zip: Option<String>,
#[serde(default = "default_units")]
pub units: String, // "metric", "imperial", "standard"
#[serde(default = "default_lang")]
pub lang: String, // default "en"
}
fn default_units() -> String {
"standard".into()
}
fn default_lang() -> String {
"en".into()
}
impl From<Free25Query> for QueryParams {
fn from(cfg: Free25Query) -> Self {
let units = match cfg.units.as_str() {
"metric" => Units::Metric,
"imperial" => Units::Imperial,
_ => Units::Standard,
};
QueryParams {
api_key: cfg.api_key,
city_id: cfg.city_id,
city_name: cfg.city_name,
lat: cfg.lat,
lon: cfg.lon,
zip: cfg.zip,
units,
lang: cfg.lang,
}
}
}