blob: cda898d4affa4c1df3263aad5205fbabc0846ca3 [file] [log] [blame] [edit]
//! Event subscriptions.
use std::fmt;
use std::time::Duration;
/// A trait which is provided with information about events in a connection pool.
pub trait HandleEvent: fmt::Debug + Sync + Send {
/// Called when a new connection is acquired.
///
/// The default implementation does nothing.
#[allow(unused_variables)]
fn handle_acquire(&self, event: AcquireEvent) {}
/// Called when a connection is released.
///
/// The default implementation does nothing.
#[allow(unused_variables)]
fn handle_release(&self, event: ReleaseEvent) {}
/// Called when a connection is checked out from the pool.
///
/// The default implementation does nothing.
#[allow(unused_variables)]
fn handle_checkout(&self, event: CheckoutEvent) {}
/// Called when a checkout attempt times out.
///
/// The default implementation does nothing.
#[allow(unused_variables)]
fn handle_timeout(&self, event: TimeoutEvent) {}
/// Called when a connection is checked back into the pool.
#[allow(unused_variables)]
fn handle_checkin(&self, event: CheckinEvent) {}
}
/// A `HandleEvent` implementation which does nothing.
#[derive(Copy, Clone, Debug)]
pub struct NopEventHandler;
impl HandleEvent for NopEventHandler {}
/// Information about an acquire event.
#[derive(Debug)]
pub struct AcquireEvent {
pub(crate) id: u64,
}
impl AcquireEvent {
/// Returns the ID of the connection.
#[inline]
pub fn connection_id(&self) -> u64 {
self.id
}
}
/// Information about a release event.
#[derive(Debug)]
pub struct ReleaseEvent {
pub(crate) id: u64,
pub(crate) age: Duration,
}
impl ReleaseEvent {
/// Returns the ID of the connection.
#[inline]
pub fn connection_id(&self) -> u64 {
self.id
}
/// Returns the age of the connection.
#[inline]
pub fn age(&self) -> Duration {
self.age
}
}
/// Information about a checkout event.
#[derive(Debug)]
pub struct CheckoutEvent {
pub(crate) id: u64,
pub(crate) duration: Duration,
}
impl CheckoutEvent {
/// Returns the ID of the connection.
#[inline]
pub fn connection_id(&self) -> u64 {
self.id
}
/// Returns the time taken to check out the connection.
#[inline]
pub fn duration(&self) -> Duration {
self.duration
}
}
/// Information about a timeout event.
#[derive(Debug)]
pub struct TimeoutEvent {
pub(crate) timeout: Duration,
}
impl TimeoutEvent {
/// Returns the timeout of the failed checkout attempt.
#[inline]
pub fn timeout(&self) -> Duration {
self.timeout
}
}
/// Information about a checkin event.
#[derive(Debug)]
pub struct CheckinEvent {
pub(crate) id: u64,
pub(crate) duration: Duration,
}
impl CheckinEvent {
/// Returns the ID of the connection.
#[inline]
pub fn connection_id(&self) -> u64 {
self.id
}
/// Returns the amount of time the connection was checked out.
#[inline]
pub fn duration(&self) -> Duration {
self.duration
}
}