diff --git a/Cargo.toml b/Cargo.toml index 5e6ba4fa..62eac946 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ url = "1.7" [dependencies.diesel] optional = true -version = "1.3" +version = "1.4" [dev-dependencies] serde_json = "1.0" diff --git a/src/lib.rs b/src/lib.rs index 10d10f61..60191ddd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -26,6 +26,9 @@ use std::{ fmt::{Display, Formatter, Result as FmtResult}, }; +#[cfg(feature = "diesel")] +use diesel::sql_types::Text; + use rand::{distributions::Alphanumeric, thread_rng, Rng}; use regex::Regex; use serde::{ @@ -85,7 +88,8 @@ pub enum Error { /// ); /// ``` #[derive(Clone, Debug, Eq, Hash, PartialEq)] -#[cfg_attr(feature = "diesel", derive(FromSqlRow))] +#[cfg_attr(feature = "diesel", derive(FromSqlRow, QueryId, AsExpression, SqlType))] +#[cfg_attr(feature = "diesel", sql_type = "Text")] pub struct EventId { hostname: Host, opaque_id: String, @@ -107,7 +111,8 @@ pub struct EventId { /// ); /// ``` #[derive(Clone, Debug, Eq, Hash, PartialEq)] -#[cfg_attr(feature = "diesel", derive(FromSqlRow))] +#[cfg_attr(feature = "diesel", derive(FromSqlRow, QueryId, AsExpression, SqlType))] +#[cfg_attr(feature = "diesel", sql_type = "Text")] pub struct RoomAliasId { alias: String, hostname: Host, @@ -129,7 +134,8 @@ pub struct RoomAliasId { /// ); /// ``` #[derive(Clone, Debug, Eq, Hash, PartialEq)] -#[cfg_attr(feature = "diesel", derive(FromSqlRow))] +#[cfg_attr(feature = "diesel", derive(FromSqlRow, QueryId, AsExpression, SqlType))] +#[cfg_attr(feature = "diesel", sql_type = "Text")] pub struct RoomId { hostname: Host, opaque_id: String, @@ -156,7 +162,8 @@ pub struct RoomId { /// "!n8f893n9:example.com" /// ); #[derive(Clone, Debug, Eq, Hash, PartialEq)] -#[cfg_attr(feature = "diesel", derive(FromSqlRow))] +#[cfg_attr(feature = "diesel", derive(FromSqlRow, QueryId, AsExpression, SqlType))] +#[cfg_attr(feature = "diesel", sql_type = "Text")] pub enum RoomIdOrAliasId { /// A Matrix room alias ID. RoomAliasId(RoomAliasId), @@ -179,7 +186,8 @@ pub enum RoomIdOrAliasId { /// ); /// ``` #[derive(Clone, Debug, Eq, Hash, PartialEq)] -#[cfg_attr(feature = "diesel", derive(FromSqlRow))] +#[cfg_attr(feature = "diesel", derive(FromSqlRow, QueryId, AsExpression, SqlType))] +#[cfg_attr(feature = "diesel", sql_type = "Text")] pub struct UserId { hostname: Host, localpart: String, @@ -758,11 +766,11 @@ mod diesel_integration { impl FromSql for $crate::$name where - DB: Backend, + String: FromSql, + DB: Backend, { - fn from_sql(bytes: Option<&[u8]>) -> DeserializeResult { - let string: String = FromSql::::from_sql(bytes)?; - + fn from_sql(value: Option<&::RawValue>) -> DeserializeResult { + let string = >::from_sql(value)?; $crate::$name::try_from(string.as_str()) .map_err(|error| Box::new(error) as Box) }