Migrate to sqlx
This commit is contained in:
parent
bd44dc3183
commit
f3d08aab80
19 changed files with 1488 additions and 588 deletions
src/types
|
@ -3,12 +3,12 @@ use std::fmt::{Debug, Formatter};
|
|||
use std::str::FromStr;
|
||||
|
||||
use crate::types::EmgauwaUid;
|
||||
use diesel::backend::Backend;
|
||||
use diesel::deserialize::FromSql;
|
||||
use diesel::serialize::{IsNull, Output, ToSql};
|
||||
use diesel::sql_types::Binary;
|
||||
use diesel::{deserialize, serialize};
|
||||
use serde::{Serialize, Serializer};
|
||||
use sqlx::{Decode, Encode, Sqlite, Type};
|
||||
use sqlx::database::HasArguments;
|
||||
use sqlx::encode::IsNull;
|
||||
use sqlx::error::BoxDynError;
|
||||
use sqlx::sqlite::{SqliteTypeInfo, SqliteValueRef};
|
||||
use uuid::Uuid;
|
||||
|
||||
impl EmgauwaUid {
|
||||
|
@ -36,34 +36,26 @@ impl Debug for EmgauwaUid {
|
|||
}
|
||||
}
|
||||
|
||||
impl<DB> ToSql<Binary, DB> for EmgauwaUid
|
||||
where
|
||||
DB: Backend,
|
||||
[u8]: ToSql<Binary, DB>,
|
||||
{
|
||||
fn to_sql<'b>(&'b self, out: &mut Output<'b, '_, DB>) -> serialize::Result {
|
||||
match self {
|
||||
EmgauwaUid::Off => [EmgauwaUid::OFF_U8].to_sql(out)?,
|
||||
EmgauwaUid::On => [EmgauwaUid::ON_U8].to_sql(out)?,
|
||||
EmgauwaUid::Any(value) => value.as_bytes().to_sql(out)?,
|
||||
};
|
||||
Ok(IsNull::No)
|
||||
impl Type<Sqlite> for EmgauwaUid {
|
||||
fn type_info() -> SqliteTypeInfo {
|
||||
<&[u8] as Type<Sqlite>>::type_info()
|
||||
}
|
||||
|
||||
fn compatible(ty: &SqliteTypeInfo) -> bool {
|
||||
<&[u8] as Type<Sqlite>>::compatible(ty)
|
||||
}
|
||||
}
|
||||
|
||||
impl<DB> FromSql<Binary, DB> for EmgauwaUid
|
||||
where
|
||||
DB: Backend,
|
||||
Vec<u8>: FromSql<Binary, DB>,
|
||||
{
|
||||
fn from_sql(bytes: DB::RawValue<'_>) -> deserialize::Result<Self> {
|
||||
let blob: Vec<u8> = FromSql::<Binary, DB>::from_sql(bytes)?;
|
||||
impl<'q> Encode<'q, Sqlite> for EmgauwaUid {
|
||||
//noinspection DuplicatedCode
|
||||
fn encode_by_ref(&self, buf: &mut <Sqlite as HasArguments<'q>>::ArgumentBuffer) -> IsNull {
|
||||
<&Vec<u8> as Encode<Sqlite>>::encode(&Vec::from(self), buf)
|
||||
}
|
||||
}
|
||||
|
||||
match blob.as_slice() {
|
||||
[EmgauwaUid::OFF_U8] => Ok(EmgauwaUid::Off),
|
||||
[EmgauwaUid::ON_U8] => Ok(EmgauwaUid::On),
|
||||
value_bytes => Ok(EmgauwaUid::Any(Uuid::from_slice(value_bytes).unwrap())),
|
||||
}
|
||||
impl<'r> Decode<'r, Sqlite> for EmgauwaUid {
|
||||
fn decode(value: SqliteValueRef<'r>) -> Result<Self, BoxDynError> {
|
||||
Ok(EmgauwaUid::from(<&[u8] as Decode<Sqlite>>::decode(value)?))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -104,8 +96,8 @@ impl TryFrom<&str> for EmgauwaUid {
|
|||
impl From<&EmgauwaUid> for Uuid {
|
||||
fn from(emgauwa_uid: &EmgauwaUid) -> Uuid {
|
||||
match emgauwa_uid {
|
||||
EmgauwaUid::Off => uuid::Uuid::from_u128(EmgauwaUid::OFF_U128),
|
||||
EmgauwaUid::On => uuid::Uuid::from_u128(EmgauwaUid::ON_U128),
|
||||
EmgauwaUid::Off => Uuid::from_u128(EmgauwaUid::OFF_U128),
|
||||
EmgauwaUid::On => Uuid::from_u128(EmgauwaUid::ON_U128),
|
||||
EmgauwaUid::Any(value) => *value,
|
||||
}
|
||||
}
|
||||
|
@ -120,3 +112,33 @@ impl From<&EmgauwaUid> for String {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&EmgauwaUid> for Vec<u8> {
|
||||
fn from(emgauwa_uid: &EmgauwaUid) -> Vec<u8> {
|
||||
match emgauwa_uid {
|
||||
EmgauwaUid::Off => vec![EmgauwaUid::OFF_U8],
|
||||
EmgauwaUid::On => vec![EmgauwaUid::ON_U8],
|
||||
EmgauwaUid::Any(value) => value.as_bytes().to_vec(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&[u8]> for EmgauwaUid {
|
||||
fn from(value: &[u8]) -> Self {
|
||||
match value {
|
||||
[EmgauwaUid::OFF_U8] => EmgauwaUid::Off,
|
||||
[EmgauwaUid::ON_U8] => EmgauwaUid::On,
|
||||
value_bytes => EmgauwaUid::Any(Uuid::from_slice(value_bytes).unwrap()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Vec<u8>> for EmgauwaUid {
|
||||
fn from(value: Vec<u8>) -> Self {
|
||||
match value.as_slice() {
|
||||
[EmgauwaUid::OFF_U8] => EmgauwaUid::Off,
|
||||
[EmgauwaUid::ON_U8] => EmgauwaUid::On,
|
||||
value_bytes => EmgauwaUid::Any(Uuid::from_slice(value_bytes).unwrap()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue