#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LineEnding {
Lf,
CrLf,
}
impl LineEnding {
pub fn as_str(self) -> &'static str {
match self {
LineEnding::Lf => "\n",
LineEnding::CrLf => "\r\n",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Indent {
Spaces(usize),
Tab,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Style {
pub end_of_line: LineEnding,
pub trim_trailing_whitespace: bool,
pub insert_final_newline: bool,
pub indent: Indent,
pub max_line_length: Option<usize>,
}
impl Default for Style {
fn default() -> Self {
Style {
end_of_line: LineEnding::Lf,
trim_trailing_whitespace: true,
insert_final_newline: true,
indent: Indent::Spaces(2),
max_line_length: None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_is_the_canonical_style() {
let s = Style::default();
assert_eq!(s.end_of_line, LineEnding::Lf);
assert!(s.trim_trailing_whitespace);
assert!(s.insert_final_newline);
assert_eq!(s.indent, Indent::Spaces(2));
assert_eq!(s.max_line_length, None);
}
#[test]
fn line_ending_bytes() {
assert_eq!(LineEnding::Lf.as_str(), "\n");
assert_eq!(LineEnding::CrLf.as_str(), "\r\n");
}
}