Crate slice_diff_patch

Source
Expand description

This crate provides the Change enum as an abstraction for diff::Result, lcs_diff::DiffResult, and wu_diff::DiffResult; the diff_changes(), diff_diff(), lcs_changes(), lcs_diff(), wu_changes(), and wu_diff() functions to calculate or process diffs between a and b slices via LCS (Longest Common Subsequence) or Wu diff algorithms into a Vec<Change>, the patch() function to reproduce b from the a slice and Vec<Change>, and the insert() and remove() functions to enable writing a custom changes function.

use slice_diff_patch::*;

let a = vec!["one", "TWO", "three", "four"];
let b = vec!["zero", "one", "two", "four"];

let diff = diff_diff(&a, &b);
assert_eq!(
    diff,
    vec![
        Change::Insert((0, "zero")),
        Change::Remove(2),
        Change::Update((2, "two")),
    ],
);
assert_eq!(patch(&a, &diff), b);

let lcs = lcs_diff(&a, &b);
assert_eq!(
    lcs,
    vec![
        Change::Insert((0, "zero")),
        Change::Update((2, "two")),
        Change::Remove(3),
    ],
);
assert_eq!(patch(&a, &lcs), b);

let wu = wu_diff(&a, &b);
assert_eq!(
    wu,
    vec![
        Change::Insert((0, "zero")),
        Change::Remove(2),
        Change::Update((2, "two")),
    ],
);
assert_eq!(patch(&a, &wu), b);

See also:

Enums§

Change
Abstraction for diff::Result, lcs_diff::DiffResult, and wu_diff::DiffResult that excludes a variant for common sequence, stores a clone of inserted items, and indices relate iteratively to a.

Functions§

diff_changes
Convert a slice of diff::Result into a Vec<Change>.
diff_diff
Calculate the diff between a and b via diff::slice and convert to a Vec<Change>.
insert
Process an insert.
lcs_changes
Convert a slice of lcs_diff::DiffResult into a Vec<Change>.
lcs_diff
Calculate the diff between a and b via lcs_diff::diff and convert to a Vec<Change>.
patch
Reproduce b from the a slice and Vec<Change>.
remove
Process a remove.
wu_changes
Convert a slice of wu_diff::DiffResult into a Vec<Change>.
wu_diff
Calculate the diff between a and b via wu_diff::diff and convert to a Vec<Change>.