expect_json/expects/
expect_op.rs

1use crate::expects::SerializeExpect;
2use crate::expects::SerializeExpectOp;
3use serde::Serialize;
4use std::fmt::Debug;
5use std::ops::Deref;
6use std::ops::DerefMut;
7
8#[derive(Debug, Clone, Serialize)]
9#[serde(into = "SerializeExpect")]
10pub struct ExpectOp<V>
11where
12    V: Into<SerializeExpectOp> + Clone,
13{
14    inner: V,
15}
16
17impl<V> ExpectOp<V>
18where
19    V: Into<SerializeExpectOp> + Clone,
20{
21    pub fn new(inner: V) -> Self {
22        Self { inner }
23    }
24}
25
26impl<V> Deref for ExpectOp<V>
27where
28    V: Into<SerializeExpectOp> + Clone,
29{
30    type Target = V;
31
32    fn deref(&self) -> &Self::Target {
33        &self.inner
34    }
35}
36
37impl<V> DerefMut for ExpectOp<V>
38where
39    V: Into<SerializeExpectOp> + Clone,
40{
41    fn deref_mut(&mut self) -> &mut Self::Target {
42        &mut self.inner
43    }
44}
45
46impl<V> From<ExpectOp<V>> for SerializeExpect
47where
48    V: Into<SerializeExpectOp> + Clone,
49{
50    fn from(expect_op: ExpectOp<V>) -> Self {
51        let inner = Into::<SerializeExpectOp>::into(expect_op.inner);
52        SerializeExpect::from(inner)
53    }
54}
55
56#[cfg(test)]
57mod test_deref {
58    use super::*;
59    use crate::ops::Contains;
60    use serde_json::json;
61
62    #[test]
63    fn it_should_return_item_inside() {
64        let op = ExpectOp::new(Contains::new(json!("something")));
65        assert_eq!(op.deref(), &Contains::new(json!("something")));
66    }
67}
68
69#[cfg(test)]
70mod test_deref_mut {
71    use super::*;
72    use crate::ops::Contains;
73    use serde_json::json;
74
75    #[test]
76    fn it_should_return_item_inside() {
77        let mut op = ExpectOp::new(Contains::new(json!("something")));
78        assert_eq!(op.deref_mut(), &mut Contains::new(json!("something")));
79    }
80}