expect_json/expects/ops/contains/
mod.rs

1use crate::expects::SerializeExpectOp;
2use crate::internals::types::ValueType;
3use serde::Deserialize;
4use serde::Serialize;
5use serde_json::Value;
6
7mod array_contains;
8pub use self::array_contains::*;
9
10mod string_contains;
11pub use self::string_contains::*;
12
13#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
14pub enum Contains {
15    Array(ArrayContains),
16    String(StringContains),
17}
18
19impl Contains {
20    pub(crate) fn new<V>(values: V) -> Self
21    where
22        V: Into<Value>,
23    {
24        let value = Into::<Value>::into(values);
25        match value {
26            Value::Array(values_array) => Self::Array(ArrayContains::new(values_array)),
27            Value::String(values_string) => Self::String(StringContains::new(values_string)),
28            _ => {
29                let value_type = ValueType::from(&value);
30                panic!(
31                    ".contains expected to take array, string, or object. Received: {value_type}"
32                );
33            }
34        }
35    }
36}
37
38impl From<Contains> for SerializeExpectOp {
39    fn from(contains: Contains) -> Self {
40        match contains {
41            Contains::Array(contains) => Self::ArrayContains(contains),
42            Contains::String(contains) => Self::StringContains(contains),
43        }
44    }
45}