use ruststream::{Connected, SubscriptionSource};
use ruststream_sqlx::{Inbox, InboxQueue, Lock, SqlxBroker};
use sqlx::{PgConnection, Postgres};
fn subscribes<Source: SubscriptionSource<Connected<SqlxBroker<Postgres>>>>(source: Source) {
let _ = source;
}
#[derive(Inbox, sqlx::FromRow)]
#[inbox(table = "jobs", advisory_lock = "jobs-{id}", custom(lock, unlock))]
struct Unlocked {
#[field(id)]
id: i64,
#[field(payload)]
payload: Vec<u8>,
}
#[derive(Inbox, sqlx::FromRow)]
#[inbox(table = "jobs", advisory_lock = "jobs-{id}", custom(lock, unlock))]
struct HalfLocked {
#[field(id)]
id: i64,
#[field(payload)]
payload: Vec<u8>,
}
impl Lock<Postgres> for HalfLocked {
async fn lock(_: &mut PgConnection, _: &str) -> Result<bool, sqlx::Error> {
Ok(true)
}
}
fn main() {
subscribes(InboxQueue::<Unlocked>::new("jobs"));
subscribes(InboxQueue::<HalfLocked>::new("jobs"));
}