Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/znippy

znippy-iceberg/Cargo.toml

[package]
name = "znippy-iceberg"
# 0.1.11: local source DRIFTED from the published 0.1.10 at the same version number.
# crates.io bytes are immutable, so the edit only reaches consumers as a new
# version. Bumped 2026-08-23 to unblock the release cascade — holger patches
# znippy to this checkout, which makes 19 holger crates unpublishable fork riders.
version = "0.2.0"
edition = "2024"
authors = ["Ignalina ApS"]
description = "Apache Iceberg backend for znippy: IcebergSink (write) + IcebergZnippyReader (read) over a durable, embedded skade catalog."
license = "MIT"
repository = "https://git.gunnar.rs/nordisk/znippy"
readme = "../README.md"
categories = ["compression"]
keywords = ["iceberg", "arrow", "znippy", "parquet"]
# Development notes, agent instructions and machine-local tooling stay in the
# repository; they are not part of the published crate.
exclude = [
    ".nornir/",
]

# Iceberg backend for the `ArchiveMetaSink` trait. All of the async/tokio +
# Apache Iceberg + Arrow-57/Parquet dependencies are confined to this crate so
# the existing sync, tokio-free crates (znippy-common, znippy-compress, ...) are
# completely unaffected.
[dependencies]
znippy-common = { version = "0.10.0", path = "../znippy-common" }
anyhow = "1"

# `testmatrix` feature only — the reusable test-matrix emitter. OFF by default:
# the `functional_status` wrapper is compiled out entirely (no nornir dep in the
# default build / `cargo publish`), and every library call site is itself
# `#[cfg(feature = "testmatrix")]`. With the feature ON, the format-export hot
# paths (`IcebergSink::write_subindex`/`write_all`, `scan_base_batches_57`, and
# `seal`) emit one functional-status row per real operation so `nornir test
# --features testmatrix` SEES the iceberg backend's live activity.
nornir-testmatrix = { version = "0.2", default-features = false, optional = true }

# Async runtime — allowed here only (bridged to the sync trait via block_on).
tokio = { version = "1", features = ["rt-multi-thread"] }
futures = "0.3"

# Embedded, durable Iceberg warehouse: catalog.redb + file:// warehouse in one
# directory. skade lives OUTSIDE the znippy workspace (sibling repo), so it is a
# version-only dep — no `path =`. It re-exports the exact arrow/parquet/iceberg
# majors it is built against. For the arrow-58 migration the local skade (on 58,
# now via its OWN vendored `iceberg-arrow58` crate — no patch) is pulled via the
# root `[patch.crates-io] skade = { path = ... }`; the published manifest names
# crates.io skade >= 0.4.12 (the first genuinely-arrow-58 skade release).
# `default-features = false` drops skade's `sql` feature (datafusion +
# iceberg-datafusion). We only use open/table/read/append/unwiden, none of which
# need SQL — and datafusion pulls liblzma-sys, which collides on
# `links = "lzma"` with the workspace's ljar→zip→xz2→lzma-sys.
skade = { version = "0.5", default-features = false }

# Arrow 58 — the major skade/iceberg are now built against (arrow-58 migration via
# the patched iceberg/skade forks; see root [patch.crates-io]). znippy's own Arrow
# 58 and Iceberg's Arrow 58 are now the same major, so the IPC bridge is same-major.
arrow-array = "59"
arrow-schema = "59"
arrow-ipc = "59"
arrow-cast = "59"

[features]
default = []
# Passthrough to the nornir-testmatrix functional-status emitter. With this
# feature ON, the `functional_status(component, check, ok, detail)` calls in the
# roundtrip test below append real matrix rows carrying each check's REAL result
# + measured value. With it OFF (the release / `cargo publish` path) the emitter
# is a no-op and every gated call site is compiled OUT. The feature only gates a
# DEV-dependency, so it never reaches a published consumer's dependency tree.
testmatrix = ["dep:nornir-testmatrix", "nornir-testmatrix/testmatrix"]

[dev-dependencies]
tempfile = "3"
# Recompute the blake3 checksum over original bytes in the lifecycle test's
# resume path (mirrors the real compress pipeline, which hashes pre-compression
# bytes). Same major as znippy-common's blake3.
blake3 = "1"
# Drive a real compress run for the roundtrip test. No dependency cycle:
# znippy-compress does not depend on znippy-iceberg (only the optional CLI does).
znippy-compress = { path = "../znippy-compress" }
# nornir-testmatrix is now an OPTIONAL normal dependency (see [dependencies]),
# pulled in only by the `testmatrix` feature. Tests reach it through that same
# feature — the roundtrip / lifecycle tests' `functional_status` emits are all
# `#[cfg(feature = "testmatrix")]`, and the dep is stripped on `cargo publish`
# because the feature is off by default.