switched to sqlite

This commit is contained in:
2026-06-06 19:43:56 +02:00
parent 05c69d26ed
commit 410ca2eeef
10 changed files with 58 additions and 91 deletions

View File

@ -1,12 +1,15 @@
use diesel::deserialize::{self, FromSql, FromSqlRow};
use diesel::sqlite::Sqlite;
use diesel::serialize::{self, ToSql, Output};
use diesel::sql_types::SmallInt;
use diesel::expression::AsExpression;
use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, AsExpression, FromSqlRow, serde::Serialize, serde::Deserialize)]
use diesel::{deserialize::{FromSql, FromSqlRow}, expression::AsExpression, serialize::{Output, ToSql}, sql_types::SmallInt, sqlite::{Sqlite, SqliteValue}};
use num_traits::FromPrimitive;
use num_derive::FromPrimitive;
use serde::{Deserialize, Serialize};
#[derive(FromSqlRow, Debug, AsExpression, FromPrimitive, Serialize, Deserialize, PartialEq, Clone)]
#[diesel(sql_type = SmallInt)]
#[repr(i16)]
pub enum ServerStatus {
Archived = 0,
Stopped = 1,
@ -16,27 +19,25 @@ pub enum ServerStatus {
Unknown = 5,
}
impl ToSql<SmallInt, Sqlite> for ServerStatus {
fn to_sql<'b>(&'b self, out: &mut Output<'b, '_, Sqlite>) -> serialize::Result {
let val = *self as i16;
<i16 as ToSql<SmallInt, Sqlite>>::to_sql(&val, out)
impl FromSql<SmallInt, Sqlite> for ServerStatus{
fn from_sql(bytes: SqliteValue) -> diesel::deserialize::Result<Self> {
let t = <i16 as FromSql<SmallInt, Sqlite>>::from_sql(bytes)?;
if let Some(status) = ServerStatus::from_i16(t) {
return Ok(status)
}
Ok(ServerStatus::Unknown)
}
}
impl FromSql<SmallInt, Sqlite> for ServerStatus {
fn from_sql(value: diesel::sqlite::SqliteValue<'_, '_, '_>) -> deserialize::Result<Self> {
let val = value.as_i64() as i16;
match val {
0 => Ok(ServerStatus::Archived),
1 => Ok(ServerStatus::Stopped),
2 => Ok(ServerStatus::Stopping),
3 => Ok(ServerStatus::Starting),
4 => Ok(ServerStatus::Running),
_ => Ok(ServerStatus::Unknown),
}
impl ToSql<SmallInt, Sqlite> for ServerStatus {
fn to_sql<'b>(&'b self, out: &mut Output<'b, '_, Sqlite>) -> diesel::serialize::Result {
let value: i16 = self.clone() as i16;
out.set_value(value.to_le_bytes().to_vec());
Ok(diesel::serialize::IsNull::No)
}
}
impl fmt::Display for ServerStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let str_status = match self {