Skip to content
This repository was archived by the owner on Apr 20, 2020. It is now read-only.

Commit 87bc410

Browse files
committed
add backward compatibility with RedisJSON
1 parent 4713f57 commit 87bc410

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

src/lib.rs

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

3536
fn 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

Comments
 (0)