use colored::Colorize; use core::panic; use directories::ProjectDirs; use std::fs; mod parse; pub mod args; use args::get_args; mod shifts; use shifts::Shifts; mod utils; use utils::{add_shift, list_all_shifts, list_shifts, remove_shift}; mod config; use config::Config; mod formaters; fn main() { let project_dirs = ProjectDirs::from("com", "tomkol", "shifty").expect("Config path not found"); if !fs::metadata(project_dirs.config_dir().to_str().unwrap()).is_ok() { fs::create_dir_all(project_dirs.config_dir().to_str().unwrap()).unwrap(); } let config_file = match fs::read_to_string(&format!( "{}/config.json", project_dirs.config_dir().to_str().unwrap() )) { Ok(conf) => conf, Err(err) => match err.kind() { std::io::ErrorKind::NotFound => { println!("No config file found creating one."); Config::new(project_dirs.config_dir().to_str().unwrap().to_string()); return; } _ => panic!("{}", err), }, }; let config: Config = serde_json::from_str(&config_file).expect("Error reading config"); let args = get_args(); let db_path = format!("{}/db.csv", project_dirs.config_dir().to_str().unwrap()); let db = Shifts::from_file(db_path.clone()); if args.add { if args.list || args.list_all || args.remove { panic!("'--list', '--list-all', '--remove', '--add' can only be used independently"); } add_shift(args, db, db_path, config); } else if args.remove { if args.list || args.list_all || args.add { panic!("'--list', '--list-all', '--remove', '--add' can only be used independently"); } remove_shift(args, db, db_path); } else if args.list_all { if args.list || args.remove || args.add { panic!("'--list', '--list-all', '--remove', '--add' can only be used independently"); } println!("{}", list_all_shifts(args, db, config)); } else if args.list { if args.list_all || args.remove || args.add { panic!("'--list', '--list-all', '--remove', '--add' can only be used independently"); } println!("{}", list_shifts(args, db, config)); } else if args.change_config { Config::new(project_dirs.config_dir().to_str().unwrap().to_string()); } else if args.show_config { println!("{}", config); } else if args.stats { println!("{}", Shifts::stats(&db, config, args)); } else { eprintln!( "{}-h,--help\n-a,--add\n-r,--remove\n-l,--list\n-L,--list-all\n", "No cli arguments found.\nyou must choose an action with one of these commands:\n\n" .red() ); } }