1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
use std::str::FromStr; #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] pub enum ProcessState { Running, Sleeping, Waiting, Zombie, Stopped, TracingStop, PagingOrWaking, Dead, Wakekill, Parked, Idle, } impl ProcessState { #[allow(clippy::should_implement_trait)] #[inline] pub fn from_str<S: AsRef<str>>(s: S) -> Option<ProcessState> { match s.as_ref() { "R" => Some(ProcessState::Running), "S" => Some(ProcessState::Sleeping), "D" => Some(ProcessState::Waiting), "Z" => Some(ProcessState::Zombie), "T" => Some(ProcessState::Stopped), "t" => Some(ProcessState::TracingStop), "W" => Some(ProcessState::PagingOrWaking), "X" | "x" => Some(ProcessState::Dead), "K" => Some(ProcessState::Wakekill), "P" => Some(ProcessState::Parked), "I" => Some(ProcessState::Idle), _ => None, } } } impl ProcessState { #[inline] pub fn as_str(self) -> &'static str { match self { ProcessState::Running => "Running", ProcessState::Sleeping => "Sleeping", ProcessState::Waiting => "Waiting", ProcessState::Zombie => "Zombie", ProcessState::Stopped => "Stopped", ProcessState::TracingStop => "TracingStop", ProcessState::PagingOrWaking => "Waking", ProcessState::Dead => "Dead", ProcessState::Wakekill => "Wakekill", ProcessState::Parked => "Parked", ProcessState::Idle => "Idle", } } } impl FromStr for ProcessState { type Err = (); #[inline] fn from_str(s: &str) -> Result<Self, Self::Err> { ProcessState::from_str(s).ok_or(()) } } impl Default for ProcessState { #[inline] fn default() -> ProcessState { ProcessState::Idle } }