pub struct PublishSink<T> { /* private fields */ }Expand description
A bidirectional streaming publish sink for the Salesforce Pub/Sub API.
Created by crate::handler::PubSubHandler::publish_stream. Holds an open
gRPC PublishStream channel and allows callers to send multiple batches of
events, streaming publish acknowledgements back.
§Type parameter
T is the event payload type. It must implement serde::Serialize so that
payloads can be Avro-encoded before transmission.
§Example
let mut sink = handler.publish_stream::<MyEvent>("/event/MyEvent__e").await?;
sink.send("schema-id", vec![MyEvent { id: "e1".into() }]).await?;
sink.send("schema-id", vec![MyEvent { id: "e2".into() }]).await?;
// Drain acknowledgement responses
let mut acks = sink.responses();
while let Some(resp) = acks.next().await {
let r = resp?;
println!("acked {} event(s) on {}", r.results.len(), r.topic_name);
}
sink.close().await?;Implementations§
Source§impl<T: Serialize + Send + 'static> PublishSink<T>
impl<T: Serialize + Send + 'static> PublishSink<T>
Sourcepub async fn send(&mut self, schema_id: &str, events: Vec<T>) -> Result<()>
pub async fn send(&mut self, schema_id: &str, events: Vec<T>) -> Result<()>
Encode a batch of events and send them to the open PublishStream.
The Avro schema is resolved via the schema cache (or fetched from the
GetSchema RPC on a miss). Subsequent calls reuse the cached schema.
§Errors
PubSubError::Avroif an event cannot be Avro-encoded.PubSubError::Transportif theGetSchemaRPC fails on a cache miss.PubSubError::Configif the channel to the gRPC stream is closed.
Sourcepub fn responses(
&mut self,
) -> &mut (impl Stream<Item = Result<PublishResponse>> + '_)
pub fn responses( &mut self, ) -> &mut (impl Stream<Item = Result<PublishResponse>> + '_)
Return a reference to the server acknowledgement response stream.
Each item is a PublishResponse containing per-event results for the
most recently acknowledged batch.
§Errors
Items may be Err(PubSubError::Transport) if the gRPC stream reports
an error.
Sourcepub async fn close(self) -> Result<()>
pub async fn close(self) -> Result<()>
Close the sink.
Drops the sender side of the mpsc channel, which signals to tonic that the client input stream is complete. Then drains any remaining server acknowledgement responses so the gRPC stream shuts down cleanly.
§Errors
Returns the first transport error encountered while draining responses, if any.
Auto Trait Implementations§
impl<T> Freeze for PublishSink<T>
impl<T> !RefUnwindSafe for PublishSink<T>
impl<T> Send for PublishSink<T>where
T: Send,
impl<T> !Sync for PublishSink<T>
impl<T> Unpin for PublishSink<T>where
T: Unpin,
impl<T> UnsafeUnpin for PublishSink<T>
impl<T> !UnwindSafe for PublishSink<T>
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request