1extern crate serde_derive;
3extern crate serde_json;
4use std::fmt;
5
6#[derive(Deserialize)]
8#[serde(rename_all = "PascalCase")]
9pub struct AccuweatherMeasurement {
10 pub value: f32,
12 pub unit: String,
14 unit_type: i32,
16}
17
18impl AccuweatherMeasurement {
19 pub fn print(&self) {
20 println!("{} {}", self.value, self.unit);
21 }
22}
23
24impl fmt::Debug for AccuweatherMeasurement {
25 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26 write!(f, "{} {} ({})", self.value, self.unit, self.unit_type)
27 }
28}
29
30impl fmt::Display for AccuweatherMeasurement {
31 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
32 write!(f, "{} {}", self.value, self.unit)
33 }
34}
35
36#[derive(Deserialize, Debug)]
38#[serde(rename_all = "PascalCase")]
39pub struct AirAndPollen {
40 pub name: String,
41 pub value: i32,
42 pub category: String,
43 category_value: i32,
44 #[serde(default = "air_pollen_default_type")]
45 r#type: String,
46}
47
48#[derive(Deserialize, Debug)]
50#[serde(rename_all = "PascalCase")]
51pub struct WindDirection {
52 pub degrees: f32,
53 pub localized: String,
54 pub english: String,
55}
56
57#[derive(Deserialize, Debug)]
59#[serde(rename_all = "PascalCase")]
60pub struct Wind {
61 pub speed: AccuweatherMeasurement,
62 pub direction: WindDirection,
63}
64
65#[derive(Deserialize, Debug)]
67#[serde(rename_all = "PascalCase")]
68pub struct DailyWindGust {
69 speed: AccuweatherMeasurement,
70}
71
72#[derive(Deserialize, Debug)]
74#[serde(rename_all = "PascalCase")]
75pub struct Temperature {
76 pub maximum: AccuweatherMeasurement,
77 pub minimum: AccuweatherMeasurement,
78}
79
80#[derive(Deserialize, Debug)]
82#[serde(rename_all = "PascalCase")]
83pub struct DayPartForecast {
84 pub cloud_cover: i32,
85 pub hours_of_precipitation: f32,
86 pub hours_of_rain: f32,
87 pub ice: AccuweatherMeasurement,
88 pub ice_probability: i32,
89 pub icon: i32,
90 pub icon_phrase: String,
91 pub long_phrase: String,
92 pub precipitation_probability: i32,
93 pub rain: AccuweatherMeasurement,
94 pub rain_probability: i32,
95 pub short_phrase: String,
96 pub snow: AccuweatherMeasurement,
97 pub snow_probability: i32,
98 pub thunderstorm_probability: i32,
99 pub total_liquid: AccuweatherMeasurement,
100 pub wind: Wind,
101 pub wind_gust: Wind,
102}
103
104#[derive(Deserialize, Debug)]
106#[serde(rename_all = "PascalCase")]
107pub struct DegreeDaySummary {
108 pub heating: AccuweatherMeasurement,
109 pub cooling: AccuweatherMeasurement,
110}
111
112#[derive(Deserialize, Debug)]
114#[serde(rename_all = "PascalCase")]
115pub struct Sun {
116 pub rise: String,
117 pub epoch_rise: i64,
118 pub set: String,
119 pub epoch_set: i64,
120}
121
122#[derive(Deserialize, Debug)]
124#[serde(rename_all = "PascalCase")]
125pub struct Moon {
126 pub rise: String,
127 pub epoch_rise: i64,
128 pub set: String,
129 pub epoch_set: i64,
130 pub phase: String,
131 pub age: i32,
132}
133
134#[derive(Deserialize, Debug)]
136#[serde(rename_all = "PascalCase")]
137pub struct DailyForecast {
138 pub air_and_pollen: Vec<AirAndPollen>,
139 pub date: String,
140 pub day: DayPartForecast,
141 pub degree_day_summary: DegreeDaySummary,
142 pub epoch_date: i64,
143 pub hours_of_sun: f32,
144 pub link: String,
145 pub mobile_link: String,
146 pub moon: Moon,
147 pub night: DayPartForecast,
148 pub real_feel_temperature: Temperature,
149 pub real_feel_temperature_shade: Temperature,
150 pub sources: Vec<String>,
151 pub sun: Sun,
152 pub temperature: Temperature,
153}
154
155#[derive(Deserialize, Debug)]
157#[serde(rename_all = "PascalCase")]
158pub struct Headline {
159 pub effective_date: String,
160 pub effective_epoch_date: i64,
161 pub severity: i32,
162 pub text: String,
163 pub category: String,
164 pub end_date: String,
165 pub end_epoch_date: i64,
166 pub mobile_link: String,
167 pub link: String,
168}
169
170#[derive(Deserialize, Debug)]
172#[serde(rename_all = "PascalCase")]
173pub struct DailyForecastsAnswer {
174 pub headline: Headline,
175 pub daily_forecasts: Vec<DailyForecast>,
176}
177
178fn air_pollen_default_type() -> String {
179 "".to_string()
180}
181
182#[derive(Deserialize, Debug)]
184#[serde(rename_all = "PascalCase")]
185pub struct HourlyForecast {
186 pub ceiling: AccuweatherMeasurement,
187 pub cloud_cover: i32,
188 pub date_time: String,
189 pub dew_point: AccuweatherMeasurement,
190 pub epoch_date_time: i64,
191 pub ice: AccuweatherMeasurement,
192 pub ice_probability: i32,
193 pub icon_phrase: String,
194 pub is_daylight: bool,
195 pub link: String,
196 pub mobile_link: String,
197 pub precipitation_probability: i32,
198 pub rain: AccuweatherMeasurement,
199 pub rain_probability: i32,
200 pub real_feel_temperature: AccuweatherMeasurement,
201 pub relative_humidity: i32,
202 pub snow: AccuweatherMeasurement,
203 pub snow_probability: i32,
204 pub temperature: AccuweatherMeasurement,
205 pub total_liquid: AccuweatherMeasurement,
206 #[serde(rename = "UVIndex")]
207 pub uv_index: i32,
208 #[serde(rename = "UVIndexText")]
209 pub uv_index_text: String,
210 pub visibility: AccuweatherMeasurement,
211 pub weather_icon: i32,
212 pub wet_bulb_temperature: AccuweatherMeasurement,
213 pub wind: Wind,
214 pub wind_gust: DailyWindGust,
215}
216
217#[derive(Deserialize, Debug)]
219#[serde(rename_all = "PascalCase")]
220pub struct LocalSource {
221 pub id: i32,
222 pub name: String,
223 pub weather_code: String,
224}
225
226#[derive(Deserialize, Debug)]
228#[serde(rename_all = "PascalCase")]
229pub struct ConditionMeasurement {
230 pub metric: AccuweatherMeasurement,
231 pub imperial: AccuweatherMeasurement,
232}
233
234#[derive(Deserialize, Debug)]
236#[serde(rename_all = "PascalCase")]
237pub struct PressureTendency {
238 pub localized_text: String,
239 pub code: String,
240}
241
242#[derive(Deserialize, Debug)]
244#[serde(rename_all = "PascalCase")]
245pub struct PrecipitationSummary {
246 pub precipitation: ConditionMeasurement,
247 pub past_hour: ConditionMeasurement,
248 pub past3_hours: ConditionMeasurement,
249 pub past6_hours: ConditionMeasurement,
250 pub past9_hours: ConditionMeasurement,
251 pub past12_hours: ConditionMeasurement,
252 pub past18_hours: ConditionMeasurement,
253 pub past24_hours: ConditionMeasurement,
254}
255
256#[derive(Deserialize, Debug)]
258#[serde(rename_all = "PascalCase")]
259pub struct TemperatureSummary {
260 pub past6_hour_range: TemperatureSummaryRange,
261 pub past12_hour_range: TemperatureSummaryRange,
262 pub past24_hour_range: TemperatureSummaryRange,
263}
264
265#[derive(Deserialize, Debug)]
267#[serde(rename_all = "PascalCase")]
268pub struct TemperatureSummaryRange {
269 pub minimum: ConditionMeasurement,
270 pub maximum: ConditionMeasurement,
271}
272
273#[derive(Deserialize, Debug)]
275#[serde(rename_all = "PascalCase")]
276pub struct WindCondition {
277 pub speed: ConditionMeasurement,
278 pub direction: WindDirection,
279}
280
281#[derive(Deserialize, Debug)]
283#[serde(rename_all = "PascalCase")]
284pub struct ConditionWindGust {
285 pub speed: ConditionMeasurement,
286}
287
288#[derive(Deserialize, Debug)]
290#[serde(rename_all = "PascalCase")]
291pub struct CurrentCondition {
292 pub local_observation_date_time: String,
293 pub epoch_time: i64,
294 pub weather_text: String,
295 pub weather_icon: i32,
296 pub local_source: Option<LocalSource>,
297 pub is_day_time: bool,
298 pub temperature: ConditionMeasurement,
299 pub real_feel_temperature: ConditionMeasurement,
300 pub real_feel_temperature_shade: ConditionMeasurement,
301 pub relative_humidity: i32,
302 pub dew_point: ConditionMeasurement,
303 pub wind: WindCondition,
304 pub wind_gust: ConditionWindGust,
305 #[serde(rename = "UVIndex")]
306 pub uv_index: i32,
307 #[serde(rename = "UVIndexText")]
308 pub uv_index_text: String,
309 pub visibility: ConditionMeasurement,
310 pub obstructions_to_visibility: String,
311 pub cloud_cover: i32,
312 pub ceiling: ConditionMeasurement,
313 pub pressure: ConditionMeasurement,
314 pub pressure_tendency: PressureTendency,
315 pub past24_hour_temperature_departure: ConditionMeasurement,
316 pub apparent_temperature: ConditionMeasurement,
317 pub wind_chill_temperature: ConditionMeasurement,
318 pub wet_bulb_temperature: ConditionMeasurement,
319 pub precip1hr: ConditionMeasurement,
320 pub precipitation_summary: PrecipitationSummary,
321 pub temperature_summary: TemperatureSummary,
322 pub mobile_link: String,
323 pub link: String,
324 pub has_precipitation: bool,
325 pub precipitation_type: Option<String>,
326}