about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNixon Enraght-Moony <nixon.emoony@gmail.com>2021-02-21 20:10:57 +0000
committerNixon Enraght-Moony <nixon.emoony@gmail.com>2021-02-21 20:10:57 +0000
commitba22a69d964283d388a362830e73a992f024a6bf (patch)
tree1b0ee15a092117e7b582c1f537ab570d0395dab6
parenta22d948eb0cd509b7ea52c3c615253d03ca9914b (diff)
downloadrust-ba22a69d964283d388a362830e73a992f024a6bf.tar.gz
rust-ba22a69d964283d388a362830e73a992f024a6bf.zip
Extract string_to_value to its own function
-rw-r--r--src/tools/jsondocck/src/main.rs30
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())
+    }
+}