use config::Config; use serde::{Serialize,Deserialize}; use crate::errors::LJResult; #[derive(Serialize, Deserialize, Debug)] pub struct Conf { pub laser_id: u8, pub debug: bool, pub redis_url: String, pub dac: DacFamily } #[derive(Serialize, Deserialize, Debug)] pub enum DacFamily { #[serde(rename = "helios")] Helios(HeliosConf), #[serde(rename = "etherdream")] Etherdream(EtherDreamConf), } #[derive(Serialize, Deserialize, Debug)] pub struct HeliosConf { pub id: u8 } #[derive(Serialize, Deserialize, Debug)] pub struct EtherDreamConf { pub url: String } impl Conf { pub fn new(path: &str) -> LJResult { let settings = Config::builder() .add_source(config::File::with_name(path)) .build()?; let conf : Conf = settings.try_deserialize()?; Ok(conf) } }