predicates/
utils.rs

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
9use std::fmt;
10
11use crate::reflection;
12use crate::Predicate;
13
14#[derive(Clone, PartialEq, Eq)]
15pub(crate) struct DebugAdapter<T>
16where
17    T: fmt::Debug,
18{
19    pub(crate) debug: T,
20}
21
22impl<T> DebugAdapter<T>
23where
24    T: fmt::Debug,
25{
26    pub fn new(debug: T) -> Self {
27        Self { debug }
28    }
29}
30
31impl<T> fmt::Display for DebugAdapter<T>
32where
33    T: fmt::Debug,
34{
35    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
36        write!(f, "{:#?}", self.debug)
37    }
38}
39
40impl<T> fmt::Debug for DebugAdapter<T>
41where
42    T: fmt::Debug,
43{
44    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
45        self.debug.fmt(f)
46    }
47}
48
49pub(crate) fn default_find_case<'a, P, Item>(
50    pred: &'a P,
51    expected: bool,
52    variable: &Item,
53) -> Option<reflection::Case<'a>>
54where
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}