pub trait StreamingRowDecoder {
// Required methods
fn feed(&mut self, chunk: &[u8]) -> Result<(), Error>;
fn drain(&mut self) -> Result<Vec<Vec<(String, LoraValue)>>, Error>;
fn finish(&mut self) -> Result<Vec<Vec<(String, LoraValue)>>, Error>;
fn header(&self) -> Option<&[String]>;
fn bytes_fed(&self) -> u64;
fn rows_emitted(&self) -> u64;
// Provided methods
fn set_permissive(&mut self, _on: bool) { ... }
fn take_errors(&mut self) -> Vec<RowParseError> { ... }
}Expand description
Push-based streaming row decoder. The caller feeds bytes one
chunk at a time (e.g. from File.stream().getReader() in the
browser); the decoder accumulates partial records internally and
emits completed rows via Self::drain. Designed for the WASM
streaming-import path where the engine and the source live on
different sides of the worker boundary.
Memory bound: the decoder retains at most one in-progress record plus the bytes between the most-recently-completed record and the end of the most-recently-fed chunk.
Required Methods§
Sourcefn feed(&mut self, chunk: &[u8]) -> Result<(), Error>
fn feed(&mut self, chunk: &[u8]) -> Result<(), Error>
Append a chunk of bytes to the internal buffer and parse any records that became complete. Idempotent: feeding zero bytes is a no-op.
Sourcefn drain(&mut self) -> Result<Vec<Vec<(String, LoraValue)>>, Error>
fn drain(&mut self) -> Result<Vec<Vec<(String, LoraValue)>>, Error>
Pull all records completed since the previous drain /
finish call. Returns an empty Vec when no full record
has been parsed yet.
Sourcefn finish(&mut self) -> Result<Vec<Vec<(String, LoraValue)>>, Error>
fn finish(&mut self) -> Result<Vec<Vec<(String, LoraValue)>>, Error>
Signal that no more bytes will be fed. Returns any records emitted by handling the residual buffer — for JSONL/CSV this covers the case where the file ends without a trailing newline.
Sourcefn header(&self) -> Option<&[String]>
fn header(&self) -> Option<&[String]>
Column names declared in the file header. Populated after
the first record arrives for CSV; always None for JSONL.
Sourcefn bytes_fed(&self) -> u64
fn bytes_fed(&self) -> u64
Total bytes accepted via feed since construction. Used
for progress reporting.
Sourcefn rows_emitted(&self) -> u64
fn rows_emitted(&self) -> u64
Total records emitted via drain + finish so far.
Provided Methods§
Sourcefn set_permissive(&mut self, _on: bool)
fn set_permissive(&mut self, _on: bool)
Switch the decoder into permissive mode. In permissive mode,
per-record parse failures are accumulated for retrieval via
Self::take_errors instead of bubbling out of feed /
finish. Fatal errors (encoding issues that desync the byte
stream itself) still bubble. Must be called before the first
feed; later calls take effect at the next record boundary.
Default impl is a no-op for decoders that don’t support it.
Sourcefn take_errors(&mut self) -> Vec<RowParseError>
fn take_errors(&mut self) -> Vec<RowParseError>
Drain the parse errors accumulated since the previous call. Empty when permissive mode is off or no failures occurred.