use crate::lib::{Value};
pub fn pull(mut array: Value, value: Value) -> Value {
let new_vec = match array {
Value::Null | Value::Bool(_) | Value::Number(_) | Value::String(_) | Value::Object(_) => {
return array
}
Value::Array(ref vec) => {
match value {
Value::Null | Value::Bool(_) | Value::Number(_) | Value::String(_) => (),
Value::Array(_) | Value::Object(_) => return array,
}
let mut new_vec = vec![];
for item in vec.iter() {
if item != &value {
new_vec.push(item.clone())
}
}
new_vec
}
};
*array.as_array_mut().unwrap() = new_vec;
array
}
#[macro_export]
macro_rules! pull {
() => (
json!(null)
);
($a:expr $(,)*) => {
$a
};
($a:expr, $b:expr $(,)*) => {
$crate::pull($a, $b)
};
($a:expr, $b:expr, $($rest:tt)*) => {
$crate::pull!($crate::pull($a, $b), $($rest)*)
};
}