diff --git a/crates/cidr-map/src/map.rs b/crates/cidr-map/src/map.rs index 715d01f3..b9629f12 100644 --- a/crates/cidr-map/src/map.rs +++ b/crates/cidr-map/src/map.rs @@ -15,7 +15,8 @@ use mlua::{FromLua, Lua, MetaMethod, UserDataMethods}; #[cfg(feature = "lua")] use mod_memoize::CacheValue; use serde::de::{MapAccess, Visitor}; -use serde::{Deserialize, Deserializer}; +use serde::ser::SerializeMap; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; use std::fmt::Debug; use std::net::IpAddr; use std::str::FromStr; @@ -100,6 +101,22 @@ where } } +impl Serialize for CidrMap +where + V: Clone + PartialEq + Serialize, +{ + fn serialize(&self, serializer: S) -> Result<::Ok, ::Error> + where + S: Serializer, + { + let mut map = serializer.serialize_map(None)?; + for (k, v) in self.iter() { + map.serialize_entry(k, v)?; + } + map.end() + } +} + /// Nodes of a CidrMap can be either an InnerNode (with two children) /// or a leaf node. #[derive(Debug, Clone, PartialEq)]