prefixed_tsid/
diesel.rs

1use diesel::{deserialize::FromSql, pg::Pg, serialize::ToSql, sql_types::BigInt};
2
3use crate::{resources::TSIDResource, tsid::TSIDDatabaseID};
4
5impl<Resource: TSIDResource> ToSql<BigInt, Pg> for TSIDDatabaseID<Resource> {
6    fn to_sql<'b>(
7        &'b self,
8        out: &mut diesel::serialize::Output<'b, '_, Pg>,
9    ) -> diesel::serialize::Result {
10        let val = self.to_raw_number() as i64;
11        <i64 as ToSql<BigInt, Pg>>::to_sql(&val, &mut out.reborrow())
12    }
13}
14
15impl<Resource: TSIDResource> FromSql<BigInt, Pg> for TSIDDatabaseID<Resource> {
16    fn from_sql(
17        bytes: <Pg as diesel::backend::Backend>::RawValue<'_>,
18    ) -> diesel::deserialize::Result<Self> {
19        let num = i64::from_sql(bytes)?;
20        Ok(TSIDDatabaseID::<Resource>::from_raw_number(num as u64))
21    }
22}