10 个不稳定版本 (4 个破坏性更改)

0.5.0 2024年4月8日
0.4.0 2023年11月14日
0.3.1 2023年5月2日
0.2.2 2021年11月1日
0.0.1 2021年5月31日

#367配置

Download history 246/week @ 2024-04-19 3/week @ 2024-04-26 77/week @ 2024-07-26 9/week @ 2024-08-02

86 每月下载量

MIT/Apache

18KB
377

wd_run:一个项目操作管理工具

wd_run GitHub Actions wd_run on crates.io wd_run on docs.rs License

wd_run 支持命令行解析和配置文件解析。它主要通过注册回调的方式实现。

以下配置文件解析格式受支持

  • json
  • yaml
  • toml
  • http (编码)

入门

[dependencies]
wd_run = "0.2"

示例

use std::future::Future;
use std::pin::Pin;
use wd_run::*;

#[tokio::main]

async fn main() {
    ArgsManager::new()
        .add_global_flag("name", "wd_run_test", "server name")
        .register_init(init_one)
        .register_init(init_two)
        .register_cmd(
            CmdInfo::new("run", "run appliation").add("cycle", 5, "cycle index"),
            cmd_run,
        )
        .register_cmd(
            CmdInfo::new("show", "show init value").add("desc", "show info", "none"),
            cmd_show,
        )
        .register_exit(exit)
        .run()
        .await;
}

pub fn init_one(ctx: Context) -> Pin<Box<dyn Future<Output = Context> + Send>> {
    Box::pin(async move {
        //load config
        // let result:Config = load_config("./config.yaml").unwrap();
        ctx.set("init_one", "success".to_string()).await;
        return ctx;
    })
}
pub fn init_two(ctx: Context) -> Pin<Box<dyn Future<Output = Context> + Send>> {
    Box::pin(async move {
        ctx.set("init_two", "success".to_string()).await;
        return ctx;
    })
}
pub fn cmd_run(ctx: Context) -> Pin<Box<dyn Future<Output = Context> + Send>> {
    Box::pin(async move {
        let cycle = parse_args::<_, u32>(&ctx, "cycle").await.unwrap();
        for i in 0..cycle {
            tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
            println!("--->{}", i);
        }
        return ctx;
    })
}
pub fn cmd_show(ctx: Context) -> Pin<Box<dyn Future<Output = Context> + Send>> {
    Box::pin(async move {
        let name = ctx.copy::<_, String>("name").await.unwrap();
        let desc = ctx.copy::<_, String>("desc").await.unwrap();
        println!("----------> {}:{} <---------------", name, desc);
        let one = ctx.copy::<_, String>("init_one").await.unwrap();
        let two = ctx.copy::<_, String>("init_two").await.unwrap();
        println!("init one:{}  two:{}", one, two);
        return ctx;
    })
}
pub fn exit(ctx: Context) -> Pin<Box<dyn Future<Output = Context> + Send>> {
    Box::pin(async move {
        println!("game over");
        return ctx;
    })
}

运行以下命令:

cargo run -- run --cycle 3
cargo run -- show --name wd_run

许可证

许可协议为以下之一

由您选择。

贡献

除非您明确声明,否则根据 Apache-2.0 许可协议定义的任何有意提交以包含在作品中的贡献,都将按照上述方式双许可,不附加任何额外条款或条件。

依赖关系

~7–17MB
~198K SLoC