Skip to main content

java_diff_utils_rs/algorithm/
diff_algorithm.rs

1use super::{
2    change::Change,
3    diff_algorithm_listener::{DiffAlgorithmListener, NoOpListener},
4};
5
6pub trait DiffAlgorithm<T> {
7    fn diff(&self, source: &[T], target: &[T]) -> Vec<Change> {
8        let mut noop = NoOpListener;
9        self.diff_with_listener(source, target, &mut noop)
10    }
11
12    fn diff_with_listener(
13        &self,
14        source: &[T],
15        target: &[T],
16        listener: &mut dyn DiffAlgorithmListener,
17    ) -> Vec<Change>;
18}
19
20impl<T, F> DiffAlgorithm<T> for F
21where
22    F: Fn(&[T], &[T]) -> Vec<Change>,
23{
24    fn diff(&self, source: &[T], target: &[T]) -> Vec<Change> {
25        self(source, target)
26    }
27
28    fn diff_with_listener(
29        &self,
30        source: &[T],
31        target: &[T],
32        _listener: &mut dyn DiffAlgorithmListener,
33    ) -> Vec<Change> {
34        self(source, target)
35    }
36}