echo/
echo.rs

1/// ```bash
2/// $ cargo build --examples
3/// $ maelstrom test -w echo --bin ./target/debug/examples/echo --node-count 1 --time-limit 10 --log-stderr
4/// ````
5use async_trait::async_trait;
6use maelstrom::protocol::Message;
7use maelstrom::{done, Node, Result, Runtime};
8use std::sync::Arc;
9
10pub(crate) fn main() -> Result<()> {
11    Runtime::init(try_main())
12}
13
14async fn try_main() -> Result<()> {
15    let handler = Arc::new(Handler::default());
16    Runtime::new().with_handler(handler).run().await
17}
18
19#[derive(Clone, Default)]
20struct Handler {}
21
22#[async_trait]
23impl Node for Handler {
24    async fn process(&self, runtime: Runtime, req: Message) -> Result<()> {
25        if req.get_type() == "echo" {
26            let echo = req.body.clone().with_type("echo_ok");
27            return runtime.reply(req, echo).await;
28        }
29
30        done(runtime, req)
31    }
32}