Skip to main content

PusiReassembler

Struct PusiReassembler 

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

Generic PUSI-delimited payload reassembler.

Accumulates payload bytes across consecutive TS packets sharing the same PID, using payload_unit_start_indicator to delimit unit boundaries.

§Example

let mut reassembler = PusiReassembler::new(0x0004);

// Feed pusi=true first packet
if let Some(unit) = reassembler.push(0x0004, true, &first_payload) {
    // unit is complete (would only happen if a second PUSI follows)
}

// Feed continuation
reassembler.push(0x0004, false, &cont_payload);

// Drain the final unit
if let Some(unit) = reassembler.flush() {
    // process complete unit
}

Implementations§

Source§

impl PusiReassembler

Source

pub fn new(pid: u16) -> Self

Create a new reassembler for the given pid.

Source

pub fn push(&mut self, pid: u16, pusi: bool, payload: &[u8]) -> Option<Vec<u8>>

Feed one TS packet’s (pid, payload_unit_start_indicator, payload bytes).

Packets whose pid != self.pid are silently ignored (returns None).

PUSI semantics: When pusi == true, the packet marks the start of a new unit. If a unit was already in progress (i.e. a prior PUSI-start was never closed by a following PUSI), the in-progress unit is complete — it is returned as Some(unit_bytes), and a fresh unit begins with this packet’s payload.

When pusi == false, the payload is appended to the in-progress unit.

Returns Some(Vec<u8>) when a completed unit is emitted; None otherwise.

Source

pub fn flush(&mut self) -> Option<Vec<u8>>

Return any in-progress (final) unit; the caller drains this at end of the PID’s data (the last real box has no following PUSI to close it).

Returns None when no data has been accumulated.

Trait Implementations§

Source§

impl Clone for PusiReassembler

Source§

fn clone(&self) -> PusiReassembler

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 PusiReassembler

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<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> 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.