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}