use std::time::Duration;
use super::{Claiming, Event, Events, Leasing, Now, Settling};
use crate::inbox::database::QueueDatabase;
use crate::inbox::queue::Queue;
#[derive(Debug)]
pub struct Values<'a, DB: QueueDatabase, Row: Events<DB>> {
pub event: Event,
pub queue: &'static Queue,
pub limit: i64,
pub id: Option<&'a Row::Id>,
pub ids: &'a [Row::Id],
pub delay: Duration,
pub destination: &'a str,
pub now: Now,
pub lease: Option<Row::Token>,
pub leasing: Option<&'a Leasing<Row::Token>>,
pub held: Option<Row::Token>,
pub key: Option<&'a str>,
}
impl<'a, DB: QueueDatabase, Row: Events<DB>> Values<'a, DB, Row> {
pub(crate) const fn claiming(
cx: Claiming,
event: Event,
leasing: Option<&'a Leasing<Row::Token>>,
) -> Self {
Self {
event,
queue: cx.queue,
limit: cx.limit,
id: None,
ids: &[],
delay: Duration::ZERO,
destination: "",
now: cx.now,
lease: match leasing {
Some(leasing) => Some(leasing.expiry),
None => None,
},
leasing,
held: None,
key: None,
}
}
pub(super) const fn settling(
cx: Settling,
event: Event,
id: &'a Row::Id,
held: Option<Row::Token>,
) -> Self {
Self {
event,
queue: cx.queue,
limit: 0,
id: Some(id),
ids: &[],
delay: Duration::ZERO,
destination: "",
now: cx.now,
lease: None,
leasing: None,
held,
key: None,
}
}
pub(crate) const fn unlocking(cx: Settling, key: &'a str) -> Self {
Self {
event: Event::Unlock,
queue: cx.queue,
limit: 0,
id: None,
ids: &[],
delay: Duration::ZERO,
destination: "",
now: cx.now,
lease: None,
leasing: None,
held: None,
key: Some(key),
}
}
}