// Take a look at the license at the top of the repository in the LICENSE file. use std::fmt; pub use crate::sys::inner::process::*; use crate::ProcessStatus; #[doc(hidden)] impl From for ProcessStatus { fn from(status: u32) -> ProcessStatus { match status { 1 => ProcessStatus::Idle, 2 => ProcessStatus::Run, 3 => ProcessStatus::Sleep, 4 => ProcessStatus::Stop, 5 => ProcessStatus::Zombie, x => ProcessStatus::Unknown(x), } } } impl fmt::Display for ProcessStatus { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.write_str(match *self { ProcessStatus::Idle => "Idle", ProcessStatus::Run => "Runnable", ProcessStatus::Sleep => "Sleeping", ProcessStatus::Stop => "Stopped", ProcessStatus::Zombie => "Zombie", _ => "Unknown", }) } } /// Enum describing the different status of a thread. #[derive(Clone, Debug, PartialEq, Eq)] pub enum ThreadStatus { /// Thread is running normally. Running, /// Thread is stopped. Stopped, /// Thread is waiting normally. Waiting, /// Thread is in an uninterruptible wait Uninterruptible, /// Thread is halted at a clean point. Halted, /// Unknown. Unknown(i32), } impl From for ThreadStatus { fn from(status: i32) -> ThreadStatus { match status { 1 => ThreadStatus::Running, 2 => ThreadStatus::Stopped, 3 => ThreadStatus::Waiting, 4 => ThreadStatus::Uninterruptible, 5 => ThreadStatus::Halted, x => ThreadStatus::Unknown(x), } } } impl ThreadStatus { /// Used to display `ThreadStatus`. pub fn to_string(&self) -> &str { match *self { ThreadStatus::Running => "Running", ThreadStatus::Stopped => "Stopped", ThreadStatus::Waiting => "Waiting", ThreadStatus::Uninterruptible => "Uninterruptible", ThreadStatus::Halted => "Halted", ThreadStatus::Unknown(_) => "Unknown", } } } impl fmt::Display for ThreadStatus { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", self.to_string()) } }