#[non_exhaustive]pub struct BatchOptions {
pub max_concurrent_docs: Option<usize>,
pub max_inflight_bytes: Option<usize>,
pub per_doc_deadline: Option<Duration>,
}Expand description
Concurrency limits and per-document budgets for batch processing.
All fields are optional and independent. When both concurrency limits
are set the more restrictive one governs at any given moment;
per_doc_deadline is orthogonal and applies separately to each
document’s permit-acquired execution slice.
§Breaking change in this release
This struct gained #[non_exhaustive] and a new per_doc_deadline
field in spec 005 Phase 3d. Downstream code that previously
constructed BatchOptions with a struct literal
(BatchOptions { max_concurrent_docs, max_inflight_bytes }) will
no longer compile — #[non_exhaustive] blocks cross-crate
struct-literal construction unconditionally, even when every
existing field is supplied. Switch to
Default::default() + public field assignment, shown below. (The
CHANGELOG / release notes for this version surface this explicitly.)
#[non_exhaustive] was added so future per-doc concerns (memory
budgets, per-rule deadlines, cancellation tokens) can join without
a further breaking-change cycle for downstream callers using the
recommended construction pattern.
use marque_engine::BatchOptions;
use std::time::Duration;
let mut opts = BatchOptions::default();
opts.per_doc_deadline = Some(Duration::from_secs(5));Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.max_concurrent_docs: Option<usize>Maximum documents in-flight simultaneously.
This field drives two independent limits that both happen to share this value:
ConcurrencyController::max_inflight_rows— the semaphore that rate-limits how many documents can hold permits at the same time.buffer_unorderedcap — how many per-document futures are created and polled ahead of readiness.
In practice they are always set together: the effective maximum is the minimum of whichever blocks first for a given workload. Defaults to 32.
max_inflight_bytes: Option<usize>Maximum total bytes of document content in-flight simultaneously.
Useful for memory-bounded batch runs over large corpora. None means
unlimited (byte accounting is still tracked for observability).
per_doc_deadline: Option<Duration>Per-document wall-clock budget (spec 005 §R2). When Some(d),
each document’s lint/fix call gets its own deadline of
Instant::now() + d stamped after the document acquires
its concurrency permit — ConcurrencyController wait time
does not consume the budget. A slow document does not borrow
from a fast document’s slice.
On expiry: lint returns Ok(LintResult { truncated: true, .. })
(partial diagnostics matter to the caller). Fix returns
Err(BatchError::DocumentDeadlineExceeded { partial_lint })
per Constitution V Principle V — no partial FixResult is
ever produced.
None (default) means no per-document deadline.