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
use rsfbclient::{Connection, FbError, FirebirdClientFactory, Transaction};
use rsfbclient_core::FirebirdClientDbOps;
pub struct FirebirdConnectionManager<F>
where
F: FirebirdClientFactory,
{
client_factory: F,
}
impl<F> FirebirdConnectionManager<F>
where
F: FirebirdClientFactory,
{
pub fn new(client_factory: F) -> Self {
Self { client_factory }
}
}
impl<F: FirebirdClientFactory + 'static> r2d2::ManageConnection for FirebirdConnectionManager<F>
where
F: Send + Sync,
<F::C as FirebirdClientDbOps>::AttachmentConfig: Send + Sync + Clone,
{
type Connection = Connection<F::C>;
type Error = FbError;
fn connect(&self) -> Result<Self::Connection, Self::Error> {
let cli = self.client_factory.new_instance()?;
Connection::open(cli, self.client_factory.get_conn_conf())
}
fn is_valid(&self, conn: &mut Self::Connection) -> Result<(), Self::Error> {
Transaction::new(conn)?;
Ok(())
}
fn has_broken(&self, _conn: &mut Self::Connection) -> bool {
false
}
}