use serde::{Deserialize, Serialize};
use t2_bus::prelude::*;
#[derive(Clone, Deserialize, Serialize, Debug)]
struct HelloRequest(String);
#[derive(Clone, Deserialize, Serialize, Debug)]
struct HelloResponse(String);
impl RequestProtocol for HelloRequest{
type Rsp = HelloResponse;
fn prefix() -> &'static str {
"hello"
}
}
#[tokio::main]
async fn main() -> BusResult<()> {
let(_stopper, connector) = t2_bus::transport::memory::serve()?;
let requester = t2_bus::transport::memory::connect(&connector)?;
let responder = t2_bus::transport::memory::connect(&connector)?;
let mut request_subscription = responder.serve::<HelloRequest>("").await?;
tokio::spawn(async move {
let (_topic, request_id, request) = request_subscription.recv().await.unwrap();
responder.respond::<HelloRequest>(request_id, &HelloResponse(format!("Hello {}", &request.0))).await?;
BusResult::Ok(())
});
let response = requester.request("", &HelloRequest("Alice".to_string())).await?;
assert_eq!(response.0, "Hello Alice".to_string());
Ok(())
}