Skip to main content

PubSubHandler

Struct PubSubHandler 

Source
pub struct PubSubHandler<A: Authenticator> {
    pub schema_cache: SchemaCache,
    /* private fields */
}
Expand description

Entry point for all Salesforce Pub/Sub operations.

Obtained by calling PubSubHandler::connect with a Session and PubSubConfig. The handler is cheaply cloneable — clones share the same gRPC channel and schema cache.

Fields§

§schema_cache: SchemaCache

Shared schema cache, populated during subscribe/publish operations in later tasks.

Implementations§

Source§

impl<A: Authenticator> PubSubHandler<A>

Source

pub async fn connect( session: Arc<Session<A>>, config: PubSubConfig, ) -> Result<Self>

Connect to the Pub/Sub gRPC endpoint and return a handler.

Validates configuration and establishes the gRPC channel. This is async because channel creation involves a DNS lookup and TLS handshake.

§Errors

Returns PubSubError::Config if batch_size is out of range (1–100). Returns PubSubError::Connect if the gRPC channel cannot be established.

Source

pub async fn get_topic(&self, topic_name: &str) -> Result<TopicInfo>

Fetch metadata about a Pub/Sub topic.

§Errors

Returns PubSubError::Transport if the gRPC call fails.

Source

pub async fn get_schema(&self, schema_id: &str) -> Result<SchemaInfo>

Fetch an Avro schema by its ID.

Results are not automatically cached here — call SchemaCache::parse_and_insert with the returned schema_json to cache it.

§Errors

Returns PubSubError::Transport if the gRPC call fails (including schema not found).

Source§

impl<A: Authenticator + Send + Sync + 'static> PubSubHandler<A>

Source

pub async fn publish<T: Serialize + Send>( &self, topic: &str, events: Vec<T>, ) -> Result<PublishResponse>

Publish events to a topic via the unary Publish RPC.

Automatically resolves the Avro schema for topic by calling GetTopic to obtain the schema ID, then fetching the schema via GetSchema if it is not already cached.

§Errors

Returns PubSubError::Transport if the GetTopic or GetSchema RPC fails. Returns PubSubError::Avro if encoding fails.

Source

pub async fn subscribe( &self, topic: &str, replay: ReplayPreset, ) -> Result<Pin<Box<dyn Stream<Item = Result<PubSubEvent<Value>>> + Send>>>

Subscribe to a topic, yielding decoded events as serde_json::Value.

The returned stream emits PubSubEvent<Value> items. Use ReplayPreset to control where playback starts.

§Errors

Returns PubSubError::Config if the tenant ID cannot be fetched from userinfo.

Source

pub async fn subscribe_typed<T>( &self, topic: &str, replay: ReplayPreset, ) -> Result<Pin<Box<dyn Stream<Item = Result<PubSubEvent<T>>> + Send>>>
where T: DeserializeOwned + Send + 'static,

Subscribe to a topic, yielding typed events deserialized as T.

§Errors

Returns PubSubError::Config if the tenant ID cannot be fetched from userinfo.

Source

pub async fn publish_stream<T: Serialize + Send + 'static>( &self, topic: &str, ) -> Result<PublishSink<T>>

Open a bidirectional streaming PublishStream RPC and return a PublishSink.

The returned sink allows callers to send multiple batches of events to topic without the per-call overhead of the unary Self::publish RPC. The server streams back PublishResponse acknowledgements, which are accessible via PublishSink::responses.

§Errors

Trait Implementations§

Source§

impl<A: Clone + Authenticator> Clone for PubSubHandler<A>

Source§

fn clone(&self) -> PubSubHandler<A>

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<A> Freeze for PubSubHandler<A>

§

impl<A> !RefUnwindSafe for PubSubHandler<A>

§

impl<A> Send for PubSubHandler<A>

§

impl<A> Sync for PubSubHandler<A>

§

impl<A> Unpin for PubSubHandler<A>

§

impl<A> UnsafeUnpin for PubSubHandler<A>

§

impl<A> !UnwindSafe for PubSubHandler<A>

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> 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> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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