1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
use serde::Deserialize; /// Location coordinates #[derive(Deserialize, Debug)] pub struct Coord { /// geo location, longitude pub lon: f64, /// geo location, latitude pub lat: f64, } /// Weather condition description #[derive(Deserialize, Debug)] pub struct Weather { /// Weather condition id pub id: u64, /// Group of weather parameters (Rain, Snow, Extreme etc.) pub main: String, /// Weather condition pub description: String, /// Weather icon id pub icon: String, } /// Detailed weather report #[derive(Deserialize, Debug)] pub struct Main { /// Temperature. Unit Default: Kelvin, Metric: Celsius, Imperial: Fahrenheit. pub temp: f64, /// Temperature. This temperature parameter accounts for the human perception of weather. /// Unit Default: Kelvin, Metric: Celsius, Imperial: Fahrenheit. pub feels_like: f64, /// Atmospheric pressure (on the sea level, if there is no sea_level or grnd_level data), hPa pub pressure: f64, /// Humidity, % pub humidity: f64, /// Minimum temperature at the moment. /// This is minimal currently observed temperature (within large megalopolises and urban areas). /// Unit Default: Kelvin, Metric: Celsius, Imperial: Fahrenheit. pub temp_min: f64, /// Maximum temperature at the moment. /// This is maximal currently observed temperature (within large megalopolises and urban areas). /// Unit Default: Kelvin, Metric: Celsius, Imperial: Fahrenheit. pub temp_max: f64, /// Atmospheric pressure on the sea level, hPa pub sea_level: Option<f64>, /// Atmospheric pressure on the ground level, hPa pub grnd_level: Option<f64>, } /// Detailed wind report #[derive(Deserialize, Debug)] pub struct Wind { /// Wind speed. Unit Default: meter/sec, Metric: meter/sec, Imperial: miles/hour. pub speed: f64, /// Wind direction, degrees (meteorological) pub deg: f64, /// Wind gust. Unit Default: meter/sec, Metric: meter/sec, Imperial: miles/hour pub gust: Option<f64>, } /// Detailed clouds report #[derive(Deserialize, Debug)] pub struct Clouds { /// Cloudiness, % pub all: f64, } /// Rain or snow volume report #[derive(Deserialize, Debug)] pub struct Volume { /// Volume for the last 1 hour, mm #[serde(rename = "1h")] pub h1: Option<f64>, /// Volume for the last 3 hours, mm #[serde(rename = "3h")] pub h3: Option<f64>, } /// Additional information #[derive(Deserialize, Debug)] pub struct Sys { /// Internal parameter #[serde(rename = "type")] pub type_: Option<u64>, /// Internal parameter pub id: Option<u64>, /// Internal parameter pub message: Option<f64>, /// Country code (GB, JP etc.) pub country: String, /// Sunrise time, unix, UTC pub sunrise: i64, /// Sunset time, unix, UTC pub sunset: i64, } #[derive(Deserialize, Debug)] /// current weather report in a nested struct pub struct CurrentWeather { /// report origin coordinates pub coord: Coord, /// vector with one item of weather condition descriptions pub weather: Vec<Weather>, /// Internal parameter pub base: String, /// detailed weather report pub main: Main, /// Visibility, meter pub visibility: u64, /// detailed wind report pub wind: Wind, /// detailed clouds report pub clouds: Clouds, /// detailed rain report pub rain: Option<Volume>, /// detailed snow report pub snow: Option<Volume>, /// Time of data calculation, unix, UTC pub dt: i64, /// additional information pub sys: Sys, /// Shift in seconds from UTC pub timezone: i64, /// City ID pub id: u64, /// City name pub name: String, /// Internal parameter pub cod: u64, }