#shell #interactive #terminal #cli

nightly mysh_derive

构建交互式外壳的脚手架

2 个版本

0.1.6 2024年1月30日
0.1.0 2024年1月25日

#208 in #interactive


mysh 中使用

MIT 许可证

9KB
188

mysh-rs

mysh,代表 "My Shell",是一个用于快速构建小型交互式外壳的 Rust 库。

用法

[dependencies]
mysh = "0.1.1"
futures = "0.3"
use mysh::{command, CommandArg};
use serde::Deserialize;

#[derive(CommandArg, Deserialize, Clone)]
pub struct Args {
  name: String,
}

#[command(
  name = "hello",
  description = "Prints hello world",
  long_description = "Prints hello world" // optional
)]
pub async fn hello(_: UserInfo, args: Args) -> mysh::Result<()> {
  println!("Hello {}", args.name);
  Ok(())
}
use mysh::Shell;
use tokio;

#[derive(Clone)]
pub struct UserInfo {}

// #[tokio::main] // or
#[actix_rt::main]
async fn main() {
  Shell::new(UserInfo {})
    .add_command(hello)
    .run()
    .await;
}

触发读取-评估-打印循环

cargo run

>> hello --name World
Hello World

运行单个命令

cargo run -- hello --name World
Hello World

运行示例

cargo run -p simple

依赖

~1–2MB
~41K SLoC