-
Notifications
You must be signed in to change notification settings - Fork 26
Description
Hi,
while upgrading a project from rust_postgres 0.15 to 0.17 and r2d2_postgres 0.14 to 0.16, we have some troubles with the new definition of PostgresConnectionManager<T> that contains a new generic parameter <T>.
The problem is that the r2d2 pool returns a PooledConnection that now has the very same generic parameter <T> that, as a consequence, has to be redeclared in every place where the connection is used.
For example, our project structure follows the Domain Driven Design principle, then:
- we have a set of Repositories that use a
PooledConnection, so they all have to declare the<T>generic param - we have a set of Services that use the Repositories, so all Services need to declare
<T>too - we have a set of Controllers that use the Services, so all Controllers need to declare
<T> - and so on...
In the end, this <T> generic is declared literally everywhere.
In addition, the rust_postgres Client has no generic parameters at all so it is not clear why the PooledConnection requires it.
I don't know if it is feasible, but the issue could be fixed by changing the signature in the r2d2 pool from:
pub fn get(&self) -> Result<PooledConnection<M>, Error>;to
pub fn get(&self) -> Result<PooledConnection<M::Connection>, Error>;Or, maybe, the <T> param can be boxed in the PostgresConnectionManager struct:
#[derive(Debug)]
pub struct PostgresConnectionManager {
config: Config,
tls_connector: Box<MakeTlsConnect<Socket, TlsConnect=Send, Stream=Send, ... >>,
}