PgListener

Struct PgListener 

Source
pub struct PgListener { /* private fields */ }
Expand description

PostgreSQL LISTEN handler for receiving NOTIFY events

Creates a long-lived connection that subscribes to one or more channels and streams incoming notifications.

Implementations§

Source§

impl PgListener

Source

pub async fn from_url(url: &str, channels: Vec<String>) -> Result<Self, PgError>

Create a new listener from a connection URL

§Arguments
  • url - PostgreSQL connection string
  • channels - List of channel names to subscribe to
§Errors

Returns error if:

  • Cannot connect to database
  • Cannot subscribe to channels
§Example
let channels = vec!["warpdrive:cache:invalidate".to_string()];
let listener = PgListener::from_url(
    "postgresql://localhost/mydb",
    channels
).await?;
Source

pub async fn new( _pool: &PgPool, _channels: Vec<String>, ) -> Result<Self, PgError>

Create a new listener for the specified channels using a pool

Note: This creates a dedicated connection separate from the pool. The pool is used only to verify connectivity and extract the connection URL.

§Arguments
  • pool - Connection pool (used to get database URL)
  • channels - List of channel names to subscribe to
§Errors

Returns error if:

  • Cannot obtain connection from pool
  • Cannot subscribe to channels
§Example
let channels = vec![
    "warpdrive:cache:invalidate".to_string(),
    "warpdrive:circuit:state".to_string(),
];
// Use from_url instead, as pool doesn't expose the connection string
let listener = PgListener::from_url(url, channels).await?;
Source

pub fn stream( &mut self, ) -> Pin<Box<dyn Stream<Item = PgNotification> + Send + '_>>

Get a stream of notifications

Returns a stream that yields PgNotification items as they arrive.

§Example
let mut stream = listener.stream();
while let Some(notification) = stream.next().await {
    println!("Channel: {}, Payload: {}", notification.channel, notification.payload);
}
Source

pub async fn subscribe(&self, channel: &str) -> Result<(), PgError>

Subscribe to additional channels

§Errors

Returns error if LISTEN command fails

Source

pub async fn unsubscribe(&self, channel: &str) -> Result<(), PgError>

Unsubscribe from channels

§Errors

Returns error if UNLISTEN command fails

Auto Trait Implementations§

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

Source§

type Output = T

Should always be Self
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
Source§

impl<T> ErasedDestructor for T
where T: 'static,