in guard/src/rules/path_value.rs [147:194]
fn eq(&self, other: &Self) -> bool {
match (self, other) {
(PathAwareValue::Map((_, map)), PathAwareValue::Map((_, map2))) => map == map2,
(PathAwareValue::List((_, list)), PathAwareValue::List((_, list2))) => list == list2,
(PathAwareValue::Bool((_, b1)), PathAwareValue::Bool((_, b2))) => b1 == b2,
(PathAwareValue::String((_, s)), PathAwareValue::Regex((_, r))) => {
if let Ok(regex) = regex::Regex::new(r.as_str()) {
regex.is_match(s.as_str())
} else {
false
}
},
(PathAwareValue::Regex((_, r)), PathAwareValue::String((_, s))) => {
if let Ok(regex) = regex::Regex::new(r.as_str()) {
regex.is_match(s.as_str())
} else {
false
}
},
(PathAwareValue::Regex((_, r)), PathAwareValue::Regex((_, s))) => r == s,
//
// Range checks
//
(PathAwareValue::Int((_, value)), PathAwareValue::RangeInt((_, r))) => {
value.is_within(r)
},
(PathAwareValue::Float((_, value)), PathAwareValue::RangeFloat((_, r))) => {
value.is_within(r)
},
(PathAwareValue::Char((_, value)), PathAwareValue::RangeChar((_, r))) => {
value.is_within(r)
},
(rest, rest2) => match compare_values(rest, rest2) {
Ok(ordering) => match ordering {
Ordering::Equal => true,
_ => false
},
Err(_) => false
}
}
}