diff options
| author | Nixon Enraght-Moony <nixon.emoony@gmail.com> | 2021-02-21 20:10:57 +0000 |
|---|---|---|
| committer | Nixon Enraght-Moony <nixon.emoony@gmail.com> | 2021-02-21 20:10:57 +0000 |
| commit | ba22a69d964283d388a362830e73a992f024a6bf (patch) | |
| tree | 1b0ee15a092117e7b582c1f537ab570d0395dab6 | |
| parent | a22d948eb0cd509b7ea52c3c615253d03ca9914b (diff) | |
| download | rust-ba22a69d964283d388a362830e73a992f024a6bf.tar.gz rust-ba22a69d964283d388a362830e73a992f024a6bf.zip | |
Extract string_to_value to its own function
| -rw-r--r-- | src/tools/jsondocck/src/main.rs | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/src/tools/jsondocck/src/main.rs b/src/tools/jsondocck/src/main.rs index 9c9d49b821f..e3334e559db 100644 --- a/src/tools/jsondocck/src/main.rs +++ b/src/tools/jsondocck/src/main.rs @@ -2,6 +2,7 @@ use jsonpath_lib::select; use lazy_static::lazy_static; use regex::{Regex, RegexBuilder}; use serde_json::Value; +use std::borrow::Cow; use std::{env, fmt, fs}; mod cache; @@ -207,15 +208,8 @@ fn check_command(command: Command, cache: &mut Cache) -> Result<(), CkError> { let val = cache.get_value(&command.args[0])?; match select(&val, &command.args[1]) { Ok(results) => { - // FIXME: Share the pat getting code with the `Is` branch. - let v_holder; - let pat: &Value = if command.args[2].starts_with("$") { - &cache.variables[&command.args[2][1..]] - } else { - v_holder = serde_json::from_str(&command.args[2]).unwrap(); - &v_holder - }; - results.contains(pat) + let pat = string_to_value(&command.args[2], cache); + results.contains(&pat.as_ref()) } Err(_) => false, } @@ -240,14 +234,8 @@ fn check_command(command: Command, cache: &mut Cache) -> Result<(), CkError> { let val = cache.get_value(&command.args[0])?; match select(&val, &command.args[1]) { Ok(results) => { - let v_holder; - let pat: &Value = if command.args[2].starts_with("$") { - &cache.variables[&command.args[2][1..]] - } else { - v_holder = serde_json::from_str(&command.args[2]).unwrap(); - &v_holder - }; - results.len() == 1 && results[0] == pat + let pat = string_to_value(&command.args[2], cache); + results.len() == 1 && results[0] == pat.as_ref() } Err(_) => false, } @@ -296,3 +284,11 @@ fn check_command(command: Command, cache: &mut Cache) -> Result<(), CkError> { Ok(()) } } + +fn string_to_value<'a>(s: &str, cache: &'a Cache) -> Cow<'a, Value> { + if s.starts_with("$") { + Cow::Borrowed(&cache.variables[&s[1..]]) + } else { + Cow::Owned(serde_json::from_str(s).unwrap()) + } +} |
