pub struct RateLimitedPipeline { /* private fields */ }Expand description
A rate-limited wrapper around any PhaseSink.
Uses a token bucket [RateLimiter] to control emission rate. Each call to
emit() acquires a token before forwarding to the inner sink, blocking if
the rate is exceeded.
Also adds a monotonic sequence number and optional progress events to the output stream.
Thread safety note: The rate limiter may sleep while holding an internal
mutex. This is correct for single-threaded generation (the current model)
but would serialize all callers if emit() is called from multiple threads
concurrently. If multi-threaded emission is needed in the future, the
lock-then-sleep pattern must be restructured.
Implementations§
Source§impl RateLimitedPipeline
impl RateLimitedPipeline
Sourcepub fn new(
inner: Box<dyn PhaseSink>,
events_per_second: f64,
burst_size: u32,
progress_interval: u64,
) -> Self
pub fn new( inner: Box<dyn PhaseSink>, events_per_second: f64, burst_size: u32, progress_interval: u64, ) -> Self
Wrap a PhaseSink with rate limiting.
events_per_second: target rate (0 = unlimited)burst_size: token bucket burst capacityprogress_interval: emit a_progressevent every N items (0 = disabled)
Trait Implementations§
Source§impl PhaseSink for RateLimitedPipeline
impl PhaseSink for RateLimitedPipeline
Source§fn emit(
&self,
phase: &str,
item_type: &str,
item: &Value,
) -> Result<(), StreamError>
fn emit( &self, phase: &str, item_type: &str, item: &Value, ) -> Result<(), StreamError>
Emit a single generated item.
Source§fn phase_complete(&self, phase: &str) -> Result<(), StreamError>
fn phase_complete(&self, phase: &str) -> Result<(), StreamError>
Signal that a generation phase has completed.
Source§fn stats(&self) -> StreamStats
fn stats(&self) -> StreamStats
Return current streaming statistics.
Auto Trait Implementations§
impl !Freeze for RateLimitedPipeline
impl !RefUnwindSafe for RateLimitedPipeline
impl Send for RateLimitedPipeline
impl Sync for RateLimitedPipeline
impl Unpin for RateLimitedPipeline
impl UnsafeUnpin for RateLimitedPipeline
impl !UnwindSafe for RateLimitedPipeline
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.