Skip to content

Commit 6deef22

Browse files
authored
Merge pull request sfackler#525 from colingm/generic-connection
Adding in generic connection trait back to the lib
2 parents f8d14d0 + 7ff4b3a commit 6deef22

File tree

4 files changed

+70
-2
lines changed

4 files changed

+70
-2
lines changed

postgres/src/client.rs

+23-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::{
2-
CancelToken, Config, CopyInWriter, CopyOutReader, RowIter, Statement, ToStatement, Transaction,
2+
CancelToken, Config, CopyInWriter, CopyOutReader, GenericConnection, RowIter, Statement,
3+
ToStatement, Transaction,
34
};
45
use std::ops::{Deref, DerefMut};
56
use tokio::runtime::Runtime;
@@ -492,3 +493,24 @@ impl Client {
492493
self.client.is_closed()
493494
}
494495
}
496+
497+
impl GenericConnection for Client {
498+
fn execute<T>(&mut self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<u64, Error>
499+
where
500+
T: ?Sized + ToStatement,
501+
{
502+
self.execute(query, params)
503+
}
504+
fn query<T>(&mut self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<Vec<Row>, Error>
505+
where
506+
T: ?Sized + ToStatement,
507+
{
508+
self.query(query, params)
509+
}
510+
fn prepare(&mut self, query: &str) -> Result<Statement, Error> {
511+
self.prepare(query)
512+
}
513+
fn transaction(&mut self) -> Result<Transaction<'_>, Error> {
514+
self.transaction()
515+
}
516+
}

postgres/src/generic_connection.rs

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
use crate::{Statement, ToStatement, Transaction};
2+
use tokio_postgres::types::ToSql;
3+
use tokio_postgres::{Error, Row};
4+
5+
/// A trait allowing abstraction over connections and transactions
6+
pub trait GenericConnection {
7+
/// Like `Client::execute`.
8+
fn execute<T>(&mut self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<u64, Error>
9+
where
10+
T: ?Sized + ToStatement;
11+
12+
/// Like `Client::query`.
13+
fn query<T>(&mut self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<Vec<Row>, Error>
14+
where
15+
T: ?Sized + ToStatement;
16+
17+
/// Like `Client::prepare`.
18+
fn prepare(&mut self, query: &str) -> Result<Statement, Error>;
19+
20+
/// Like `Client::transaction`.
21+
fn transaction(&mut self) -> Result<Transaction<'_>, Error>;
22+
}

postgres/src/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ pub use crate::copy_in_writer::CopyInWriter;
6161
pub use crate::copy_out_reader::CopyOutReader;
6262
#[doc(no_inline)]
6363
pub use crate::error::Error;
64+
pub use crate::generic_connection::GenericConnection;
6465
#[doc(no_inline)]
6566
pub use crate::row::{Row, SimpleQueryRow};
6667
pub use crate::row_iter::RowIter;
@@ -74,6 +75,7 @@ mod client;
7475
pub mod config;
7576
mod copy_in_writer;
7677
mod copy_out_reader;
78+
mod generic_connection;
7779
mod lazy_pin;
7880
mod row_iter;
7981
mod transaction;

postgres/src/transaction.rs

+23-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::{
2-
CancelToken, CopyInWriter, CopyOutReader, Portal, RowIter, Rt, Statement, ToStatement,
2+
CancelToken, CopyInWriter, CopyOutReader, GenericConnection, Portal, RowIter, Rt, Statement,
3+
ToStatement,
34
};
45
use tokio::runtime::Runtime;
56
use tokio_postgres::types::{ToSql, Type};
@@ -184,3 +185,24 @@ impl<'a> Transaction<'a> {
184185
})
185186
}
186187
}
188+
189+
impl<'a> GenericConnection for Transaction<'a> {
190+
fn execute<T>(&mut self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<u64, Error>
191+
where
192+
T: ?Sized + ToStatement,
193+
{
194+
self.execute(query, params)
195+
}
196+
fn query<T>(&mut self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<Vec<Row>, Error>
197+
where
198+
T: ?Sized + ToStatement,
199+
{
200+
self.query(query, params)
201+
}
202+
fn prepare(&mut self, query: &str) -> Result<Statement, Error> {
203+
self.prepare(query)
204+
}
205+
fn transaction(&mut self) -> Result<Transaction<'_>, Error> {
206+
self.transaction()
207+
}
208+
}

0 commit comments

Comments
 (0)