sheets-diff 2.5.0

Structured diff engine for Microsoft Excel .xlsx workbooks
Documentation
[package]
name = "sheets-diff"
version = "2.5.0"
edition = "2024"
rust-version = "1.88.0"

description = "Structured diff engine for Microsoft Excel .xlsx workbooks"
authors = ["nabbisen"]
license = "Apache-2.0"

categories = ["development-tools", "parsing", "data-structures"]
keywords = ["excel", "xlsx", "spreadsheet", "diff", "compare"]
repository = "https://github.com/nabbisen/sheets-diff-rs"
readme = "README.md"

[profile.release]
opt-level = "z"
lto = true
strip = true
codegen-units = 1

[profile.dev]
opt-level = 1
lto = false

# RFC-026: feature flags
# - "serde": optional Serialize derives on public model types (Deserialize deferred)
# - "chrono": optional ISO string synthesis for DateTime values from calamine serials
# - "cli": pulls in clap for the binary; not needed by library consumers
[features]
default = []
serde = ["dep:serde", "dep:serde_json"]
chrono = ["dep:chrono", "calamine/chrono"]
cli      = ["dep:clap"]

[[bin]]
name = "sheets-diff"
path = "src/main.rs"
required-features = ["cli"]

[dependencies]
# RFC-026: pin to 0.36 — API grounding for Data enum, ExcelDateTime, XlsxError::Password
calamine = "0.36"
serde     = { version = "1", features = ["derive"], optional = true }
serde_json = { version = "1", optional = true }
chrono    = { version = "0.4", optional = true }
clap      = { version = "4", features = ["derive"], optional = true }

[dev-dependencies]
rust_xlsxwriter = "0"
serde_json = "1"
criterion = { version = "0.8", features = ["html_reports"] }
# M7 Handoff 02 (RFC-027): the v1.2-vs-v2 benchmark comparison. Pinned exactly
# (not "1.2") so a fresh resolve can't silently pick up a later 1.2.x with
# different behaviour than what was measured. Renamed so both major versions
# coexist in one bench binary.
#
# This does NOT introduce a second calamine. v1.2.0's manifest pins
# `calamine = "0"` with no minor constraint, and a dependency's own committed
# lockfile does not constrain a consuming workspace, so Cargo unifies v1.2 and
# v2 onto the single `calamine 0.36.1` already here -- confirmed with
# `cargo tree -i calamine`. Both sides of the comparison therefore run on the
# literal same parser, which removes the largest confound the benchmark would
# otherwise have had. Do not pin calamine down for this dependency: doing so
# would manufacture exactly that confound.
#
# `cargo deny` consequently reports nothing about calamine because there is
# nothing to report -- not because `multiple-versions-include-dev` defaults to
# false. That default is real and is what covers the pre-existing zip 7.2/8.6
# dev-only split (see deny.toml's comment); it is unrelated to this.
sheets-diff-v1_2 = { package = "sheets-diff", version = "=1.2.0" }
# Test-only: patches a generated xlsx's internal XML (e.g. workbookPr
# date1904, a raw t="d" cell) to reach calamine code paths rust_xlsxwriter's
# public API cannot produce (RFC-035 Handoff 05, D-01/D-02 reachability).
# Version and feature set matched exactly to calamine's own `zip` dependency
# (version = "8.6", features = ["deflate"], default-features = false) so
# this reuses the already-resolved 8.6.0 with no new transitive deps —
# `zip`'s default features pull in ppmd/lzma/bzip2/aes codecs this crate
# does not use and one of which (ppmd-rust) fails the license allowlist.
zip = { version = "8.6", features = ["deflate"], default-features = false }

[[bench]]
name = "workbook_diff"
harness = false

[[bench]]
name = "memory"
harness = false

[[bench]]
name = "v1_2_comparison"
harness = false