java_diff_utils_rs/algorithm/
diff_algorithm.rs1use 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}