1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
//! 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
}
}