diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2024-01-02 14:30:44 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2024-01-02 14:30:44 +0100 |
commit | 8d79d7640cadab30ff1e7bfa8df41eb08ffbdf48 (patch) | |
tree | 90c5090e070aad6546e1cf198973a10ef25e00fa /src/config.rs | |
parent | 317d81c65dafae1949588cb4a9412d9bdc483a7c (diff) | |
download | cats-radio-node-8d79d7640cadab30ff1e7bfa8df41eb08ffbdf48.tar.gz cats-radio-node-8d79d7640cadab30ff1e7bfa8df41eb08ffbdf48.tar.bz2 cats-radio-node-8d79d7640cadab30ff1e7bfa8df41eb08ffbdf48.zip |
Add more pages, improve nav
Diffstat (limited to 'src/config.rs')
-rw-r--r-- | src/config.rs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..51bf507 --- /dev/null +++ b/src/config.rs @@ -0,0 +1,57 @@ +use std::fs; +use anyhow::Context; +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Clone)] +pub struct FelinetConfig { + pub enabled: bool, + pub address: String, +} + +#[derive(Serialize, Deserialize, Clone)] +pub struct TunnelConfig { + pub enabled: bool, + pub local_ip: String, + pub netmask: String, +} + +type DurationSeconds = std::num::NonZeroU32; + +#[derive(Serialize, Deserialize, Clone)] +pub struct BeaconConfig { + pub period_seconds: Option<DurationSeconds>, + #[serde(default)] + pub max_hops: u8, + pub latitude: Option<f64>, + pub longitude: Option<f64>, + pub altitude: Option<f64>, + pub comment: Option<String>, + pub antenna_height: Option<u8>, + pub antenna_gain: Option<f32>, + pub tx_power: Option<f32>, +} + +#[derive(Serialize, Deserialize, Clone)] +pub struct Config { + pub callsign: String, + pub ssid: u8, + #[serde(default)] + pub icon: u16, + pub felinet: FelinetConfig, + pub beacon: BeaconConfig, + pub tunnel: Option<TunnelConfig>, +} + +const CONFIGFILE : &str = "node-config.toml"; + +impl Config { + pub fn load() -> anyhow::Result<Self> { + let file_contents = fs::read_to_string(CONFIGFILE)?; + toml::from_str(&file_contents).context("parsing config file") + } + + pub fn store(&self) -> anyhow::Result<()> { + fs::write(CONFIGFILE, toml::to_string_pretty(&self)?) + .context("writing config file") + } +} |