aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author1992414357@qq.com <1992414357@qq.com>2025-05-27 07:21:37 +0800
committer1992414357@qq.com <1992414357@qq.com>2025-05-27 07:21:37 +0800
commitf8336ed832fa8e1ddd2f1783bdfc23d3279d5e6a (patch)
tree42097cd72e46736ac3a544bd3d6dc50e2327a677 /src
First commit
Diffstat (limited to 'src')
-rw-r--r--src/debug_console.rs64
-rw-r--r--src/lib.rs2
-rw-r--r--src/logger.rs22
3 files changed, 88 insertions, 0 deletions
diff --git a/src/debug_console.rs b/src/debug_console.rs
new file mode 100644
index 0000000..3e673fc
--- /dev/null
+++ b/src/debug_console.rs
@@ -0,0 +1,64 @@
+pub mod debug_console {
+ use clap::{Command, FromArgMatches};
+ use clap::ColorChoice::Auto;
+ use tokio::io::{AsyncBufReadExt, AsyncWriteExt};
+
+ pub async fn read_cli<Cmd>(prefix: &str, entry: String, cmd: Command) -> Option<Cmd>
+ where
+ Cmd: FromArgMatches,
+ {
+ let input: String = {
+ let mut buffer = String::new();
+ let mut stdin = tokio::io::BufReader::new(tokio::io::stdin());
+ let mut stdout = tokio::io::stdout();
+
+ stdout.write_all(prefix.as_bytes()).await.ok().unwrap();
+ stdout.flush().await.ok().unwrap();
+
+ stdin.read_line(&mut buffer).await.ok().unwrap();
+ buffer.trim().to_string()
+ };
+
+ process_debug_cli(entry, input, cmd).await
+ }
+
+ async fn process_debug_cli<Cmd>(entry: String, input: String, cmd: Command) -> Option<Cmd>
+ where
+ Cmd: FromArgMatches
+ {
+ if input.trim().is_empty() {
+ return None;
+ }
+
+ let cmd = cmd
+ .color(Auto)
+ .help_template(
+ "{subcommands}{options}"
+ )
+ .disable_help_flag(true)
+ .disable_version_flag(true);
+
+ let args = shell_words::split(input.as_str()).unwrap_or_else(|_e| {
+ ["".to_string()].to_vec()
+ });
+
+ let full_args = std::iter::once(entry.into()).chain(args);
+
+ match cmd.try_get_matches_from(full_args) {
+ Ok(matches) => {
+ match Cmd::from_arg_matches(&matches) {
+ Ok(cmd) => {
+ Some(cmd)
+ }
+ Err(_err) => {
+ None
+ }
+ }
+ }
+ Err(err) => {
+ println!("{}", err);
+ None
+ }
+ }
+ }
+}
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..55ff0ec
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,2 @@
+pub mod debug_console;
+pub mod logger; \ No newline at end of file
diff --git a/src/logger.rs b/src/logger.rs
new file mode 100644
index 0000000..77b136e
--- /dev/null
+++ b/src/logger.rs
@@ -0,0 +1,22 @@
+use env_logger::Builder;
+use log::{info, LevelFilter};
+
+pub fn logger_build () {
+ Builder::new()
+ .format(|buf, record| {
+ use std::io::Write;
+ let now = chrono::Local::now();
+ let level_style = buf.default_level_style(record.level());
+ writeln!(
+ buf,
+ "[{}] [{}] {}",
+ now.format("%Y-%m-%d %H:%M:%S"),
+ level_style.value(record.level()),
+ record.args()
+ )
+ })
+ .filter(None, LevelFilter::Info)
+ .init();
+ info!("Logger Built.")
+}
+