mprober_lib/process/
process_state.rs1use 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}