Atproto, add sqlx support
Moves sqlx to workspace so this touches DB and workspace
This commit is contained in:
parent
8195ded307
commit
c1b5b774d5
6 changed files with 49 additions and 0 deletions
|
|
@ -8,7 +8,12 @@ atrium-api = { version = "0.25.3", default-features = false }
|
|||
lazy-regex = "3.4.1"
|
||||
serde.workspace = true
|
||||
serde_json.workspace = true
|
||||
sqlx = { workspace = true, optional = true }
|
||||
time = { version = "0.3.41", features = ["parsing", "formatting"] }
|
||||
tracing-subscriber.workspace = true
|
||||
tracing.workspace = true
|
||||
thiserror.workspace = true
|
||||
|
||||
[features]
|
||||
default = []
|
||||
sqlx-support = ["dep:sqlx"]
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
pub mod lexicons;
|
||||
pub mod types;
|
||||
pub mod error;
|
||||
#[cfg(feature = "sqlx-support")]
|
||||
pub mod sqlx;
|
||||
|
|
|
|||
38
atproto/src/sqlx.rs
Normal file
38
atproto/src/sqlx.rs
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
use crate::types::{
|
||||
Did,
|
||||
Cid,
|
||||
Uri,
|
||||
Handle,
|
||||
Datetime,
|
||||
};
|
||||
|
||||
macro_rules! implement_sqlx_for_string_type {
|
||||
($name:ident) => {
|
||||
impl sqlx::Type<sqlx::Postgres> for $name {
|
||||
fn type_info() -> sqlx::postgres::PgTypeInfo {
|
||||
<String as sqlx::Type<sqlx::Postgres>>::type_info()
|
||||
}
|
||||
}
|
||||
impl<'q> sqlx::Encode<'q, sqlx::Postgres> for $name {
|
||||
fn encode_by_ref(
|
||||
&self, buf: &mut sqlx::postgres::PgArgumentBuffer
|
||||
) -> Result<sqlx::encode::IsNull, sqlx::error::BoxDynError> {
|
||||
<String as sqlx::Encode<sqlx::Postgres>>::encode_by_ref(&self.to_string(), buf)
|
||||
}
|
||||
}
|
||||
impl<'r> sqlx::Decode<'r, sqlx::Postgres> for $name {
|
||||
fn decode(
|
||||
value: sqlx::postgres::PgValueRef<'r>
|
||||
) -> Result<Self, sqlx::error::BoxDynError> {
|
||||
let s = <String as sqlx::Decode<sqlx::Postgres>>::decode(value)?;
|
||||
s.parse::<$name>().map_err(|e| Box::new(e) as sqlx::error::BoxDynError)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
implement_sqlx_for_string_type!(Did);
|
||||
implement_sqlx_for_string_type!(Cid);
|
||||
implement_sqlx_for_string_type!(Uri);
|
||||
implement_sqlx_for_string_type!(Handle);
|
||||
implement_sqlx_for_string_type!(Datetime);
|
||||
Loading…
Add table
Add a link
Reference in a new issue