Packages

A fast CSV diffing library powered by the Rust csv-diff crate via Rustler.

Current section

Files

Jump to
csv_diff lib csv_diff.ex
Raw

lib/csv_diff.ex

defmodule CsvDiff do
@moduledoc """
Provides an interface to the `csv-diff` Rust library, allowing for the diffing of CSV files.
"""
@doc """
Diff two CSV strings and return a list of differences in structured form.
This corresponds to the `CsvByteDiffLocal` operation from the `csv-diff` Rust library.
## Examples
iex> CsvDiff.diff("a,b,c\\n1,2,3\\n4,5,6", "a,b,c\\n1,2,3\\n4,5,6")
[]
iex> CsvDiff.diff("a,b,c\\n1,2,3\\n4,5,6", "a,b,c\\n1,2,3\\n4,5,7")
[
{:modify, %{
delete: %CsvDiff.ByteRecordLineInfo{line: 3, record: ["4", "5", "6"]},
add: %CsvDiff.ByteRecordLineInfo{line: 3, record: ["4", "5", "7"]},
field_indices: [2]
}}
]
"""
def diff(a, b) do
CsvDiff.Native.diff(a, b)
end
end