use serde::{Deserialize, Deserializer};
pub fn deserialize_ip_nets<'de, D>(deserializer: D) -> Result<Option<Vec<ipnet::IpNet>>, D::Error>
where
D: Deserializer<'de>,
{
use serde::de::Error;
let strings_opt = Option::<Vec<String>>::deserialize(deserializer)?;
match strings_opt {
Some(strings) => {
let mut ip_nets = Vec::new();
for s in strings {
let ip_net =
crate::utils::ip_parser::parse_ipnet(&s).map_err(Error::custom)?;
ip_nets.push(ip_net);
}
Ok(Some(ip_nets))
}
None => Ok(None),
}
}