1use serde::{Serialize, Deserialize};
2use chrono::{DateTime, TimeZone, Utc};
3
4use super::{Condition, AirQuality, Location};
5
6
7#[derive(Debug, Serialize, Deserialize, PartialEq)]
8pub struct Current {
9 pub last_updated: String,
10 pub last_updated_epoch: i64,
11 pub temp_c: f32,
12 pub temp_f: f32,
13 pub feelslike_c: f32,
14 pub feelslike_f: f32,
15 pub condition: Condition,
16 pub wind_mph: f32,
17 pub wind_kph: f32,
18 pub wind_degree: f32,
19 pub wind_dir: String,
20 pub pressure_mb: f32,
21 pub pressure_in: f32,
22 pub precip_mm: f32,
23 pub precip_in: f32,
24 pub humidity: u32,
25 pub cloud: u32,
26 pub is_day: u8,
27 pub uv: f32,
28 pub gust_mph: f32,
29 pub gust_kph: f32,
30 pub air_quality: Option<AirQuality>
31}
32
33impl Current {
34 pub fn last_updated(&self) -> DateTime<Utc> {
35 Utc.datetime_from_str(&self.last_updated, fmt:"%Y-%m-%d %H:%M").unwrap()
36 }
37
38 pub fn last_updated_epoch(&self) -> DateTime<Utc> {
39 Utc.timestamp(self.last_updated_epoch, nsecs:0)
40 }
41
42 pub fn is_day(&self) -> bool {
43 self.is_day == 1
44 }
45}
46
47
48#[derive(Debug, Serialize, Deserialize, PartialEq)]
49pub struct Realtime {
50 pub location: Location,
51 pub current: Current
52}
53