use dimas::prelude::*;
#[derive(Debug)]
struct AgentProps {
count: u128,
}
#[derive(Debug, Encode, Decode)]
pub struct PubSubMessage {
pub count: u128,
pub text: String,
}
async fn hello_publishing(ctx: Context<AgentProps>, message: Message) -> Result<()> {
let message: PubSubMessage = message.decode()?;
let count = ctx.read()?.count;
if message.count > count {
println!("missed {} messages", message.count - count);
ctx.write()?.count = message.count;
}
println!("Received {} [{}]", message.text, message.count);
ctx.write()?.count += 1;
Ok(())
}
async fn hello_deletion(ctx: Context<AgentProps>) -> Result<()> {
let _value = ctx.read()?.count;
println!("Shall delete 'hello' message");
Ok(())
}
#[dimas::main]
async fn main() -> Result<()> {
let properties = AgentProps { count: 0 };
let mut agent = Agent::new(properties)
.prefix("examples")
.name("subscriber")
.config(&Config::default())?;
agent
.subscriber()
.topic("hello")
.put_callback(hello_publishing)
.delete_callback(hello_deletion)
.add()?;
agent.liveliness(true);
agent.start().await?;
Ok(())
}