diff --git a/src/cmd.rs b/src/cmd.rs new file mode 100644 index 0000000..5732605 --- /dev/null +++ b/src/cmd.rs @@ -0,0 +1,37 @@ +// 定义一个名为 IsOk 的 trait +// 该 trait 包含两个方法:is_ok 和 result +pub trait IsOk { + // is_ok 方法用于检查操作是否成功,如果成功则返回 Ok(()), + // 否则返回包含错误信息的 Err。 + fn is_ok(self) -> crate::Result<()>; + + // result 方法用于返回操作的结果字符串, + // 如果操作成功则返回包含输出的 Ok(String), + // 否则返回包含错误信息的 Err(String)。 + fn result(self) -> crate::Result; +} + +// 为 std::process::Output 实现 IsOk trait +impl IsOk for std::process::Output { + // is_ok 方法的实现 + fn is_ok(self) -> crate::Result<()> { + // 如果命令执行成功(status 为成功),返回 Ok(()) + if self.status.success() { + Ok(()) + } else { + // 否则将标准错误输出转化为 String 并返回 Err(String) + Err(String::from_utf8(self.stderr).unwrap().into()) + } + } + + // result 方法的实现 + fn result(self) -> crate::Result { + // 如果命令执行成功,返回标准输出的字符串形式 Ok(String) + if self.status.success() { + String::from_utf8(self.stdout).map_err(|e| e.into()) + } else { + // 否则返回标准错误输出的字符串形式 Err(String) + Err(String::from_utf8(self.stderr).unwrap().into()) + } + } +} diff --git a/src/lib.rs b/src/lib.rs index bec73d3..6eb54c9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,9 @@ use tokio::runtime::Runtime; use tracing_subscriber::{fmt, EnvFilter}; +/// linux 下的 cmd 命令执行处理函数 +pub mod cmd; + /// 放置了一些基础的函数集合 pub mod util;