pub struct RedisListPublish { /* private fields */ }Expand description
The declaration half of the list publisher: envelope codec and key TTL, no connection.
Constructible anywhere, it pairs into a RedisListPublisher against a
ConnectedRedisBroker.
§Examples
use std::time::Duration;
use ruststream::codec::JsonCodec;
use ruststream_fred::RedisListPublish;
use ruststream_fred::list::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(Deserialize)]
struct Job {
id: u64,
}
#[derive(Serialize, Outgoing)]
#[outgoing(name = "jobs.done")]
struct Done {
id: u64,
}
#[subscriber(RedisList::new("jobs").reliable(), reply)]
async fn run_job(job: &Job) -> Done {
Done { id: job.id }
}
#[ruststream::app]
fn app() -> impl App {
RustStream::new(AppInfo::new("jobs", "0.1.0")).with_broker(
RedisBroker::standalone("redis://localhost:6379"),
|b| {
// A readable JSON frame, and a `jobs.done` nobody drains expires five minutes
// after the last push.
b.include(run_job).out_reply(
RedisListPublish::new()
.codec(JsonCodec)
.ttl(Duration::from_secs(300)),
);
},
)
}Implementations§
Source§impl RedisListPublish
impl RedisListPublish
Sourcepub fn new() -> Self
pub fn new() -> Self
A policy with the default binary framing and no key TTL. Equivalent to Self::default.
Sourcepub fn codec(self, codec: impl Codec + 'static) -> Self
pub fn codec(self, codec: impl Codec + 'static) -> Self
Serializes the header/payload envelope with codec (must match the subscriber), which makes
the wire value readable while the data is text. Without it the default binary framing is
used. Either way a payload that is not text is published byte for byte.
Sourcepub const fn ttl(self, ttl: Duration) -> Self
pub const fn ttl(self, ttl: Duration) -> Self
Sets a time-to-live on the list key, refreshed (PEXPIRE) on every publish, so an idle
queue auto-expires. Off by default: without it the list lives until drained or deleted.
This is a per-key TTL on the whole list, not per-entry: Redis lists have no per-element
expiry, only the key can expire. Each publish pushes the entry and re-arms the key’s TTL in
one pipeline, so an actively used queue never expires and only an idle one does. A sub-
millisecond ttl is clamped up to 1ms, since PEXPIRE 0 would delete the key outright.
Trait Implementations§
Source§impl Clone for RedisListPublish
impl Clone for RedisListPublish
Source§impl Debug for RedisListPublish
impl Debug for RedisListPublish
Source§impl Default for RedisListPublish
impl Default for RedisListPublish
Source§impl PublishPolicy<ConnectedRedisBroker> for RedisListPublish
impl PublishPolicy<ConnectedRedisBroker> for RedisListPublish
Source§fn channel_bindings(&self, channel: &str) -> Bindings
fn channel_bindings(&self, channel: &str) -> Bindings
The list key the policy pushes onto, the expiry it re-arms there on every push, and how headers are framed beside the payload.
Source§type Live = RedisListPublisher
type Live = RedisListPublisher
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: &ConnectedRedisBroker,
) -> impl Future<Output = Result<Self::Live, PairError>>
fn pair( self, connected: &ConnectedRedisBroker, ) -> 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 moreAuto Trait Implementations§
impl !RefUnwindSafe for RedisListPublish
impl !UnwindSafe for RedisListPublish
impl Freeze for RedisListPublish
impl Send for RedisListPublish
impl Sync for RedisListPublish
impl Unpin for RedisListPublish
impl UnsafeUnpin for RedisListPublish
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<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