db working, reorganize minecraft socket code

This commit is contained in:
2026-05-30 00:31:12 +02:00
parent 6e7285507d
commit 2303f06fea
14 changed files with 381 additions and 314 deletions

View File

@ -1,39 +1,37 @@
use serde::{Deserialize, Serialize};
use diesel::deserialize::{self, FromSql, FromSqlRow};
use diesel::pg::PgValue;
use diesel::expression::AsExpression;
use diesel::pg::Pg;
use diesel::serialize::{self, ToSql, Output};
use diesel::sql_types::SmallInt;
use std::io::Write;
#[derive(Clone, Copy, PartialEq, Eq, Serialize, Deserialize, diesel::expression::AsExpression, diesel::deserialize::FromSqlRow)]
#[diesel(sql_type = diesel::sql_types::SmallInt)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, AsExpression, FromSqlRow, serde::Serialize, serde::Deserialize)]
#[diesel(sql_type = SmallInt)]
pub enum ServerStatus {
Archived,
Stopped,
Stopping,
Starting,
Running,
Unknown,
Archived = 0,
Stopped = 1,
Stopping = 2,
Starting = 3,
Running = 4,
Unknown = 5,
}
impl<DB: diesel::backend::Backend> diesel::serialize::ToSql<diesel::sql_types::SmallInt, DB> for ServerStatus
where
<DB as diesel::backend::Backend>::RawValue: for<'a> diesel::serialize::ToSql<diesel::sql_types::SmallInt, DB<'a>> + ?Sized,
{
fn to_sql<'b>(&'b self, out: &mut diesel::serialize::Output<'b, '_, DB>) -> diesel::serialize::Result<diesel::serialize::IsNull> {
let val = match self {
ServerStatus::Archived => 0i16,
ServerStatus::Stopped => 1i16,
ServerStatus::Stopping => 2i16,
ServerStatus::Starting => 3i16,
ServerStatus::Running => 4i16,
ServerStatus::Unknown => -1i16,
};
diesel::serialize::ToSql::<diesel::sql_types::SmallInt, DB>::to_sql(&val, out)
impl ToSql<SmallInt, Pg> for ServerStatus {
fn to_sql<'b>(&'b self, out: &mut Output<'b, '_, Pg>) -> serialize::Result {
let val = *self as i16;
out.write_all(&val.to_be_bytes())?;
Ok(serialize::IsNull::No)
}
}
impl<DB: diesel::backend::Backend> diesel::deserialize::FromSql<diesel::sql_types::SmallInt, DB> for ServerStatus
where
<DB as diesel::backend::Backend>::RawValue: for<'a> diesel::deserialize::FromSql<'a, diesel::sql_types::SmallInt, DB> + ?Sized,
{
fn from_sql(bytes: <DB as diesel::backend::Backend>::RawValue<'_>) -> diesel::deserialize::Result<Self> {
let val = i16::from_sql(bytes)?;
impl FromSql<SmallInt, Pg> for ServerStatus {
fn from_sql(value: PgValue<'_>) -> deserialize::Result<Self> {
let bytes = value.as_bytes();
if bytes.len() != 2 {
return Err("Invalid length for i16".into());
}
let val = i16::from_be_bytes([bytes[0], bytes[1]]);
match val {
0 => Ok(ServerStatus::Archived),
1 => Ok(ServerStatus::Stopped),