Mercurial > templog
annotate rust/src/config.rs @ 600:9c76f3cf01ea rust
slightly less ugly
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Tue, 07 Feb 2017 22:57:29 +0800 |
parents | f71cf1ad745f |
children | 8c21df3711e2 |
rev | line source |
---|---|
595 | 1 extern crate toml; |
2 | |
598
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
3 use std::fs::File; |
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
4 use std::io::Read; |
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
5 use serde::{Serialize,Deserialize,Deserializer,Serializer}; |
595 | 6 |
596
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
7 #[derive(Deserialize,Serialize,Debug,Clone)] |
595 | 8 #[allow(non_snake_case)] |
9 pub struct Config { | |
596
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
10 pub SENSOR_SLEEP: u64, |
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
11 pub UPLOAD_SLEEP: u64, |
595 | 12 |
596
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
13 pub FRIDGE_DELAY: u64, |
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
14 pub FRIDGE_WORT_INVALID_TIME: u64, |
595 | 15 |
596
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
16 pub MAX_READINGS: u32, |
595 | 17 |
596
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
18 pub PARAMS_FILE: String, |
595 | 19 |
596
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
20 pub SENSOR_BASE_DIR: String, |
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
21 pub FRIDGE_GPIO_PIN: u32, |
595 | 22 |
596
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
23 pub AMBIENT_NAME: String, |
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
24 pub FRIDGE_NAME: String, |
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
25 pub WORT_NAME: String, |
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
26 pub INTERNAL_TEMPERATURE: String, |
595 | 27 |
596
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
28 pub HMAC_KEY: String, |
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
29 pub SERVER_URL: String, |
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
30 pub UPDATE_URL: String, |
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
31 pub SETTINGS_URL: String, |
595 | 32 } |
33 | |
34 impl Config { | |
35 | |
598
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
36 pub fn default() -> Self { |
595 | 37 Config { |
596
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
38 SENSOR_SLEEP: 5, |
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
39 UPLOAD_SLEEP: 83, |
595 | 40 |
41 FRIDGE_DELAY: 600, // 10 mins, to avoid fridge damage from frequent cycling off/on | |
42 FRIDGE_WORT_INVALID_TIME: 300, // 5 mins | |
43 | |
44 // 12 hours of "offline" readings stored | |
45 MAX_READINGS: 12*60*60 / 15, // 15 is SENSOR_SLEEP | |
46 | |
47 //PARAMS_FILE: os.path.join(os.path.dirname(__file__), "tempserver.conf") | |
48 PARAMS_FILE: "tempserver.conf".to_string(), | |
49 | |
50 SENSOR_BASE_DIR: "/sys/devices/w1_bus_master2".to_string(), | |
51 FRIDGE_GPIO_PIN: 17, | |
52 //WORT_NAME: "28-0000042cf4dd".to_string(), | |
53 //FRIDGE_NAME: "28-0000042cccc4".to_string(), | |
54 //AMBIENT_NAME: "28-0000042c6dbb".to_string(), | |
55 AMBIENT_NAME: "missingambient".to_string(), | |
56 FRIDGE_NAME: "28-0000042c6dbb".to_string(), | |
57 WORT_NAME: "28-0000042cccc4".to_string(), // was fridge | |
58 INTERNAL_TEMPERATURE: "/sys/class/thermal/thermal_zone0/temp".to_string(), | |
59 | |
60 HMAC_KEY: "a key".to_string(), | |
61 SERVER_URL: "https://evil.ucc.asn.au/~matt/templog".to_string(), | |
62 UPDATE_URL: "https://evil.ucc.asn.au/~matt/templog/update".to_string(), | |
63 SETTINGS_URL: "https://evil.ucc.asn.au/~matt/templog/get_settings".to_string(), | |
64 } | |
65 } | |
66 | |
596
ca8102feaca6
sensor takes config parameter
Matt Johnston <matt@ucc.asn.au>
parents:
595
diff
changeset
|
67 pub fn to_toml_string(&self) -> String { |
599
f71cf1ad745f
updated toml serde works OK
Matt Johnston <matt@ucc.asn.au>
parents:
598
diff
changeset
|
68 toml::to_string(self).unwrap() |
595 | 69 } |
597 | 70 |
598
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
71 pub fn merge(&self, conf: &str) -> Result<Self, String>{ |
600 | 72 // convert existing and new toml into tables, combine them. |
599
f71cf1ad745f
updated toml serde works OK
Matt Johnston <matt@ucc.asn.au>
parents:
598
diff
changeset
|
73 let mut new_toml = try!(toml::from_str(conf).map_err(|e| e.to_string())); |
f71cf1ad745f
updated toml serde works OK
Matt Johnston <matt@ucc.asn.au>
parents:
598
diff
changeset
|
74 let mut ex_val = toml::Value::try_from(self).unwrap(); |
f71cf1ad745f
updated toml serde works OK
Matt Johnston <matt@ucc.asn.au>
parents:
598
diff
changeset
|
75 let mut ex_toml = ex_val.as_table_mut().unwrap(); |
f71cf1ad745f
updated toml serde works OK
Matt Johnston <matt@ucc.asn.au>
parents:
598
diff
changeset
|
76 ex_toml.append(&mut new_toml); |
f71cf1ad745f
updated toml serde works OK
Matt Johnston <matt@ucc.asn.au>
parents:
598
diff
changeset
|
77 let ret: Self = toml::Value::Table(ex_toml.clone()).try_into().unwrap(); |
600 | 78 Ok(ret) |
598
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
79 } |
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
80 |
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
81 pub fn merge_file(&self, filename: &str) -> Result<Self, String>{ |
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
82 |
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
83 let r = File::open(filename) |
597 | 84 .and_then(|mut f| { |
85 let mut s = String::new(); | |
86 f.read_to_string(&mut s) | |
87 .map(|_| s) | |
600 | 88 }) |
89 .map_err(|e| e.to_string()); | |
597 | 90 |
598
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
91 r.and_then(|s| { |
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
92 self.merge(&s) |
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
93 }) |
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
94 .map_err(|e| { |
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
95 format!("Error loading config file {}: {}", |
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
96 filename, e) |
d4fbfb5c46ff
broken update of versions of things
Matt Johnston <matt@ucc.asn.au>
parents:
597
diff
changeset
|
97 }) |
597 | 98 } |
595 | 99 } |