switched to sqlite
This commit is contained in:
@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user