diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-03-07 19:37:52 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-03-07 19:37:52 +0800 |
| commit | 9e7c0fd45e169929156bdb317b10d7bb3db65f8b (patch) | |
| tree | 94c1e0e6cafe996b7b7da8dfd6e1ff1a04539cda /src/utils | |
| parent | 22926ce29e3f8e040ec349401aeb6a77f32eae72 (diff) | |
Add callback support to chunk_stream_with and implement stream writing
Diffstat (limited to 'src/utils')
| -rw-r--r-- | src/utils/cmd_macros.rs | 47 | ||||
| -rw-r--r-- | src/utils/log.rs | 33 |
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(); +} |
