Skip to main content

Source

Struct Source 

Source
pub struct Source<T: Record> { /* private fields */ }
Expand description

A streaming data source.

Sources are the entry point for data into a streaming pipeline. They provide a type-safe interface for pushing records and control signals (watermarks).

§Thread Safety

Sources can be cloned to create multiple producers. The first clone triggers an automatic upgrade from SPSC to MPSC mode.

§Example

let (source, sink) = streaming::create::<MyEvent>(config);

// Single producer (SPSC mode)
source.push(event1)?;

// Clone for multiple producers (MPSC mode)
let source2 = source.clone();
std::thread::spawn(move || {
    source2.push(event2)?;
});

Implementations§

Source§

impl<T: Record> Source<T>

Source

pub fn push(&self, record: T) -> Result<(), StreamingError>

Pushes a record to the source, blocking if necessary.

§Errors

Returns StreamingError::ChannelClosed if the sink has been dropped. Returns StreamingError::ChannelFull if backpressure strategy is Reject.

Source

pub fn try_push(&self, record: T) -> Result<(), TryPushError<T>>

Tries to push a record without blocking.

§Errors

Returns TryPushError containing the record if the push failed.

Source

pub fn push_batch(&self, records: &[T]) -> usize
where T: Clone,

Pushes multiple records, returning the number successfully pushed.

Stops at the first failure. Requires Clone because records are cloned before being sent.

§Performance Warning

This method clones each record. For zero-clone batch insertion, use push_batch_drain which takes ownership via an iterator.

Source

pub fn push_batch_drain<I>(&self, records: I) -> usize
where I: IntoIterator<Item = T>,

Pushes records from an iterator, consuming them (zero-clone).

Returns the number of records successfully pushed. Stops at the first failure (channel full or closed).

§Example
let events = vec![event1, event2, event3];
let pushed = source.push_batch_drain(events.into_iter());
Source

pub fn push_arrow(&self, batch: RecordBatch) -> Result<(), StreamingError>

Pushes an Arrow RecordBatch directly.

This is more efficient than pushing individual records when you already have data in Arrow format.

§Errors

Returns StreamingError::SchemaMismatch if the batch schema doesn’t match. Returns StreamingError::ChannelClosed if the sink has been dropped.

Source

pub fn watermark(&self, timestamp: i64)

Emits a watermark timestamp.

Watermarks signal that no events with timestamps less than or equal to this value will arrive in the future. This enables window triggers and garbage collection.

Watermarks are monotonically increasing - if a lower timestamp is passed, it will be ignored.

Source

pub fn current_watermark(&self) -> i64

Returns the current watermark value.

Source

pub fn schema(&self) -> SchemaRef

Returns the schema for this source.

Source

pub fn name(&self) -> Option<&str>

Returns the source name, if configured.

Source

pub fn is_mpsc(&self) -> bool

Returns true if the source is in MPSC mode.

Source

pub fn mode(&self) -> ChannelMode

Returns the channel mode.

Source

pub fn is_closed(&self) -> bool

Returns true if the sink has been dropped.

Source

pub fn pending(&self) -> usize

Returns the number of pending items in the buffer.

Source

pub fn capacity(&self) -> usize

Returns the buffer capacity.

Source

pub fn sequence(&self) -> u64

Returns the current sequence number (total successful pushes).

Source

pub fn sequence_counter(&self) -> Arc<AtomicU64>

Returns the shared sequence counter for checkpoint registration.

Source

pub fn watermark_atomic(&self) -> Arc<AtomicI64>

Returns the shared watermark atomic for checkpoint registration.

Trait Implementations§

Source§

impl<T: Record> Clone for Source<T>

Source§

fn clone(&self) -> Self

Clones the source, triggering automatic SPSC → MPSC upgrade.

§Performance Warning

This method allocates a new Arc<SourceInner>. The first clone also triggers an upgrade from SPSC to MPSC mode, which adds synchronization overhead to all subsequent push operations.

For maximum performance with a single producer, avoid cloning the source. Use clones only when you genuinely need multiple producer threads.

1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<T: Record + Debug> Debug for Source<T>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> Freeze for Source<T>

§

impl<T> !RefUnwindSafe for Source<T>

§

impl<T> Send for Source<T>

§

impl<T> Sync for Source<T>

§

impl<T> Unpin for Source<T>

§

impl<T> !UnwindSafe for Source<T>

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> ArchivePointee for T

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> LayoutRaw for T

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
Source§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

Source§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
Source§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The metadata type for pointers and references to this type.
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<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more