#diff #slice #patch #lcs #function #longest #utility

slice-diff-patch

Library crate providing utility functions for diff and patch of slices

9 releases (4 stable)

1.2.1 Feb 11, 2022
1.1.1 Feb 8, 2022
0.3.0 Feb 7, 2022
0.2.2 Feb 5, 2022
0.1.0 Feb 5, 2022

#2216 in Rust patterns

Download history 10/week @ 2023-12-18 103/week @ 2023-12-25 74/week @ 2024-01-01 160/week @ 2024-01-08 14/week @ 2024-01-15 25/week @ 2024-01-22 23/week @ 2024-01-29 7/week @ 2024-02-05 9/week @ 2024-02-12 33/week @ 2024-02-19 37/week @ 2024-02-26 24/week @ 2024-03-04 26/week @ 2024-03-11 20/week @ 2024-03-18 10/week @ 2024-03-25

81 downloads per month
Used in kifi

MIT license

21KB
327 lines

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

Dependencies

~93KB