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" 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! 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 = [ sqlx = { version = "0.8.0", features = [
"mysql",
"sqlite",
"json", "json",
"chrono", "chrono",
"ipnetwork", "ipnetwork",
"runtime-tokio-rustls", "runtime-tokio-rustls",
"any", "postgres",
], optional = true } ], optional = true }
discortp = { version = "0.5.0", optional = true, features = [ discortp = { version = "0.5.0", optional = true, features = [
"rtp", "rtp",

View File

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

View File

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

View File

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

View File

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

View File

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