refacto error handling
This commit is contained in:
		
							parent
							
								
									6bcfc831a6
								
							
						
					
					
						commit
						263ccf3210
					
				@ -1,4 +1,4 @@
 | 
			
		||||
laser_id = 1 
 | 
			
		||||
laser_id = 0
 | 
			
		||||
debug = "true"
 | 
			
		||||
redis_url = "127.0.0.1"
 | 
			
		||||
dac_family = "Helios"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										27
									
								
								src/conf.rs
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								src/conf.rs
									
									
									
									
									
								
							@ -10,7 +10,7 @@ pub enum DacFamily {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#[derive(Deserialize,Debug)]
 | 
			
		||||
pub struct Conf{
 | 
			
		||||
pub struct Conf {
 | 
			
		||||
    laser_id : u8,
 | 
			
		||||
    debug : bool,
 | 
			
		||||
    redis_url : String,
 | 
			
		||||
@ -21,27 +21,12 @@ pub struct Conf{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
pub fn load_config( path : &str )-> Result<Conf, Box<dyn std::error::Error>> { 
 | 
			
		||||
    
 | 
			
		||||
    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 settings = Config::builder()
 | 
			
		||||
        .add_source(config::File::with_name(path))
 | 
			
		||||
	.build()?;
 | 
			
		||||
            
 | 
			
		||||
    let conf = settings
 | 
			
		||||
            .try_deserialize::<Conf>()?;
 | 
			
		||||
            // .try_deserialize::<HashMap<String, String>>()?;
 | 
			
		||||
            
 | 
			
		||||
    println!(
 | 
			
		||||
        "{:?}",
 | 
			
		||||
        conf
 | 
			
		||||
    );
 | 
			
		||||
    
 | 
			
		||||
                
 | 
			
		||||
    Ok(conf)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										39
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								src/main.rs
									
									
									
									
									
								
							@ -16,31 +16,46 @@ use std::sync::atomic::{AtomicBool, Ordering};
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
 | 
			
		||||
use redis_ctrl::{RedisCtrl,Order};
 | 
			
		||||
use conf::{load_config};
 | 
			
		||||
use conf::{load_config,Conf};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const CENTER : (u16,u16) = (2000, 2000);
 | 
			
		||||
 | 
			
		||||
pub fn main() -> Result<(), Box<dyn std::error::Error>> {
 | 
			
		||||
pub fn main() {
 | 
			
		||||
 | 
			
		||||
    let config = load_config("Settings")?;
 | 
			
		||||
    let config = match load_config("Settings") {
 | 
			
		||||
	Ok(c) => c,
 | 
			
		||||
	Err(err) => {
 | 
			
		||||
	    panic!("Unable to load config file: {:?}", err)
 | 
			
		||||
	}
 | 
			
		||||
    };
 | 
			
		||||
           
 | 
			
		||||
    let rs = match RedisCtrl::new() {
 | 
			
		||||
	Ok(rs) => rs,
 | 
			
		||||
	Err(err) => {
 | 
			
		||||
	    panic!("Unable to connect to redis: {:?}", err);
 | 
			
		||||
	}
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    match run_dac(config, rs) {
 | 
			
		||||
	Ok(()) => {},
 | 
			
		||||
	Err(err) => {
 | 
			
		||||
	    panic!("Error: {:?}", err)
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn run_dac(
 | 
			
		||||
    config: Conf,
 | 
			
		||||
    mut rs: RedisCtrl
 | 
			
		||||
) -> Result<(), Box<dyn std::error::Error>> {
 | 
			
		||||
    let running = Arc::new(AtomicBool::new(true));
 | 
			
		||||
    let r = running.clone();
 | 
			
		||||
 | 
			
		||||
    ctrlc::set_handler(move || {
 | 
			
		||||
        r.store(false, Ordering::SeqCst);
 | 
			
		||||
    }).expect("Error setting Ctrl-C handler");
 | 
			
		||||
    
 | 
			
		||||
    let mut rs = match RedisCtrl::new() {
 | 
			
		||||
	Ok(rs) => rs,
 | 
			
		||||
	Err(err) => {
 | 
			
		||||
	    println!("Unable to connect to redis: {:?}", err);
 | 
			
		||||
	    return Ok(())
 | 
			
		||||
	}
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    let controller = NativeHeliosDacController::new()?;
 | 
			
		||||
    let devices = controller.list_devices()?;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user