54 lines
1.5 KiB
Rust
54 lines
1.5 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
/// Weather condition information
|
|
///
|
|
/// Contains details about current weather conditions including
|
|
/// human-readable descriptions and icon identifiers.
|
|
///
|
|
/// See: [Weather condition codes](https://openweathermap.org/weather-conditions)
|
|
#[derive(Debug, Clone, Deserialize, Serialize, Default, PartialEq)]
|
|
pub struct Weather {
|
|
/// Weather condition ID
|
|
///
|
|
/// See: [Weather condition codes](https://openweathermap.org/weather-conditions)
|
|
pub id: u32,
|
|
|
|
/// Group of weather parameters (e.g. Rain, Snow, Clouds)
|
|
pub main: String,
|
|
|
|
/// Human-readable weather condition description
|
|
///
|
|
/// This field can be localized based on the API request.
|
|
pub description: String,
|
|
|
|
/// Weather icon ID (for retrieving icon assets)
|
|
///
|
|
/// Combine with base URL: `https://openweathermap.org/img/wn/{icon}@2x.png`
|
|
pub icon: String,
|
|
}
|
|
|
|
impl Weather {
|
|
/// Returns the URL to the weather icon image
|
|
///
|
|
/// # Example
|
|
/// ```
|
|
/// use owm_api25::current::Weather;
|
|
///
|
|
/// let weather = Weather {
|
|
/// id: 501,
|
|
/// main: "Rain".to_string(),
|
|
/// description: "moderate rain".to_string(),
|
|
/// icon: "10d".to_string(),
|
|
/// };
|
|
///
|
|
/// assert_eq!(
|
|
/// weather.icon_url(),
|
|
/// "https://openweathermap.org/img/wn/10d@2x.png"
|
|
/// );
|
|
/// ```
|
|
#[must_use]
|
|
pub fn icon_url(&self) -> String {
|
|
format!("https://openweathermap.org/img/wn/{}@2x.png", self.icon)
|
|
}
|
|
}
|