You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit fcc2a1a
Browse filesBrowse the repository at this point in the historyBrowse files
`query_async*()` and `query_as_async*()` use bounded channels and keep blocking ZIP/XML work off
123
+
the async executor. They do not turn filesystem access into async I/O and do not require Tokio.
124
+
Explicit cancellation yields an error recognized by `Error::is_cancelled()`; dropping the stream
125
+
requests cancellation without blocking the executor. Parser initialization or the current row may
126
+
finish before background cleanup completes.
127
+
101
128
## Borrowed Readers And Writers
102
129
103
130
Use visitor APIs for caller-owned `Read + Seek` sources without materializing all rows or transferring ownership:
@@ -489,7 +516,7 @@ Version 1 does not implement `@group`, `@if`, parametrized sheet cloning, `$=` f
489
516
-`MiniExcel::query()` and `query_as()` strictly stream worksheet XML from paths.
490
517
- Grouped analytics retain state proportional to distinct groups and stop at `max_groups`.
491
518
- RAG exports never recalculate formulas and reject hidden sheets unless explicitly allowed.
492
-
-Streaming queries are synchronous and use one worker thread per active query. The optional async Insert API makes row production asynchronous, not ZIP I/O.
519
+
-Synchronous streaming queries use one worker thread per active query. Optional async query and Insert APIs use bounded channels around blocking XLSX workers; ZIP/XML/filesystem work is not async I/O.
493
520
- Save creates new workbooks and refuses existing target paths by default. `MiniExcel::insert*()` atomically appends or strictly replaces a worksheet in an existing `.xlsx` path, or creates a workbook when the path is missing.
Copy file name to clipboardExpand all lines: docs/compatibility.md
+5-3Lines changed: 5 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,7 @@ The Rust MVP implements the smallest useful MiniExcel-style XLSX read/write surf
11
11
| Dependency | Locked API line | Role | License | MSRV note |
12
12
| --- | --- | --- | --- | --- |
13
13
|`atomicwrites`| 0.4 | Safe cross-platform atomic replacement for Windows path inserts | MIT | Windows-only dependency; checked with Rust 1.85 |
14
-
|`async-channel` / `event-listener` / `futures-*`| 2.5 / 5.4 / 0.3 | Optional runtime-neutral async Insert producer and cancellation | MIT OR Apache-2.0 | Enabled only by the `async` feature; checked with Rust 1.85 |
14
+
|`async-channel` / `event-listener` / `futures-*`| 2.5 / 5.4 / 0.3 | Optional runtime-neutral async query/Insert and cancellation | MIT OR Apache-2.0 | Enabled only by the `async` feature; checked with Rust 1.85 |
15
15
|`fs2`| 0.4 | Cross-platform advisory locking for path inserts | MIT OR Apache-2.0 | Checked with Rust 1.85 |
16
16
|`calamine`| 0.35 | XLSX parsing and Serde row deserialization | MIT | 0.35 declares Rust 1.83 |
17
17
|`clap`| 4.6 | Local CLI argument parsing | MIT OR Apache-2.0 | 4.6 declares Rust 1.85 |
@@ -54,6 +54,7 @@ The latest `calamine 0.36` and `rust_xlsxwriter 0.97` require Rust 1.88. The MVP
54
54
| Multi-sheet export |`save_as_sheets()` / `save_as_serialized_sheets()`| Preserves input sheet order and returns data-row counts |
55
55
|`InsertSheet` append/replace |`insert()` / `insert_with_schema()` / `insert_serialized()` / borrowed reader-to-writer variants | Path APIs are atomic; separate borrowed streams require an empty sink and preserve package behavior without atomic commit |
56
56
| Async Insert producer |`insert_with_schema_async*()`| Optional `async` feature; bounded producer channel with blocking XLSX work on a dedicated thread |
| Per-sheet visibility |`WriteOptions::with_sheet_visibility()`| Visible, hidden, and very hidden; first visible sheet is active |
58
59
|`overwriteFile`|`WriteOptions::with_overwrite_file()`| Defaults to `false`; existing paths require explicit opt-in |
59
60
|`FreezeRowCount` / `FreezeColumnCount`|`WriteOptions::with_freeze_row_count()` / `with_freeze_column_count()`| Defaults to one frozen row and zero frozen columns |
@@ -162,7 +163,7 @@ dotnet test ../MiniExcel/tests/MiniExcel.OpenXml.Tests/MiniExcel.OpenXml.Tests.c
162
163
163
164
The Rust workflow runs the Rust contract on Linux and Windows. Its .NET parity job checks out the MiniExcel repository, copies this revision's contract into that checkout, and runs the .NET adapter on Linux. A compatibility change is complete only when the shared contract is updated deliberately and both adapters pass it.
164
165
165
-
The contract covers only the current common surface: dynamic/typed path queries, inclusive range queries, column-name discovery, header behavior, sheet selection/order, A1 starts, empty/style-only rows, inferred cell references, scalar/date/duration mapping, trimmed typed headers, and conversion-error row/value context. Structured provenance is a Rust research extension and is not a .NET parity claim. Async APIs, DataReader, templates, and writing parity remain outside version 1 and must not be described as equivalent yet.
166
+
The contract covers only the current common surface: dynamic/typed path queries, inclusive range queries, column-name discovery, header behavior, sheet selection/order, A1 starts, empty/style-only rows, inferred cell references, scalar/date/duration mapping, trimmed typed headers, and conversion-error row/value context. Structured provenance is a Rust research extension and is not a .NET parity claim. Async APIs are tested against the same fixtures but are not part of the shared contract; DataReader, templates, and writing parity also remain outside version 1.
166
167
167
168
## .NET Coverage Boundary
168
169
@@ -182,6 +183,7 @@ The contract covers only the current common surface: dynamic/typed path queries,
182
183
| Versioned grouped analytics | Rust research extension | No |
183
184
| Addressed JSONL/Markdown/manifest RAG export | Rust research extension | No |
| DataReader and broader stream ownership | Deferred | No |
186
188
| Append worksheet to existing `.xlsx` workbook | Implemented and atomically committed | Rust tests; shared parity contract not yet extended |
187
189
| Strict worksheet replacement | Implemented for plain targets and supported target-owned closures | Rust tests; stale calcChain removed and full recalculation requested |
@@ -192,4 +194,4 @@ This matrix is the coverage claim: Rust does not yet provide complete API parity
192
194
193
195
## Deferred Work
194
196
195
-
SQL text parsing, `HAVING`, `ORDER BY`, joins, windows, pivots, disk-spill aggregation, vector indexing, model calls, old Excel formats, advanced template directives and sheet cloning, image authoring, merged-cell APIs, formula calculation/dependency expansion, formula authoring, general styling, async query/export/template I/O, and borrowed XLSX lazy readers require separate design and acceptance milestones. CSV DataReader/DataTable adapters are intentionally replaced by Rust iterators, and a one-call CSV/XLSX converter is not exposed; callers compose query and save APIs. See the [Insert migration guide](insert-v1-migration.md) for supported workflows and deliberate differences.
197
+
SQL text parsing, `HAVING`, `ORDER BY`, joins, windows, pivots, disk-spill aggregation, vector indexing, model calls, old Excel formats, advanced template directives and sheet cloning, image authoring, merged-cell APIs, formula calculation/dependency expansion, formula authoring, general styling, async export/template I/O, async borrowed readers, and borrowed XLSX lazy readers require separate design and acceptance milestones. CSV DataReader/DataTable adapters are intentionally replaced by Rust iterators, and a one-call CSV/XLSX converter is not exposed; callers compose query and save APIs. See the [Insert migration guide](insert-v1-migration.md) for supported workflows and deliberate differences.
0 commit comments