From 4362b1b064100ae474def9342310550ded3dc11b Mon Sep 17 00:00:00 2001 From: alban Date: Sat, 3 Jun 2023 17:52:29 +0200 Subject: [PATCH] feat: add configuration file management --- Cargo.toml | 1 + src/conf.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 7 ++++++- 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/conf.rs diff --git a/Cargo.toml b/Cargo.toml index 435bde2..1b4a46d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +config = "0.13.3" ctrlc = "3.4.0" helios-dac = { version = "0.1", default-features = false, features = ["native"] } redis = "0.23.0" diff --git a/src/conf.rs b/src/conf.rs new file mode 100644 index 0000000..871d044 --- /dev/null +++ b/src/conf.rs @@ -0,0 +1,47 @@ + +use config::Config; +use serde::Deserialize; + + +#[derive(Deserialize,Debug)] +pub enum DacFamily { + Helios, + Etherdream + } + +#[derive(Deserialize,Debug)] +pub struct Conf{ + laser_id : u8, + debug : bool, + redis_url : String, + dac_family: DacFamily, + dac_id : Option, + dac_url : Option +} + + +pub fn load_config( path : &str )-> Result> { + + let conf_builder = Config::builder() + .add_source(config::File::with_name(path)); + + + let settings = match conf_builder.build() { + Ok(conf) => conf, + Err(err) => { + println!("Invalid configuration file / missing file: {:?}", err); + return Err(Box::new(err)) + } + }; + + let conf = settings + .try_deserialize::()?; + // .try_deserialize::>()?; + + println!( + "{:?}", + conf + ); + + Ok(conf) +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index ddf3328..b5ae005 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ /// mod redis_ctrl; +mod conf; use helios_dac::{Frame, Point, @@ -15,11 +16,15 @@ use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; use redis_ctrl::{RedisCtrl,Order}; +use conf::{load_config}; + const CENTER : (u16,u16) = (2000, 2000); - pub fn main() -> Result<(), Box> { + + let config = load_config("Settings")?; + let running = Arc::new(AtomicBool::new(true)); let r = running.clone();