aboutsummaryrefslogtreecommitdiff
path: root/src/config/mod.rs
blob: f47a1725e899c852e9d11b2e47011bad850e41d1 (plain)
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
132
mod battery;
mod bitcoins;
mod cputemp;
mod disk;
mod loadavg;
mod memory;
mod mpd;
mod netspeed;
mod pub_ip;
mod spotify;
mod time;
mod uptime;
mod volume;
mod weather;

use self::battery::Battery;
use self::mpd::Mpd;
use bitcoins::BitCoins;
use cputemp::CpuTemp;
use disk::Disk;
use loadavg::LoadAvg;
use memory::Memory;
use netspeed::NetSpeed;
use pub_ip::PubIp;
use spotify::Spotify;
use time::Time;
use uptime::Uptime;
use volume::Volume;
use weather::Weather;

use std::default::Default;
use std::fs::File;
use std::io::Read;

use lazy_static::lazy_static;
use serde::{Deserialize, Serialize};

lazy_static! {
    pub static ref CONFIG: Config = {
        let yml_source = std::env::var("HOME").unwrap() + "/.config/rsblocks/rsblocks.yml";
        let mut data = String::new();

        match File::open(&yml_source) {
            Ok(mut file) => {
                file.read_to_string(&mut data)
                    .expect("Failed to read config to string");
                serde_yaml::from_str(&data).unwrap_or_else(move |e| {
                    eprintln!(
                        "Failed to parse config: {}\nloading defaults!",
                        e.to_string()
                    );
                    Config::default()
                })
            }
            Err(_) => Config::default(),
        }
    };
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Config {
    #[serde(default = "default_seperator")]
    pub seperator: String,

    #[serde(default)]
    pub time: Time,

    #[serde(default)]
    pub memory: Memory,

    #[serde(default)]
    pub disk: Disk,

    #[serde(default)]
    pub volume: Volume,

    #[serde(default)]
    pub weather: Weather,

    #[serde(default)]
    pub battery: Battery,

    #[serde(default)]
    pub cpu_temperature: CpuTemp,

    #[serde(default)]
    pub uptime: Uptime,

    #[serde(default)]
    pub mpd: Mpd,

    #[serde(default)]
    pub spotify: Spotify,

    #[serde(default)]
    pub loadavg: LoadAvg,

    #[serde(default)]
    pub netspeed: NetSpeed,

    #[serde(default)]
    pub pub_ip: PubIp,

    #[serde(default)]
    pub bitcoins: BitCoins,
}

impl Default for Config {
    fn default() -> Self {
        Self {
            seperator: "|".to_string(),
            time: Default::default(),
            memory: Default::default(),
            disk: Default::default(),
            volume: Default::default(),
            weather: Default::default(),
            battery: Default::default(),
            cpu_temperature: Default::default(),
            uptime: Default::default(),
            mpd: Default::default(),
            spotify: Default::default(),
            loadavg: Default::default(),
            netspeed: Default::default(),
            pub_ip: Default::default(),
            bitcoins: Default::default(),
        }
    }
}

fn default_seperator() -> String {
    "|".to_string()
}