pub struct AnyThat { /* private fields */ }
Expand description
Matches on arbitrary logic provided by a closure.
For anything you can fit in an fn(&str) -> bool
closure, this is a great option to avoid
having to create your own custom matcher for some on-the-fly matching that’s needed.
Several provided matchers like Any
, StringExact
, and StringContains
are easily
expressed as closures for AnyThat
, but are provided explicitly for clarity and convenience.
§Example: Matching on Any i64-Parseable Message
use std::str::FromStr;
use ws_mock::matchers::{AnyThat, Matcher};
let matcher = AnyThat::new(|text| i64::from_str(text).is_ok());
let matching_message = "42";
let non_number_message = "...";
let non_matching_message = "42.000001";
assert!(matcher.matches(matching_message));
assert!(!matcher.matches(non_number_message));
assert!(!matcher.matches(non_matching_message));
§Example: Function Pointers
Rust allows regular functions to be referred to via function pointers using the same fn
syntax, allowing for more complex logic than you may want to express in an in-line closure.
Merely for example, the same closure used above can be expressed as:
use std::str::FromStr;
use ws_mock::matchers::{AnyThat, Matcher};
fn parses_to_i64(text: &str) -> bool {
i64::from_str(text).is_ok()
}
let matcher = AnyThat::new(parses_to_i64);
let matching_message = "42";
let non_matching_message = "42.000001";
assert!(matcher.matches(matching_message));
assert!(!matcher.matches(non_matching_message));
Implementations§
Trait Implementations§
Auto Trait Implementations§
impl Freeze for AnyThat
impl RefUnwindSafe for AnyThat
impl Send for AnyThat
impl Sync for AnyThat
impl Unpin for AnyThat
impl UnwindSafe for AnyThat
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more