PgListener

Struct PgListener 

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

A stream of asynchronous notifications from Postgres.

This listener will auto-reconnect. If the active connection being used ever dies, this listener will detect that event, create a new connection, will re-subscribe to all of the originally specified channels, and will resume operations as normal.

Implementations§

Source§

impl PgListener

Source

pub fn connect(uri: &str) -> Result<Self, Error>

Source

pub fn connect_with(pool: &Pool<Postgres>) -> Result<Self, Error>

Source

pub fn listen(&mut self, channel: &str) -> Result<(), Error>

Starts listening for notifications on a channel. The channel name is quoted here to ensure case sensitivity.

Source

pub fn listen_all<'a>( &mut self, channels: impl IntoIterator<Item = &'a str>, ) -> Result<(), Error>

Starts listening for notifications on all channels.

Source

pub fn unlisten(&mut self, channel: &str) -> Result<(), Error>

Stops listening for notifications on a channel. The channel name is quoted here to ensure case sensitivity.

Source

pub fn unlisten_all(&mut self) -> Result<(), Error>

Stops listening for notifications on all channels.

Source

pub fn recv(&mut self) -> Result<PgNotification, Error>

Receives the next notification available from any of the subscribed channels.

If the connection to PostgreSQL is lost, it is automatically reconnected on the next call to recv(), and should be entirely transparent (as long as it was just an intermittent network failure or long-lived connection reaper).

As notifications are transient, any received while the connection was lost, will not be returned. If you’d prefer the reconnection to be explicit and have a chance to do something before, please see try_recv.

§Example
loop {
    // ask for next notification, re-connecting (transparently) if needed
    let notification = listener.recv()?;

    // handle notification, do something interesting
}
Source

pub fn try_recv(&mut self) -> Result<Option<PgNotification>, Error>

Receives the next notification available from any of the subscribed channels.

If the connection to PostgreSQL is lost, None is returned, and the connection is reconnected on the next call to try_recv().

§Example
loop {
    // start handling notifications, connecting if needed
    while let Some(notification) = listener.try_recv()? {
        // handle notification
    }

    // connection lost, do something interesting
}
Source

pub fn into_stream(self) -> ChanStream<PgNotification>

Consume this listener, returning a Stream of notifications.

The backing connection will be automatically reconnected should it be lost.

This has the same potential drawbacks as recv.

Trait Implementations§

Source§

impl Debug for PgListener

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for PgListener

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<'c> Executor for &'c mut PgListener

Source§

type Database = Postgres

Source§

fn fetch_many<'q, E>( &mut self, query: E, ) -> ChanStream<Either<PgQueryResult, PgRow>>
where E: Execute<'q, Self::Database> + 'q,

Execute multiple queries and return the generated results as a stream from each query, in a stream.
Source§

fn fetch_optional<'q, E>(&mut self, query: E) -> Result<Option<PgRow>, Error>
where E: Execute<'q, Self::Database> + 'q,

Execute the query and returns at most one row.
Source§

fn prepare_with<'q>( &mut self, query: &'q str, parameters: &'q [PgTypeInfo], ) -> Result<PgStatement, Error>

Prepare the SQL query, with parameter type information, to inspect the type information about its parameters and results. Read more
Source§

fn execute<'q, E>( &mut self, query: E, ) -> Result<<Self::Database as Database>::QueryResult, Error>
where E: 'q + Execute<'q, Self::Database>,

Execute the query and return the total number of rows affected.
Source§

fn execute_many<'q, E>( &mut self, query: E, ) -> ChanStream<<Self::Database as Database>::QueryResult>
where E: 'q + Execute<'q, Self::Database>,

Execute multiple queries and return the rows affected from each query, in a stream.
Source§

fn fetch<'q, E>( &mut self, query: E, ) -> ChanStream<<Self::Database as Database>::Row>
where E: 'q + Execute<'q, Self::Database>,

Execute the query and return the generated results as a stream.
Source§

fn fetch_all<'q, E>( &mut self, query: E, ) -> Result<Vec<<Self::Database as Database>::Row>, Error>
where E: 'q + Execute<'q, Self::Database>,

Execute the query and return all the generated results, collected into a Vec.
Source§

fn fetch_one<'q, E>( &mut self, query: E, ) -> Result<<Self::Database as Database>::Row, Error>
where E: 'q + Execute<'q, Self::Database>,

Execute the query and returns exactly one row.
Source§

fn prepare<'q>( &mut self, query: &'q str, ) -> Result<<Self::Database as HasStatement>::Statement, Error>

Prepare the SQL query to inspect the type information of its parameters and results. Read more

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, 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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> ErasedDestructor for T
where T: 'static,