#[cfg(not(feature = "std"))]
compile_error!("The `std` feature currently must be enabled.");
use similar::algorithms::{lcs, DiffHook};
#[derive(Debug)]
pub struct Chunk<'a, T> {
pub value: &'a T,
pub appears_in: Vec<usize>,
}
pub fn multidiff<'a, T: PartialEq + 'a>(
to_diff: impl IntoIterator<Item = &'a [T]>,
) -> impl Iterator<Item = Chunk<'a, T>> {
let mut iter = to_diff.into_iter();
let Some(first) = iter.next() else {
return vec![].into_iter();
};
let old = first;
let new = iter.next().unwrap();
let mut d = Differ { old, new };
lcs::diff(&mut d, old, 0..old.len(), new, 0..new.len()).unwrap();
vec![todo!()].into_iter()
}
struct Differ<'a, T> {
old: &'a [T],
new: &'a [T],
}
impl<T> DiffHook for Differ<'_, T> {
type Error = ();
fn equal(&mut self, old_index: usize, new_index: usize, len: usize) -> Result<(), Self::Error> {
eprintln!("equal {}/{}/{}", old_index, new_index, len);
Ok(())
}
fn delete(
&mut self,
old_index: usize,
old_len: usize,
new_index: usize,
) -> Result<(), Self::Error> {
eprintln!("delete {}/{}/{}", old_index, old_len, new_index);
for mut item in self.old[old_index..(old_index + old_len)].iter() {
}
Ok(())
}
fn insert(
&mut self,
old_index: usize,
new_index: usize,
new_len: usize,
) -> Result<(), Self::Error> {
eprintln!("insert {}/{}/{}", old_index, new_index, new_len);
for mut item in self.new[new_index..(new_index + new_len)].iter() {
}
Ok(())
}
}