1use 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}