ockam_api 0.93.0

Ockam's request-response API
use ockam::{Any, Context, Result, Routed, Worker};
use ockam_core::NeutralMessage;
use tracing as log;

pub struct Echoer;

#[ockam::worker]
impl Worker for Echoer {
    type Context = Context;
    type Message = Any;

    #[instrument(skip_all, name = "Echoer::handle_message")]
    async fn handle_message(&mut self, ctx: &mut Context, msg: Routed<Any>) -> Result<()> {
        log::debug!(src = %msg.src_addr(), from = %msg.sender()?, to = %msg.return_route().next()?, "echoing back");
        let msg = msg.into_local_message();
        ctx.send(msg.return_route, NeutralMessage::from(msg.payload))
            .await
    }
}