use std::ops::Range; use imara_diff::{Algorithm, Diff, Hunk, InternedInput}; pub enum DiffSpan { Insertion(Range), Deletion(Range), } pub fn diff(before: &[u8], after: &[u8]) -> Vec { let input = InternedInput::new(before, after); let diff = Diff::compute(Algorithm::Histogram, &input); let hunks: Vec = diff.hunks().collect(); let mut spans = Vec::with_capacity(hunks.len()); for hunk in hunks { if !hunk.before.is_empty() { spans.push(DiffSpan::Deletion(hunk.before)); } if !hunk.after.is_empty() { spans.push(DiffSpan::Insertion(hunk.after)); } } spans }