patchfile 0.2.2

Render a set of diffs into diff -u format, which is compatible with patch.
Documentation
#[derive(Debug, Clone)]
pub(crate) struct LineNumber {
    pub left: usize,
    pub right: usize,
}

#[derive(Debug, Clone)]
pub(crate) struct Range {
    pub(crate) start: usize,
    pub(crate) count: usize,
}

#[derive(Debug, Clone)]
pub(crate) enum DiffU<'a> {
    CaretPos {
        left: Range,
        right: Range,
    },
    Addition(&'a str),
    Deletion(&'a str),
    Display(&'a str),
}

impl<'a> ToString for DiffU<'a> {
    fn to_string(&self) -> String {
        match self {
            DiffU::CaretPos { left, right } => format!("@@ -{},{} +{},{} @@", left.start, left.count, right.start, right.count),
            DiffU::Addition(s) => format!("+{}", s),
            DiffU::Deletion(s) => format!("-{}", s),
            DiffU::Display(s) => {
                if s.len() == 0 {
                    String::with_capacity(0)
                } else {
                    format!(" {}", s)
                }
            }
        }
    }
}