@@ -7,7 +7,19 @@ extern crate postgres;
77use std:: error;
88use std:: error:: Error as _StdError;
99use std:: fmt;
10- use postgres:: { IntoConnectParams , SslMode } ;
10+ use postgres:: { IntoConnectParams } ;
11+ use postgres:: io:: NegotiateSsl ;
12+
13+ /// Like `postgres::SslMode` except that it owns its `NegotiateSsl` instance.
14+ #[ derive( Debug ) ]
15+ pub enum SslMode {
16+ /// Like `postgres::SslMode::None`.
17+ None ,
18+ /// Like `postgres::SslMode::Prefer`.
19+ Prefer ( Box < NegotiateSsl + Sync + Send > ) ,
20+ /// Like `postgres::SslMode::Require`.
21+ Require ( Box < NegotiateSsl + Sync + Send > ) ,
22+ }
1123
1224/// A unified enum of errors returned by postgres::Connection
1325#[ derive( Debug ) ]
@@ -45,14 +57,12 @@ impl error::Error for Error {
4557/// ## Example
4658///
4759/// ```rust,no_run
48- /// #![allow(unstable)]
4960/// extern crate r2d2;
5061/// extern crate r2d2_postgres;
5162/// extern crate postgres;
5263///
5364/// use std::thread;
54- /// use postgres::SslMode;
55- /// use r2d2_postgres::PostgresConnectionManager;
65+ /// use r2d2_postgres::{SslMode, PostgresConnectionManager};
5666///
5767/// fn main() {
5868/// let config = r2d2::Config::default();
@@ -84,7 +94,7 @@ impl PostgresConnectionManager {
8494 -> Result < PostgresConnectionManager , postgres:: error:: ConnectError > {
8595 let params = match params. into_connect_params ( ) {
8696 Ok ( params) => params,
87- Err ( err) => return Err ( postgres:: error:: ConnectError :: BadConnectParams ( err) ) ,
97+ Err ( err) => return Err ( postgres:: error:: ConnectError :: ConnectParams ( err) ) ,
8898 } ;
8999
90100 Ok ( PostgresConnectionManager {
@@ -99,7 +109,12 @@ impl r2d2::ManageConnection for PostgresConnectionManager {
99109 type Error = Error ;
100110
101111 fn connect ( & self ) -> Result < postgres:: Connection , Error > {
102- postgres:: Connection :: connect ( self . params . clone ( ) , & self . ssl_mode ) . map_err ( Error :: Connect )
112+ let mode = match self . ssl_mode {
113+ SslMode :: None => postgres:: SslMode :: None ,
114+ SslMode :: Prefer ( ref n) => postgres:: SslMode :: Prefer ( & * * n) ,
115+ SslMode :: Require ( ref n) => postgres:: SslMode :: Require ( & * * n) ,
116+ } ;
117+ postgres:: Connection :: connect ( self . params . clone ( ) , mode) . map_err ( Error :: Connect )
103118 }
104119
105120 fn is_valid ( & self , conn : & mut postgres:: Connection ) -> Result < ( ) , Error > {
0 commit comments