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
use crate::core::SimpleMatch;

use super::Mismatch;

/// The matcher for [`be_default`].
///
/// [`be_default`]: crate::be_default
#[derive(Debug, Default)]
pub struct BeDefaultMatcher<Actual> {
    expected: Actual,
}

impl<Actual> BeDefaultMatcher<Actual>
where
    Actual: Default,
{
    /// Create a new [`BeDefaultMatcher`] from the expected value.
    pub fn new() -> Self {
        Self::default()
    }
}

impl<Actual> SimpleMatch<Actual> for BeDefaultMatcher<Actual>
where
    Actual: Default + PartialEq<Actual> + Eq,
{
    type Fail = Mismatch<Actual, Actual>;

    fn matches(&mut self, actual: &Actual) -> crate::Result<bool> {
        Ok(actual == &self.expected)
    }

    fn fail(self, actual: Actual) -> Self::Fail {
        Mismatch {
            expected: self.expected,
            actual,
        }
    }
}