pub struct FileSubscriber { /* private fields */ }Expand description
A subscription to one stream key in the file; yields FileMessages.
Dropping the subscriber stops the driver task. The stream also ends on its own when the file
does: a replay reaches the end of what was retained, and a live subscription reaches the
end-of-stream mark a writer left with
end_with_eos. A replay that ended can still be moved by
its seeker until the subscriber is dropped, and its stream then delivers again.
A handler taking &[T] consumes batches of this subscription, and batch(n) at the mount
site says how large one may be. The client reads one entry at a time, so the batch is
assembled here: it holds at most the size the mount site named, and fewer when that is all the
file had. A partial batch goes out 10 ms after its first delivery. The
Batches
page shows it in a service.
§Examples
use ruststream_sea_file::file::prelude::*;
use serde::Deserialize;
#[derive(Debug, Deserialize)]
struct Reading {
millivolts: u32,
}
#[subscriber(FileStream::new("readings"))]
async fn aggregate(batch: &[Reading]) -> Vec<HandlerOutcome> {
let total: u32 = batch.iter().map(|reading| reading.millivolts).sum();
tracing::info!(readings = batch.len(), total, "aggregated");
batch.iter().map(|_| HandlerOutcome::ack()).collect()
}
#[ruststream::app]
fn app() -> impl App {
RustStream::new(AppInfo::new("readings", "0.1.0"))
.with_broker(FileBroker::new("/tmp/readings.ss"), |b| {
b.include(aggregate.batch(nonzero!(4)))
.max_attempts(nonzero!(3u32))
.dead_letter("readings.dead");
})
}Implementations§
Source§impl FileSubscriber
impl FileSubscriber
Sourcepub fn stream_key(&self) -> &str
pub fn stream_key(&self) -> &str
The stream key this subscription consumes.
Trait Implementations§
Source§impl BatchSubscriber for FileSubscriber
impl BatchSubscriber for FileSubscriber
Source§type Batch = Vec<FileMessage>
type Batch = Vec<FileMessage>
batches. Implementations choose between Vec, custom
iterators, or anything else that yields the underlying Subscriber::Message.Source§fn batches(
&mut self,
size: NonZeroUsize,
) -> impl Stream<Item = Result<Self::Batch, SeaFileError>> + Send + '_
fn batches( &mut self, size: NonZeroUsize, ) -> impl Stream<Item = Result<Self::Batch, SeaFileError>> + Send + '_
size messages. Read moreSource§impl Debug for FileSubscriber
impl Debug for FileSubscriber
Source§impl Seekable for FileSubscriber
impl Seekable for FileSubscriber
Source§type Seeker = FileSeeker
type Seeker = FileSeeker
Source§fn seeker(&self) -> FileSeeker
fn seeker(&self) -> FileSeeker
Source§impl Subscriber for FileSubscriber
impl Subscriber for FileSubscriber
Source§type Message = FileMessage
type Message = FileMessage
Source§type Error = SeaFileError
type Error = SeaFileError
Source§fn stream(
&mut self,
) -> impl Stream<Item = Result<FileMessage, SeaFileError>> + Send + '_
fn stream( &mut self, ) -> impl Stream<Item = Result<FileMessage, SeaFileError>> + Send + '_
Auto Trait Implementations§
impl !RefUnwindSafe for FileSubscriber
impl !UnwindSafe for FileSubscriber
impl Freeze for FileSubscriber
impl Send for FileSubscriber
impl Sync for FileSubscriber
impl Unpin for FileSubscriber
impl UnsafeUnpin for FileSubscriber
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
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> ⓘ
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> ⓘ
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 more