Files
dockermcmgr/src/status.rs
2026-06-12 18:27:55 +02:00

56 lines
1.7 KiB
Rust

use std::fmt;
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,
Stopping = 2,
Starting = 3,
Running = 4,
Archiving = 5,
Unknown,
}
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 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 as i32);
Ok(diesel::serialize::IsNull::No)
}
}
impl fmt::Display for ServerStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let str_status = match self {
ServerStatus::Archived => "archived",
ServerStatus::Archiving => "archiving",
ServerStatus::Stopped => "stopped",
ServerStatus::Stopping => "stopping",
ServerStatus::Starting => "starting",
ServerStatus::Running => "running",
ServerStatus::Unknown => "(error : unknown status)",
};
write!(f, "{}", str_status)
}
}