mod regex;
mod type_matcher;
mod value;
pub use regex::RegexMatcher;
pub use type_matcher::TypeMatcher;
pub use value::ValueMatcher;
use serde_json::Value;
use std::fmt::Debug;
pub trait JsonMatcher: Debug {
fn matches(&self, value: &Value) -> bool;
fn description(&self) -> String;
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json::json;
#[derive(Debug)]
struct TestMatcher(bool);
impl JsonMatcher for TestMatcher {
fn matches(&self, _: &Value) -> bool {
self.0
}
fn description(&self) -> String {
format!("always returns {}", self.0)
}
}
#[test]
fn test_matcher_trait() {
let value = json!(42);
let true_matcher = TestMatcher(true);
assert!(true_matcher.matches(&value));
assert_eq!(true_matcher.description(), "always returns true");
let false_matcher = TestMatcher(false);
assert!(!false_matcher.matches(&value));
}
}