1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
//! A crate with bunch of lazy macros /// Macro to construct subprocess command /// /// Arguments: /// ///* ```cmd``` - to specify command name. /// ///Usage: /// ///* ```exec_cmd!(cmd=>"cmd_name", [arg1, arg2, ..., argN]) ``` #[macro_export] macro_rules! cmd { (cmd=>$cmd:expr, $($arg:expr),*) => { std::process::Command::new($cmd)$(.arg($arg))* } } /// Macro to exectute subprocess silently. /// /// All output will be redirected to null. /// /// Arguments: /// ///* ```cmd``` - to specify command name. /// ///Usage: /// ///* ```exec_cmd!(cmd=>"cmd_name", [arg1, arg2, ..., argN]) ``` /// ///Returns status code #[macro_export] macro_rules! exec_silent_cmd { (cmd=>$cmd:expr, $($arg:expr),*) => { std::process::Command::new($cmd) .stderr(std::process::Stdio::null()) .stdout(std::process::Stdio::null()) $(.arg($arg))* .status().unwrap() } } /// Macro to check if given path/string belongs to file. /// /// Returns false if no such file exists or cannot access it. #[macro_export] macro_rules! is_file { ($path:expr) => { std::fs::metadata($path).ok().map_or(false, |data| data.is_file()) } } /// Macro to check if given path/string belongs to directory. /// /// Returns false if no such directory exists or cannot access it. #[macro_export] macro_rules! is_dir { ($path:expr) => { std::fs::metadata($path).ok().map_or(false, |data| data.is_dir()) } } ///Trace macro like ```println``` /// ///It uses ```format_args!``` for creating formatted string from passed arguments. /// ///Prints with the following format: ```file!:line! - [type:] [Message]``` #[macro_export] macro_rules! trace { ($($arg:tt)+) => {{ println!("{}", format_args!("{}:{} - {}", file!(), line!(), format_args!($($arg)+))); }}; }