use crate::error::ValueError;
use std::fmt;
use std::str::FromStr;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum SelinuxMode {
Enforcing,
Permissive,
Disabled,
}
impl fmt::Display for SelinuxMode {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
SelinuxMode::Enforcing => write!(f, "enforcing"),
SelinuxMode::Permissive => write!(f, "permissive"),
SelinuxMode::Disabled => write!(f, "disabled"),
}
}
}
impl FromStr for SelinuxMode {
type Err = ValueError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_ascii_lowercase().as_str() {
"enforcing" => Ok(SelinuxMode::Enforcing),
"permissive" => Ok(SelinuxMode::Permissive),
"disabled" => Ok(SelinuxMode::Disabled),
_ => Err(ValueError {
key: String::from("SELINUX"),
message: format!("invalid SELinux mode: '{}'", s),
}),
}
}
}
pub const SELINUX_KEY: &str = "SELINUX";
pub const SELINUXTYPE_KEY: &str = "SELINUXTYPE";
pub const REQUIRESEUSERS_KEY: &str = "REQUIRESEUSERS";
pub const AUTORELABEL_KEY: &str = "AUTORELABEL";
pub const SETLOCALDEFS_KEY: &str = "SETLOCALDEFS";
pub const SELINUXTYPE_DEFAULT: &str = "targeted";
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Line {
Comment(String),
Blank(String),
Raw(String),
Entry {
key_raw: String,
value: String,
raw_leading: String,
raw_separator: String,
raw_suffix: String,
},
}