slice-diff-patch

Crates.ioslice-diff-patch
lib.rsslice-diff-patch
version1.2.1
sourcesrc
created_at2022-02-05 18:01:43.490975
updated_at2022-02-11 19:30:04.957877
descriptionLibrary crate providing utility functions for diff and patch of slices
homepagehttps://github.com/qtfkwk/slice-diff-patch
repositoryhttps://github.com/qtfkwk/slice-diff-patch
max_upload_size
id527520
size20,243
qtfkwk (qtfkwk)

documentation

https://docs.rs/slice-diff-patch/latest/slice_diff_patch

README

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:

Changelog:

  • 0.1.0: initial
  • 0.2.0: add support for diff crate
  • 0.2.1: fix readme
  • 0.2.2: fix readme
  • 0.3.0: derive Clone on Change
  • 1.0.0: add Update variant on Change
  • 1.1.0: add doc test example
  • 1.1.1: fix readme
  • 1.2.1: expose remove() and insert() functions
Commit count: 9

cargo fmt