Skip to main content

SectionSetCollector

Struct SectionSetCollector 

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

Generic collector for long-form section_number/last_section_number sequences.

The constructor SectionSetCollector::new uses the default cap DEFAULT_MAX_PARTIAL_KEYS; the cap is configurable via with_max_partial_keys.

§Capacity: LRU eviction, not a permanent wall (issue #1002)

The cap bounds partial’s total entry count, including completed sets — a completed set is retained (so a repeat/duplicate section for it is recognized and does not re-emit) but a real network can complete far more distinct (table_id, extension_id, current_next_indicator) keys over time than the cap allows to stay in-progress simultaneously (EIT other alone can span 150+ services). Capping only entry creation and never evicting anything would eventually wall off every new key behind a permanently-full map of old, no-longer-interesting completed entries, with the caller seeing only silent Ok(None) and no way to tell “still collecting” apart from “capacity exhausted, this key will never complete”. Instead, when a new key arrives at capacity, the least-recently-touched entry (by push, not by construction) is evicted to admit it — old, no-longer-fed keys naturally age out in favor of active ones. evicted_for_capacity counts evictions, so a caller can detect this churn instead of it being invisible.

Implementations§

Source§

impl SectionSetCollector

Source

pub fn new() -> Self

Create an empty collector with the default cap (DEFAULT_MAX_PARTIAL_KEYS).

Source

pub fn with_max_partial_keys(self, max_partial_keys: usize) -> Self

Replace the partial-key cap (default DEFAULT_MAX_PARTIAL_KEYS). When a new key arrives at capacity, the least-recently-touched existing key is evicted to admit it (see the type-level docs).

Source

pub fn evicted_for_capacity(&self) -> u64

Number of keys evicted so far to admit a new key at capacity. A nonzero, growing count means the cap is genuinely too small for the stream’s distinct-key churn — raise it via with_max_partial_keys.

Source

pub fn push_section( &mut self, bytes: impl AsRef<[u8]>, ) -> CollectResult<Option<CompleteSectionSet>>

Push one complete section. Returns Some only when the logical section set has become complete for the first time at this version.

§Errors

Returns a CollectError if the bytes are not a valid long-form section or if the section set becomes internally inconsistent. Treat the error as applying to this section only unless your application wants strict stream-fail behavior.

Source

pub fn push_section_with_pid( &mut self, pid: Option<Pid>, bytes: impl AsRef<[u8]>, ) -> CollectResult<Option<CompleteSectionSet>>

Push one complete section with PID context.

The PID is folded into the section-set key so tables with identical table id/extension on different PIDs do not collide.

Source

pub fn clear(&mut self)

Drop all retained partial section sets.

Source

pub fn len(&self) -> usize

Number of retained partial section-set states.

Source

pub fn is_empty(&self) -> bool

Whether the collector currently has no retained state.

Trait Implementations§

Source§

impl Debug for SectionSetCollector

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for SectionSetCollector

Source§

fn default() -> Self

Returns the “default value” for a type. 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> ErasedDestructor for T
where T: 'static,

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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.