Skip to content

Commit 1fce5b8

Browse files
committed
WIP: makes ConnectionOptions::ssl_mod OS agnostic
On Windows `ConnectionOptions::ssl_mod` will be set to `None`
1 parent 04c4dc4 commit 1fce5b8

File tree

2 files changed

+44
-43
lines changed

2 files changed

+44
-43
lines changed

diesel/src/mysql/connection/raw.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ impl RawConnection {
4848
let unix_socket = connection_options.unix_socket();
4949
let client_flags = connection_options.client_flags();
5050

51-
#[cfg(not(windows))]
5251
// allow single_match because compiler complains about if after cfg
5352
// error: attributes are not yet allowed on `if` expressions
5453
#[allow(clippy::single_match)]
@@ -190,7 +189,6 @@ impl RawConnection {
190189
self.did_an_error_occur()
191190
}
192191

193-
#[cfg(not(windows))]
194192
fn set_ssl_mode(&self, ssl_mode: mysqlclient_sys::mysql_ssl_mode) {
195193
let v = ssl_mode as u32;
196194
let v_ptr: *const u32 = &v;

diesel/src/mysql/connection/url.rs

Lines changed: 44 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ pub struct ConnectionOptions {
4949
port: Option<u16>,
5050
unix_socket: Option<CString>,
5151
client_flags: CapabilityFlags,
52-
#[cfg(not(windows))]
5352
ssl_mode: Option<mysql_ssl_mode>,
5453
}
5554

@@ -78,23 +77,26 @@ impl ConnectionOptions {
7877
_ => None,
7978
};
8079

81-
#[cfg(not(windows))]
82-
let ssl_mode = match query_pairs.get("ssl_mode") {
83-
Some(v) => {
84-
let ssl_mode = match v.to_lowercase().as_str() {
85-
"disabled" => mysql_ssl_mode::SSL_MODE_DISABLED,
86-
"preferred" => mysql_ssl_mode::SSL_MODE_PREFERRED,
87-
"required" => mysql_ssl_mode::SSL_MODE_REQUIRED,
88-
"verify_ca" => mysql_ssl_mode::SSL_MODE_VERIFY_CA,
89-
"verify_identity" => mysql_ssl_mode::SSL_MODE_VERIFY_IDENTITY,
90-
_ => {
91-
let msg = "unknown ssl_mode";
92-
return Err(ConnectionError::InvalidConnectionUrl(msg.into()));
93-
}
94-
};
95-
Some(ssl_mode)
80+
let ssl_mode = if cfg!(target_os = "windows") {
81+
None
82+
} else {
83+
match query_pairs.get("ssl_mode") {
84+
Some(v) => {
85+
let ssl_mode = match v.to_lowercase().as_str() {
86+
"disabled" => mysql_ssl_mode::SSL_MODE_DISABLED,
87+
"preferred" => mysql_ssl_mode::SSL_MODE_PREFERRED,
88+
"required" => mysql_ssl_mode::SSL_MODE_REQUIRED,
89+
"verify_ca" => mysql_ssl_mode::SSL_MODE_VERIFY_CA,
90+
"verify_identity" => mysql_ssl_mode::SSL_MODE_VERIFY_IDENTITY,
91+
_ => {
92+
let msg = "unknown ssl_mode";
93+
return Err(ConnectionError::InvalidConnectionUrl(msg.into()));
94+
}
95+
};
96+
Some(ssl_mode)
97+
}
98+
_ => None,
9699
}
97-
_ => None,
98100
};
99101

100102
let host = match url.host() {
@@ -125,7 +127,6 @@ impl ConnectionOptions {
125127
port: url.port(),
126128
unix_socket: unix_socket,
127129
client_flags: client_flags,
128-
#[cfg(not(windows))]
129130
ssl_mode: ssl_mode,
130131
})
131132
}
@@ -158,7 +159,6 @@ impl ConnectionOptions {
158159
self.client_flags
159160
}
160161

161-
#[cfg(not(windows))]
162162
pub fn ssl_mode(&self) -> Option<mysql_ssl_mode> {
163163
self.ssl_mode
164164
}
@@ -298,29 +298,32 @@ fn unix_socket_tests() {
298298
);
299299
}
300300

301-
#[cfg(not(windows))]
302301
#[test]
303302
fn ssl_mode() {
304303
let ssl_mode = |url| ConnectionOptions::parse(url).unwrap().ssl_mode();
305-
assert_eq!(ssl_mode("mysql://localhost"), None);
306-
assert_eq!(
307-
ssl_mode("mysql://localhost?ssl_mode=disabled"),
308-
Some(mysql_ssl_mode::SSL_MODE_DISABLED)
309-
);
310-
assert_eq!(
311-
ssl_mode("mysql://localhost?ssl_mode=PREFERRED"),
312-
Some(mysql_ssl_mode::SSL_MODE_PREFERRED)
313-
);
314-
assert_eq!(
315-
ssl_mode("mysql://localhost?ssl_mode=required"),
316-
Some(mysql_ssl_mode::SSL_MODE_REQUIRED)
317-
);
318-
assert_eq!(
319-
ssl_mode("mysql://localhost?ssl_mode=VERIFY_CA"),
320-
Some(mysql_ssl_mode::SSL_MODE_VERIFY_CA)
321-
);
322-
assert_eq!(
323-
ssl_mode("mysql://localhost?ssl_mode=verify_identity"),
324-
Some(mysql_ssl_mode::SSL_MODE_VERIFY_IDENTITY)
325-
);
304+
if cfg!(target_os = "windows") {
305+
assert_eq!(ssl_mode("mysql://localhost?ssl_mode=required"), None);
306+
} else {
307+
assert_eq!(ssl_mode("mysql://localhost"), None);
308+
assert_eq!(
309+
ssl_mode("mysql://localhost?ssl_mode=disabled"),
310+
Some(mysql_ssl_mode::SSL_MODE_DISABLED)
311+
);
312+
assert_eq!(
313+
ssl_mode("mysql://localhost?ssl_mode=PREFERRED"),
314+
Some(mysql_ssl_mode::SSL_MODE_PREFERRED)
315+
);
316+
assert_eq!(
317+
ssl_mode("mysql://localhost?ssl_mode=required"),
318+
Some(mysql_ssl_mode::SSL_MODE_REQUIRED)
319+
);
320+
assert_eq!(
321+
ssl_mode("mysql://localhost?ssl_mode=VERIFY_CA"),
322+
Some(mysql_ssl_mode::SSL_MODE_VERIFY_CA)
323+
);
324+
assert_eq!(
325+
ssl_mode("mysql://localhost?ssl_mode=verify_identity"),
326+
Some(mysql_ssl_mode::SSL_MODE_VERIFY_IDENTITY)
327+
);
328+
}
326329
}

0 commit comments

Comments
 (0)