@@ -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`.
1516pub ( 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
6376pub ( crate ) fn redis_value_to_robject ( val : redis:: Value ) -> Rc < RObject > {
0 commit comments