@@ -15,6 +15,7 @@ fn json_set(ctx: &Context, args: Vec<String>) -> RedisResult {
1515 let mut args = args. into_iter ( ) . skip ( 1 ) ;
1616
1717 let key = args. next_string ( ) ?;
18+ let _path = args. next_string ( ) ?; // TODO handle this path
1819 let value = args. next_string ( ) ?;
1920
2021 let key = ctx. open_key_writable ( & key) ;
@@ -29,13 +30,33 @@ fn json_set(ctx: &Context, args: Vec<String>) -> RedisResult {
2930 }
3031 }
3132
32- Ok ( ( ) . into ( ) )
33+ Ok ( "OK" . into ( ) )
3334}
3435
3536fn json_get ( ctx : & Context , args : Vec < String > ) -> RedisResult {
3637 let mut args = args. into_iter ( ) . skip ( 1 ) ;
38+
3739 let key = args. next_string ( ) ?;
38- let path = args. next_string ( ) ?;
40+
41+ let mut path = loop {
42+
43+ let arg = match args. next_string ( ) {
44+ Ok ( n) => n,
45+ Err ( _) => String :: from ( "$" ) // path is optional
46+ } ;
47+
48+ match arg. as_ref ( ) {
49+ "INDENT" => args. next ( ) , // TODO add support
50+ "NEWLINE" => args. next ( ) , // TODO add support
51+ "SPACE" => args. next ( ) , // TODO add support
52+ "NOESCAPE" => args. next ( ) , // TODO add support
53+ "." => break String :: from ( "$" ) , // backward compatibility suuport
54+ _ => break arg
55+ } ;
56+ } ;
57+ if path. starts_with ( "." ) { // backward compatibility
58+ path. insert ( 0 , '$' ) ;
59+ }
3960
4061 let key = ctx. open_key_writable ( & key) ;
4162
@@ -51,9 +72,9 @@ fn json_strlen(ctx: &Context, args: Vec<String>) -> RedisResult {
5172 let mut args = args. into_iter ( ) . skip ( 1 ) ;
5273 let key = args. next_string ( ) ?;
5374 let path = args. next_string ( ) ?;
54-
55- let key = ctx. open_key_writable ( & key) ;
56-
75+
76+ let key = ctx. open_key_writable ( & key) ;
77+
5778 let length = match key. get_value :: < RedisJSON > ( & REDIS_JSON_TYPE ) ? {
5879 Some ( doc) => doc. str_len ( & path) ?. into ( ) ,
5980 None => ( ) . into ( )
@@ -66,7 +87,7 @@ fn json_type(ctx: &Context, args: Vec<String>) -> RedisResult {
6687 let mut args = args. into_iter ( ) . skip ( 1 ) ;
6788 let key = args. next_string ( ) ?;
6889 let path = args. next_string ( ) ?;
69-
90+
7091 let key = ctx. open_key_writable ( & key) ;
7192
7293 let value = match key. get_value :: < RedisJSON > ( & REDIS_JSON_TYPE ) ? {
0 commit comments