weather_cli/types/
user_settings.rs

1use 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}