#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub enum ProcessState
{
Running,
Sleeping,
SleepingInAnUninterruptibleWait,
Stopped,
TracingStop,
Dead,
Zombie,
Idle,
WakeKill,
Parked,
PagingOrWaking,
}
impl FromBytes for ProcessState
{
type Error = ParseNumberError;
#[inline(always)]
fn from_bytes(value: &[u8]) -> Result<Self, Self::Error>
{
use self::ParseNumberError::*;
if unlikely!(value.len() < 1)
{
return Err(TooShort)
}
use self::ProcessState::*;
let value = match value[0]
{
b'R' => Running,
b'S' => Sleeping,
b'D' => SleepingInAnUninterruptibleWait,
b'Z' => Zombie,
b'T' => Stopped,
b'X' => Dead,
b'I' => Idle,
b't' => TracingStop,
b'x' => Dead,
#[allow(deprecated)] b'W' => PagingOrWaking,
#[allow(deprecated)] b'K' => WakeKill,
#[allow(deprecated)] b'P' => Parked,
_ => return Err(OutOfRange)
};
Ok(value)
}
}
impl TryFrom<i8> for ProcessState
{
type Error = ParseNumberError;
#[inline(always)]
fn try_from(value: i8) -> Result<Self, Self::Error>
{
Self::try_from(value as u8)
}
}
impl TryFrom<u8> for ProcessState
{
type Error = ParseNumberError;
#[inline(always)]
fn try_from(value: u8) -> Result<Self, Self::Error>
{
use self::ParseNumberError::*;
use self::ProcessState::*;
let value = match value
{
b'R' => Running,
b'S' => Sleeping,
b'D' => SleepingInAnUninterruptibleWait,
b'Z' => Zombie,
b'T' => Stopped,
b'X' => Dead,
b'I' => Idle,
b't' => TracingStop,
b'x' => Dead,
#[allow(deprecated)] b'W' => PagingOrWaking,
#[allow(deprecated)] b'K' => WakeKill,
#[allow(deprecated)] b'P' => Parked,
_ => return Err(OutOfRange)
};
Ok(value)
}
}