mprober_lib/process/
process_state.rs

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