use serde::de::DeserializeOwned;
use serde::{Deserialize, Deserializer};
use serde_json::Value;
pub fn empty_or_vec<'de, D, T>(deserializer: D) -> Result<Vec<T>, D::Error>
where
D: Deserializer<'de>,
T: DeserializeOwned,
{
let value = Value::deserialize(deserializer)?;
match value {
Value::Array(_) => serde_json::from_value(value).map_err(serde::de::Error::custom),
Value::Null => Ok(Vec::new()),
Value::Object(map) if map.is_empty() => Ok(Vec::new()),
Value::Number(_) | Value::Bool(_) | Value::String(_) => Ok(Vec::new()),
Value::Object(_) => serde_json::from_value(value).map_err(serde::de::Error::custom),
}
}