aide_de_camp_sqlite/
types.rs1use aide_de_camp::core::{Bytes, DateTime, Xid};
2use sqlx::sqlite::SqliteRow;
3use sqlx::{Error, FromRow, Row};
4use std::str::FromStr;
5
6#[derive(Debug)]
7pub(crate) struct JobRow {
8 pub jid: Xid,
9 pub job_type: String,
10 pub payload: Bytes,
11 pub retries: u32,
12 pub scheduled_at: DateTime,
13 pub enqueued_at: DateTime,
14}
15
16impl<'r> FromRow<'r, SqliteRow> for JobRow {
17 fn from_row(row: &'r SqliteRow) -> Result<Self, Error> {
18 let jid = row
19 .try_get("jid")
20 .map(Xid::from_str)?
21 .map_err(|xid_err| Error::Decode(Box::new(xid_err)))?;
22 let job_type = row.try_get("job_type")?;
23 let payload = row.try_get::<Vec<u8>, _>("payload").map(Bytes::from)?;
24 let retries: u32 = row.try_get("retries").map(|r: u32| r - 1)?;
27 let scheduled_at = row.try_get("scheduled_at")?;
28 let enqueued_at = row.try_get("enqueued_at")?;
29 Ok(Self {
30 jid,
31 job_type,
32 payload,
33 retries,
34 scheduled_at,
35 enqueued_at,
36 })
37 }
38}