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
#![cfg(feature = "deprecated")]

use crate::reducer::*;

/// Forwards the event to a potentially stack allocated [`Reducer`].
///
/// **Warning: this implementation is deprecated and will be removed in a future release.**
#[deprecated]
impl<'a, A, T> Reducer<A> for &'a mut T
where
    T: Reducer<A> + ?Sized,
{
    fn reduce(&mut self, action: A) {
        (**self).reduce(action);
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use mockall::predicate::*;
    use proptest::prelude::*;

    proptest! {
        #[test]
        fn reduce(action: u8) {
            let mut mock = MockReducer::new();

            mock.expect_reduce()
                .with(eq(action))
                .times(1)
                .return_const(());

            let mut reducer = &mut mock;
            Reducer::reduce(&mut reducer, action);
        }
    }
}