#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[allow(clippy::upper_case_acronyms)]
pub enum LineEnding {
LF, CRLF, CR, }
impl LineEnding {
pub fn detect(s: &str) -> Self {
if s.contains("\r\n") {
Self::CRLF
} else if s.contains("\r") {
Self::CR
} else {
Self::LF
}
}
pub fn as_str(&self) -> &'static str {
match self {
Self::LF => "\n",
Self::CRLF => "\r\n",
Self::CR => "\r",
}
}
pub fn normalize(s: &str) -> String {
s.replace("\r\n", "\n").replace("\r", "\n")
}
#[allow(dead_code)]
pub fn restore(&self, s: &str) -> String {
s.replace("\n", self.as_str())
}
pub fn restore_from_lines(&self, lines: Vec<String>) -> String {
lines.join(self.as_str())
}
}