1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use super::ArgumentMatcher;
use crate::internal::argument::Argument;
use std::fmt::Write;
use std::fmt::{self, Display};

impl Argument {
    /// Crates an argument matcher that matches any value.
    ///
    /// # Examples
    /// ```
    /// use mockiato::{mockable, Argument};
    ///
    /// #[cfg_attr(test, mockable)]
    /// trait MessageSender {
    ///     fn send_message(&self, message: &str);
    /// }
    ///
    /// let mut sender = MessageSenderMock::new();
    /// let message = "Don't make lemonade";
    /// sender.expect_send_message(Argument::any);
    /// sender.send_message(message);
    /// ```
    pub fn any(&self) -> AnyArgumentMatcher {
        AnyArgumentMatcher
    }
}

#[derive(Debug)]
pub struct AnyArgumentMatcher;

impl Display for AnyArgumentMatcher {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.write_char('*')
    }
}

impl<'args, U> ArgumentMatcher<U> for AnyArgumentMatcher {
    fn matches_argument(&self, _input: &U) -> bool {
        true
    }
}