#command #processor #async-task #async-trait #task-execution #primitive #traits

telecomande

一个小型crate,通过命令提供异步任务执行的原语

6个版本 (稳定)

1.2.2 2022年8月21日
1.0.1 2022年8月15日
0.1.0 2022年5月14日

#15#task-execution

每月下载量 23

MIT许可

12KB
179

telecomande

注意:这是故意的拼写错误,这样更容易找到。

描述

一个小型crate,提供通过命令通过处理器执行异步任务的原语。

示例

#[tokio::test]
async fn example() {
    use telecomande::Executor;

    // the commands you will send to the processor.
    #[derive(Debug)]
    pub enum Command {
        Greet,
        Say(String),
    }

    // the processor that handles commands.
    pub struct Proc {
        greeting: String,
    }
    #[telecomande::async_trait]
    impl telecomande::Processor for Proc {
        type Command = Command;
        type Error = ();
        async fn handle(&mut self, command: Self::Command) -> Result<(), ()> {
            match command {
                Command::Greet => println!("{}", self.greeting),
                Command::Say(text) => println!("{text}"),
            };
            Ok(())
        }
    }

    // launches an async task to run the processor when it receives commands.
    let handle = telecomande::SimpleExecutor::new(Proc {
        greeting: "Hello".into(),
    })
    .spawn();

    // remotes can be clonned and passed between threads.
    let remote = handle.remote();
    remote.send(Command::Greet).unwrap();
    remote.send(Command::Say("telecomande".into())).unwrap();

    // output:
    // Hello
    // telecomande

    tokio::time::sleep(std::time::Duration::from_millis(50)).await;
    drop(handle);
}

依赖项

~2.7–9MB
~75K SLoC