use std::fmt;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum ClearRefs {
PGReferencedAll = 1,
PGReferencedAnonymous = 2,
PGReferencedFile = 3,
SoftDirty = 4,
PeakRSS = 5,
}
impl fmt::Display for ClearRefs {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"{}",
match self {
ClearRefs::PGReferencedAll => 1,
ClearRefs::PGReferencedAnonymous => 2,
ClearRefs::PGReferencedFile => 3,
ClearRefs::SoftDirty => 4,
ClearRefs::PeakRSS => 5,
}
)
}
}
impl std::str::FromStr for ClearRefs {
type Err = &'static str;
fn from_str(s: &str) -> Result<Self, Self::Err> {
s.parse()
.map_err(|_| "Fail to parse clear refs value")
.and_then(|n| match n {
1 => Ok(ClearRefs::PGReferencedAll),
2 => Ok(ClearRefs::PGReferencedAnonymous),
3 => Ok(ClearRefs::PGReferencedFile),
4 => Ok(ClearRefs::SoftDirty),
5 => Ok(ClearRefs::PeakRSS),
_ => Err("Unknown clear refs value"),
})
}
}