weather_cli/types/
user_settings.rs1use core::fmt;
2
3#[derive(serde::Deserialize, serde::Serialize, Clone, Debug)]
4pub struct ApiSetting {
5 pub key: String,
6}
7
8#[derive(serde::Deserialize, serde::Serialize, Clone, Debug)]
9pub struct UserSetting {
10 pub city: Option<City>,
11 pub units: Option<Units>,
12}
13
14#[derive(serde::Deserialize, serde::Serialize, Clone, Debug)]
15pub struct City {
16 pub name: String,
17 pub lat: f64,
18 pub lon: f64,
19 pub country: String,
20}
21
22impl fmt::Display for City {
23 fn fmt(&self, f: &mut std::fmt::Formatter) -> fmt::Result {
24 let output = format!(
25 "{}, {} (lat: {}, lon: {})",
26 self.name, self.country, self.lat, self.lon
27 );
28 write!(f, "{}", output)
29 }
30}
31
32#[derive(serde::Deserialize, serde::Serialize, Clone, Debug, PartialEq)]
33pub enum Units {
34 Standard,
35 Metric,
36 Imperial,
37}
38
39impl fmt::Display for Units {
40 fn fmt(&self, f: &mut std::fmt::Formatter) -> fmt::Result {
41 f.write_str(match self {
42 Units::Standard => "standard",
43 Units::Metric => "metric",
44 Units::Imperial => "imperial",
45 })
46 }
47}