#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DiffSymbols {
pub deleted: &'static str,
pub inserted: &'static str,
pub moved_from: &'static str,
pub moved_to: &'static str,
}
impl Default for DiffSymbols {
fn default() -> Self {
Self::STANDARD
}
}
impl DiffSymbols {
pub const STANDARD: Self = Self {
deleted: "-",
inserted: "+",
moved_from: "\u{2190}", moved_to: "\u{2192}", };
pub const ASCII: Self = Self {
deleted: "-",
inserted: "+",
moved_from: "<-",
moved_to: "->",
};
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ChangeKind {
Unchanged,
Deleted,
Inserted,
MovedFrom,
MovedTo,
Modified,
}
impl ChangeKind {
pub const fn symbol(self, symbols: &DiffSymbols) -> Option<&'static str> {
match self {
Self::Unchanged => None,
Self::Deleted | Self::Modified => Some(symbols.deleted),
Self::Inserted => Some(symbols.inserted),
Self::MovedFrom => Some(symbols.moved_from),
Self::MovedTo => Some(symbols.moved_to),
}
}
pub const fn is_changed(self) -> bool {
!matches!(self, Self::Unchanged)
}
}