use ruststream::{Connected, OutgoingMessage, SubscriptionSource};
use ruststream_sqlx::{Inbox, InboxQueue, Publish, SqlxBroker};
use sqlx::{PgConnection, PgPool, Postgres};
fn subscribes<Source: SubscriptionSource<Connected<SqlxBroker<Postgres>>>>(source: Source) {
let _ = source;
}
#[derive(Inbox, sqlx::FromRow, Clone)]
#[inbox(table = "jobs")]
struct NoPayload {
#[field(id)]
id: i64,
}
impl Publish<Postgres> for NoPayload {
async fn publish(_: &mut PgConnection, _: &OutgoingMessage<'_>) -> Result<(), sqlx::Error> {
Ok(())
}
}
#[derive(Inbox, sqlx::FromRow)]
#[inbox(table = "jobs", custom(ack))]
struct Unacked {
#[field(id)]
id: i64,
#[field(payload)]
payload: Vec<u8>,
}
fn routed(pool: PgPool) -> SqlxBroker<Postgres> {
SqlxBroker::new(pool).route::<NoPayload>("jobs")
}
fn main() {
subscribes(InboxQueue::<Unacked>::new("jobs"));
let _ = routed;
}