Change sqlx::Any to sqlx::Postgres

This commit is contained in:
bitfl0wer 2024-08-12 17:15:31 +02:00
parent ec9541f38e
commit b8571faf60
No known key found for this signature in database
GPG Key ID: 0ACD574FCF5226CF
6 changed files with 40 additions and 42 deletions

View File

@ -49,13 +49,11 @@ log = "0.4.22"
async-trait = "0.1.81"
chorus-macros = { path = "./chorus-macros", version = "0" } # Note: version here is used when releasing. This will use the latest release. Make sure to republish the crate when code in macros is changed!
sqlx = { version = "0.8.0", features = [
"mysql",
"sqlite",
"json",
"chrono",
"ipnetwork",
"runtime-tokio-rustls",
"any",
"postgres",
], optional = true }
discortp = { version = "0.5.0", optional = true, features = [
"rtp",

View File

@ -164,23 +164,23 @@ pub fn sqlx_bitflag_derive(input: TokenStream) -> TokenStream {
quote!{
#[cfg(feature = "sqlx")]
impl sqlx::Type<sqlx::Any> for #name {
fn type_info() -> sqlx::any::AnyTypeInfo {
<Vec<u8> as sqlx::Type<sqlx::Any>>::type_info()
impl sqlx::Type<sqlx::Postgres> for #name {
fn type_info() -> sqlx::postgres::PgTypeInfo {
<Vec<u8> as sqlx::Type<sqlx::Postgres>>::type_info()
}
}
#[cfg(feature = "sqlx")]
impl<'q> sqlx::Encode<'q, sqlx::Any> for #name {
fn encode_by_ref(&self, buf: &mut <sqlx::Any as sqlx::Database>::ArgumentBuffer<'q>) -> Result<sqlx::encode::IsNull, sqlx::error::BoxDynError> {
<Vec<u8> as sqlx::Encode<sqlx::Any>>::encode_by_ref(&self.bits().to_be_bytes().into(), buf)
impl<'q> sqlx::Encode<'q, sqlx::Postgres> for #name {
fn encode_by_ref(&self, buf: &mut <sqlx::Postgres as sqlx::Database>::ArgumentBuffer<'q>) -> Result<sqlx::encode::IsNull, sqlx::error::BoxDynError> {
<Vec<u8> as sqlx::Encode<sqlx::Postgres>>::encode_by_ref(&self.bits().to_be_bytes().into(), buf)
}
}
#[cfg(feature = "sqlx")]
impl<'q> sqlx::Decode<'q, sqlx::Any> for #name {
fn decode(value: <sqlx::Any as sqlx::Database>::ValueRef<'q>) -> Result<Self, sqlx::error::BoxDynError> {
let vec = <Vec<u8> as sqlx::Decode<sqlx::Any>>::decode(value)?;
impl<'q> sqlx::Decode<'q, sqlx::Postgres> for #name {
fn decode(value: <sqlx::Postgres as sqlx::Database>::ValueRef<'q>) -> Result<Self, sqlx::error::BoxDynError> {
let vec = <Vec<u8> as sqlx::Decode<sqlx::Postgres>>::decode(value)?;
Ok(Self::from_bits(vec_u8_to_u64(vec)).unwrap())
}
}

View File

@ -162,11 +162,11 @@ impl Display for GuildFeaturesList {
}
#[cfg(feature = "sqlx")]
impl<'r> sqlx::Decode<'r, sqlx::Any> for GuildFeaturesList {
impl<'r> sqlx::Decode<'r, sqlx::Postgres> for GuildFeaturesList {
fn decode(
value: <sqlx::Any as sqlx::Database>::ValueRef<'r>,
value: <sqlx::Postgres as sqlx::Database>::ValueRef<'r>,
) -> Result<Self, sqlx::error::BoxDynError> {
let v = <String as sqlx::Decode<sqlx::Any>>::decode(value)?;
let v = <String as sqlx::Decode<sqlx::Postgres>>::decode(value)?;
Ok(Self(
v.split(',')
.filter(|f| !f.is_empty())
@ -177,10 +177,10 @@ impl<'r> sqlx::Decode<'r, sqlx::Any> for GuildFeaturesList {
}
#[cfg(feature = "sqlx")]
impl<'q> sqlx::Encode<'q, sqlx::Any> for GuildFeaturesList {
impl<'q> sqlx::Encode<'q, sqlx::Postgres> for GuildFeaturesList {
fn encode_by_ref(
&self,
buf: &mut <sqlx::Any as sqlx::Database>::ArgumentBuffer<'q>,
buf: &mut <sqlx::Postgres as sqlx::Database>::ArgumentBuffer<'q>,
) -> Result<sqlx::encode::IsNull, Box<dyn std::error::Error + Send + Sync>> {
if self.is_empty() {
return Ok(sqlx::encode::IsNull::Yes);
@ -191,18 +191,18 @@ impl<'q> sqlx::Encode<'q, sqlx::Any> for GuildFeaturesList {
.collect::<Vec<_>>()
.join(",");
<String as sqlx::Encode<sqlx::Any>>::encode_by_ref(&features, buf)
<String as sqlx::Encode<sqlx::Postgres>>::encode_by_ref(&features, buf)
}
}
#[cfg(feature = "sqlx")]
impl sqlx::Type<sqlx::Any> for GuildFeaturesList {
fn type_info() -> sqlx::any::AnyTypeInfo {
<String as sqlx::Type<sqlx::Any>>::type_info()
impl sqlx::Type<sqlx::Postgres> for GuildFeaturesList {
fn type_info() -> <sqlx::Postgres as sqlx::Database>::TypeInfo {
<String as sqlx::Type<sqlx::Postgres>>::type_info()
}
fn compatible(ty: &sqlx::any::AnyTypeInfo) -> bool {
<String as sqlx::Type<sqlx::Any>>::compatible(ty)
fn compatible(ty: &<sqlx::Postgres as sqlx::Database>::TypeInfo) -> bool {
<String as sqlx::Type<sqlx::Postgres>>::compatible(ty)
}
}

View File

@ -342,7 +342,7 @@ pub struct DefaultReaction {
)]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
#[repr(u32)]
#[repr(i32)]
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/channel#channel-type>
pub enum ChannelType {

View File

@ -109,32 +109,32 @@ impl TryFrom<Vec<u8>> for ThemeColors {
#[cfg(feature = "sqlx")]
// TODO: Add tests for Encode and Decode.
impl<'q> sqlx::Encode<'q, sqlx::Any> for ThemeColors {
impl<'q> sqlx::Encode<'q, sqlx::Postgres> for ThemeColors {
fn encode_by_ref(
&self,
buf: &mut <sqlx::Any as sqlx::Database>::ArgumentBuffer<'q>,
buf: &mut <sqlx::Postgres as sqlx::Database>::ArgumentBuffer<'q>,
) -> Result<sqlx::encode::IsNull, Box<dyn std::error::Error + Send + Sync>> {
let mut vec_u8 = Vec::new();
vec_u8.extend_from_slice(&self.inner.0.to_be_bytes());
vec_u8.extend_from_slice(&self.inner.1.to_be_bytes());
<Vec<u8> as sqlx::Encode<sqlx::Any>>::encode_by_ref(&vec_u8, buf)
<Vec<u8> as sqlx::Encode<sqlx::Postgres>>::encode_by_ref(&vec_u8, buf)
}
}
#[cfg(feature = "sqlx")]
impl<'d> sqlx::Decode<'d, sqlx::Any> for ThemeColors {
impl<'d> sqlx::Decode<'d, sqlx::Postgres> for ThemeColors {
fn decode(
value: <sqlx::Any as sqlx::Database>::ValueRef<'d>,
value: <sqlx::Postgres as sqlx::Database>::ValueRef<'d>,
) -> Result<Self, sqlx::error::BoxDynError> {
let value_vec = <Vec<u8> as sqlx::Decode<'d, sqlx::Any>>::decode(value)?;
let value_vec = <Vec<u8> as sqlx::Decode<'d, sqlx::Postgres>>::decode(value)?;
value_vec.try_into().map_err(|e: ChorusError| e.into())
}
}
#[cfg(feature = "sqlx")]
impl sqlx::Type<sqlx::Any> for ThemeColors {
fn type_info() -> <sqlx::Any as sqlx::Database>::TypeInfo {
<String as sqlx::Type<sqlx::Any>>::type_info()
impl sqlx::Type<sqlx::Postgres> for ThemeColors {
fn type_info() -> <sqlx::Postgres as sqlx::Database>::TypeInfo {
<String as sqlx::Type<sqlx::Postgres>>::type_info()
}
}

View File

@ -99,28 +99,28 @@ impl<'de> serde::Deserialize<'de> for Snowflake {
}
#[cfg(feature = "sqlx")]
impl sqlx::Type<sqlx::Any> for Snowflake {
fn type_info() -> <sqlx::Any as sqlx::Database>::TypeInfo {
<String as sqlx::Type<sqlx::Any>>::type_info()
impl sqlx::Type<sqlx::Postgres> for Snowflake {
fn type_info() -> <sqlx::Postgres as sqlx::Database>::TypeInfo {
<String as sqlx::Type<sqlx::Postgres>>::type_info()
}
}
#[cfg(feature = "sqlx")]
impl<'q> sqlx::Encode<'q, sqlx::Any> for Snowflake {
impl<'q> sqlx::Encode<'q, sqlx::Postgres> for Snowflake {
fn encode_by_ref(
&self,
buf: &mut <sqlx::Any as sqlx::Database>::ArgumentBuffer<'q>,
buf: &mut <sqlx::Postgres as sqlx::Database>::ArgumentBuffer<'q>,
) -> Result<sqlx::encode::IsNull, sqlx::error::BoxDynError> {
<String as sqlx::Encode<'q, sqlx::Any>>::encode_by_ref(&self.0.to_string(), buf)
<String as sqlx::Encode<'q, sqlx::Postgres>>::encode_by_ref(&self.0.to_string(), buf)
}
}
#[cfg(feature = "sqlx")]
impl<'d> sqlx::Decode<'d, sqlx::Any> for Snowflake {
impl<'d> sqlx::Decode<'d, sqlx::Postgres> for Snowflake {
fn decode(
value: <sqlx::Any as sqlx::Database>::ValueRef<'d>,
value: <sqlx::Postgres as sqlx::Database>::ValueRef<'d>,
) -> Result<Self, sqlx::error::BoxDynError> {
<String as sqlx::Decode<'d, sqlx::Any>>::decode(value)
<String as sqlx::Decode<'d, sqlx::Postgres>>::decode(value)
.map(|s| s.parse::<u64>().map(Snowflake).unwrap())
}
}