Skip to main content

LobTextDecoder

Struct LobTextDecoder 

Source
pub struct LobTextDecoder { /* private fields */ }
Expand description

Stateful, incremental decoder for streamed CLOB/NCLOB text.

decode_lob_text decodes a whole LOB buffer in one shot. A lazy LOB reader instead pulls the LOB in chunks, and a chunk boundary can fall in the middle of a multi-byte codepoint — an incomplete UTF-8 sequence, or (for the UTF-16 / AL16UTF16 form the server uses for multi-byte CLOBs) an odd trailing byte or a high surrogate whose low half is in the next chunk. Feeding those chunks to this decoder yields exactly the same String as decoding the whole buffer at once: the incomplete tail is carried across push calls and stitched to the next chunk, and finish reports a truncated stream.

This is a new untrusted-decode surface (LOB bytes come off the wire), so its boundary handling is validated offline against decode_lob_text at every split point and is a fuzz target.

Implementations§

Source§

impl LobTextDecoder

Source

pub fn new(use_utf16: bool, little_endian: bool) -> Self

Build a decoder for the given character-set form and encoding direction.

Source

pub fn from_lob(csfrm: u8, locator: Option<&[u8]>) -> Self

Build a decoder for a LOB from its csfrm and locator flags, matching the same UTF-16/endianness decision decode_lob_text makes.

Source

pub fn push(&mut self, bytes: &[u8]) -> Result<String>

Decode as much of bytes (prefixed by any carried tail) as forms complete codepoints, returning the newly decoded text. Any incomplete trailing sequence is retained for the next call.

Source

pub fn finish(self) -> Result<()>

Assert the stream ended on a codepoint boundary. Errors if a partial unit or a dangling high surrogate remains (a truncated LOB stream).

Trait Implementations§

Source§

impl Clone for LobTextDecoder

Source§

fn clone(&self) -> LobTextDecoder

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LobTextDecoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V