sheets-diff 2.4.1

Structured diff engine for Microsoft Excel .xlsx workbooks
Documentation
[package]
name = "sheets-diff"
version = "2.4.1"
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"] }
# 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