use serde::{Deserialize, Serialize};
use t2_bus::prelude::*;
#[derive(Clone, Deserialize, Serialize, Debug)]
struct HelloProtocol(String);
impl PublishProtocol for HelloProtocol{
fn prefix() -> &'static str {
"hello"
}
}
#[tokio::main]
async fn main() -> BusResult<()> {
let(stopper, connector) = t2_bus::transport::memory::serve()?;
let publisher = t2_bus::transport::memory::connect(&connector)?;
let subscriber = t2_bus::transport::memory::connect(&connector)?;
let mut subscription = subscriber.subscribe::<HelloProtocol>("alice").await?;
publisher.publish("alice", &HelloProtocol("Hello Alice".to_string())).await?;
let (topic, message) = subscription.recv().await.unwrap();
assert_eq!(topic, "hello/alice".to_string());
assert_eq!(message.0, "Hello Alice".to_string());
stopper.stop().await.unwrap();
Ok(())
}