Skip to content

Commit fde30f0

Browse files
committed
Add url option
1 parent ad09c43 commit fde30f0

1 file changed

Lines changed: 30 additions & 17 deletions

File tree

src/value.rs

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,26 @@ pub(crate) struct RedisConnParams {
1010
pub url: String,
1111
}
1212

13-
/// Extract common Redis connection kwargs (host, port, tls, username, password)
14-
/// and build a Redis URL.
13+
/// Extract common Redis connection kwargs and build a Redis URL.
14+
/// If `url` kwarg is given, it takes precedence over individual kwargs.
15+
/// Otherwise, builds URL from `host`, `port`, `tls`, `username`, `password`.
1516
pub(crate) fn parse_redis_conn_params(vm: &mut VM) -> RedisConnParams {
16-
let mut host = "127.0.0.1".to_string();
17-
let mut port: u16 = 6379;
18-
let mut tls = false;
19-
let mut username: Option<String> = None;
20-
let mut password: Option<String> = None;
21-
2217
if let Some(kwargs) = vm.get_kwargs() {
18+
// url kwarg takes precedence
19+
if let Some(u) = kwargs.get("url") {
20+
if !u.is_nil() {
21+
if let Ok(url) = <&RObject as TryInto<String>>::try_into(u.as_ref()) {
22+
return RedisConnParams { url };
23+
}
24+
}
25+
}
26+
27+
let mut host = "127.0.0.1".to_string();
28+
let mut port: u16 = 6379;
29+
let mut tls = false;
30+
let mut username: Option<String> = None;
31+
let mut password: Option<String> = None;
32+
2333
if let Some(h) = kwargs.get("host") {
2434
if let Ok(v) = h.as_ref().try_into() {
2535
host = v;
@@ -47,17 +57,20 @@ pub(crate) fn parse_redis_conn_params(vm: &mut VM) -> RedisConnParams {
4757
}
4858
}
4959
}
50-
}
5160

52-
let scheme = if tls { "rediss" } else { "redis" };
53-
let auth = match (username, password) {
54-
(Some(u), Some(p)) => format!("{}:{}@", u, p),
55-
(None, Some(p)) => format!(":{}@", p),
56-
_ => String::new(),
57-
};
58-
let url = format!("{}://{}{}:{}", scheme, auth, host, port);
61+
let scheme = if tls { "rediss" } else { "redis" };
62+
let auth = match (username, password) {
63+
(Some(u), Some(p)) => format!("{}:{}@", u, p),
64+
(None, Some(p)) => format!(":{}@", p),
65+
_ => String::new(),
66+
};
67+
let url = format!("{}://{}{}:{}", scheme, auth, host, port);
68+
return RedisConnParams { url };
69+
}
5970

60-
RedisConnParams { url }
71+
RedisConnParams {
72+
url: "redis://127.0.0.1:6379".to_string(),
73+
}
6174
}
6275

6376
pub(crate) fn redis_value_to_robject(val: redis::Value) -> Rc<RObject> {

0 commit comments

Comments
 (0)