pub struct JetStreamPublish { /* private fields */ }Expand description
The JetStream publish policy: pure declaration, constructible anywhere.
It carries what belongs to the publisher rather than to a message, which on JetStream is one
thing: the stream the subject must be served by. A publisher that states
expect_stream("ORDERS") fails loudly if its subject is routed elsewhere, instead of writing
somewhere unintended.
The sequence and message-id expectations are not here. They belong to one message - an expected
last sequence fixed for the life of a publisher can hold for at most one publish - so they are
JetStreamOptions fields, set by the JetStreamPublishSteps steps at the call site.
§Examples
use ruststream_nats::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(Deserialize)]
struct Payment {
order: u64,
}
#[derive(Serialize, Outgoing)]
#[outgoing(name = "orders.paid")]
struct Paid {
order: u64,
}
#[subscriber("payments.settled", reply)]
async fn record(payment: &Payment) -> Paid {
Paid { order: payment.order }
}
#[ruststream::app]
fn app() -> impl App {
RustStream::new(AppInfo::new("payments", "0.1.0")).with_broker(
NatsBroker::new("nats://localhost:4222"),
|b| {
// The reply is stored, and a subject the ORDERS stream does not serve is an error.
b.include(record)
.out_reply(JetStreamPublish::default().expect_stream("ORDERS"));
},
)
}Implementations§
Source§impl JetStreamPublish
impl JetStreamPublish
Sourcepub fn expect_stream(self, stream: impl Into<String>) -> Self
pub fn expect_stream(self, stream: impl Into<String>) -> Self
Requires the subject to be served by the named stream. The server rejects the publish otherwise, so a misrouted subject surfaces as an error rather than a silent write.
Trait Implementations§
Source§impl Clone for JetStreamPublish
impl Clone for JetStreamPublish
Source§impl Debug for JetStreamPublish
impl Debug for JetStreamPublish
Source§impl Default for JetStreamPublish
impl Default for JetStreamPublish
impl Eq for JetStreamPublish
Source§impl NatsPublishPolicy for JetStreamPublish
impl NatsPublishPolicy for JetStreamPublish
Source§fn bind(self, connected: &ConnectedNatsBroker) -> Self::Live
fn bind(self, connected: &ConnectedNatsBroker) -> Self::Live
Source§impl PartialEq for JetStreamPublish
impl PartialEq for JetStreamPublish
Source§impl PublishPolicy<ConnectedNatsBroker> for JetStreamPublish
impl PublishPolicy<ConnectedNatsBroker> for JetStreamPublish
Source§fn channel_bindings(&self, channel: &str) -> Bindings
fn channel_bindings(&self, channel: &str) -> Bindings
The stream this publisher requires, and the subject it requires that stream to serve.
The nats binding has no field for either, so both travel under this crate’s extension
key. channel is the destination the mount site resolved, and naming it next to the
stream is what makes the requirement readable: a reader sees which subject the stream has
to carry, including where a naming transform decides the address per delivery and the
channel reports none. A publisher that requires no stream has no requirement to state and
contributes nothing.
There is no reply address here: on a JetStream delivery the protocol’s reply field is the
acknowledgement inbox, not a request’s, so a request is answered over Core NATS and
NatsPublish is what reports it.
Source§type Live = JetStreamPublisher
type Live = JetStreamPublisher
Publisher for a leaf policy, or the live
wiring form for a combinator stack (a typed publisher over a policy pairs into the same
typed publisher over the live leaf).Source§fn pair(
self,
connected: &ConnectedNatsBroker,
) -> impl Future<Output = Result<Self::Live, PairError>>
fn pair( self, connected: &ConnectedNatsBroker, ) -> impl Future<Output = Result<Self::Live, PairError>>
Source§fn operation_bindings(&self, channel: &str) -> Bindings
fn operation_bindings(&self, channel: &str) -> Bindings
send operation in the document. Read moreimpl StructuralPartialEq for JetStreamPublish
Auto Trait Implementations§
impl Freeze for JetStreamPublish
impl RefUnwindSafe for JetStreamPublish
impl Send for JetStreamPublish
impl Sync for JetStreamPublish
impl Unpin for JetStreamPublish
impl UnsafeUnpin for JetStreamPublish
impl UnwindSafe for JetStreamPublish
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.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