From 6261f7881cb477e7a3e6cfe9c7d985d95754cad7 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sun, 10 May 2020 22:14:07 -0400 Subject: [PATCH] Manual equals is working! --- src/bin.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/bin.rs b/src/bin.rs index 47c977b..9c17df6 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -143,6 +143,26 @@ impl Loopable for serde_json::Value { impl CompareContextElement for serde_json::Value { fn equals(&self, other: &dyn ContextElement) -> bool { - false + match self { + serde_json::Value::Null => false, + serde_json::Value::Bool(boolean) => false, + serde_json::Value::Number(_num) => false, + serde_json::Value::String(string_value) => { + // Handle json string + match other.to_any().downcast_ref::() { + None => (), + Some(other_json_value) => return self == other_json_value, + } + // Handle rust string (for string literals) + match other.to_any().downcast_ref::() { + None => (), + Some(other_string) => return string_value == other_string, + } + // Otherwise we know of no other string types + false + } + serde_json::Value::Array(array_value) => false, + serde_json::Value::Object(_obj) => false, + } } }