summaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/cmd_macros.rs47
-rw-r--r--src/utils/log.rs33
2 files changed, 80 insertions, 0 deletions
diff --git a/src/utils/cmd_macros.rs b/src/utils/cmd_macros.rs
new file mode 100644
index 0000000..11b8da4
--- /dev/null
+++ b/src/utils/cmd_macros.rs
@@ -0,0 +1,47 @@
+#[macro_export]
+macro_rules! special_flag {
+ ($args:expr, $($flag:expr),+) => {{
+ let mut found = false;
+ $(
+ let flag = $flag;
+ if $args.iter().any(|arg| arg == flag) {
+ found = true;
+ }
+ $args.retain(|arg| arg != flag);
+ )+
+ found
+ }};
+}
+
+#[macro_export]
+macro_rules! special_argument {
+ ($args:expr, $($flag:expr),+) => {{
+ let mut value: Option<String> = None;
+ let mut found = false;
+ $(
+ let flag = $flag;
+ if !found {
+ let mut i = 0;
+ while i < $args.len() {
+ if $args[i] == flag {
+ if i + 1 < $args.len() {
+ value = Some($args[i + 1].clone());
+ $args.remove(i + 1);
+ $args.remove(i);
+ } else {
+ value = None;
+ $args.remove(i);
+ }
+ #[allow(unused_assignments)]
+ {
+ found = true;
+ }
+ break;
+ }
+ i += 1;
+ }
+ }
+ )+
+ value
+ }};
+}
diff --git a/src/utils/log.rs b/src/utils/log.rs
new file mode 100644
index 0000000..5fc6160
--- /dev/null
+++ b/src/utils/log.rs
@@ -0,0 +1,33 @@
+use env_logger::Builder;
+use log::Level;
+use std::io::Write;
+
+pub fn init_logger(level_filter: Option<log::LevelFilter>) {
+ let mut builder = match level_filter {
+ Some(f) => {
+ let mut b = Builder::new();
+ b.filter_level(f);
+ b
+ }
+ None => return,
+ };
+
+ builder
+ .format(|buf, record| {
+ let level = record.level();
+ let args = record.args();
+
+ let (prefix, color_code) = match level {
+ Level::Error => ("error: ", "\x1b[1;31m"),
+ Level::Warn => ("warn: ", "\x1b[1;33m"),
+ Level::Info => ("", "\x1b[37m"),
+ Level::Debug => ("debug: ", "\x1b[90m"),
+ Level::Trace => ("trace: ", "\x1b[36m"),
+ };
+
+ let colored_prefix = format!("{}{}\x1b[0m", color_code, prefix);
+
+ writeln!(buf, "{}{}", colored_prefix, args)
+ })
+ .init();
+}