1 // Copyright (c) 2018 The predicates-rs Project Developers.
2 //
3 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
6 // option. This file may not be copied, modified, or distributed
7 // except according to those terms.
8 
9 use std::fmt;
10 
11 use crate::reflection;
12 use crate::Predicate;
13 
14 #[derive(Clone, PartialEq, Eq)]
15 pub(crate) struct DebugAdapter<T>
16 where
17     T: fmt::Debug,
18 {
19     pub(crate) debug: T,
20 }
21 
22 impl<T> DebugAdapter<T>
23 where
24     T: fmt::Debug,
25 {
new(debug: T) -> Self26     pub fn new(debug: T) -> Self {
27         Self { debug }
28     }
29 }
30 
31 impl<T> fmt::Display for DebugAdapter<T>
32 where
33     T: fmt::Debug,
34 {
fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result35     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
36         write!(f, "{:#?}", self.debug)
37     }
38 }
39 
40 impl<T> fmt::Debug for DebugAdapter<T>
41 where
42     T: fmt::Debug,
43 {
fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result44     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
45         self.debug.fmt(f)
46     }
47 }
48 
default_find_case<'a, P, Item>( pred: &'a P, expected: bool, variable: &Item, ) -> Option<reflection::Case<'a>> where P: Predicate<Item>, Item: ?Sized,49 pub(crate) fn default_find_case<'a, P, Item>(
50     pred: &'a P,
51     expected: bool,
52     variable: &Item,
53 ) -> Option<reflection::Case<'a>>
54 where
55     P: Predicate<Item>,
56     Item: ?Sized,
57 {
58     let actual = pred.eval(variable);
59     if expected == actual {
60         Some(reflection::Case::new(Some(pred), actual))
61     } else {
62         None
63     }
64 }
65