use dimas::prelude::*;
#[derive(Debug)]
struct AgentProps {
counter: u128,
}
async fn queryable(ctx: Context<AgentProps>, request: QueryMsg) -> Result<()> {
let received: u128 = request.decode()?;
let value = ctx.read()?.counter;
let query = request.key_expr();
println!(
"Received query for {} with {}, responding with {}",
&query, &received, &value
);
request.reply(value)?;
ctx.write()?.counter += 1;
Ok(())
}
#[dimas::main]
async fn main() -> Result<()> {
let properties = AgentProps { counter: 0 };
let mut agent = Agent::new(properties)
.prefix("examples")
.name("queryable")
.config(&Config::default())?;
agent
.queryable()
.topic("query")
.callback(queryable)
.add()?;
agent.liveliness(true);
agent.start().await?;
Ok(())
}