Skip to content

Commit

Permalink
Merge commit 2d91d0f (conflicts)
Browse files Browse the repository at this point in the history
  • Loading branch information
cecton committed Jul 29, 2023
2 parents a8fef1c + 2d91d0f commit a5188ea
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 0 deletions.
2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ rustdoc-args = ["--cfg", "docsrs"]

[features]
map = ["indexmap"]
serde = ["dep:serde", "indexmap/serde"]

[dependencies]
indexmap = { version = "2", optional = true }
serde = { version = "1", optional = true }
14 changes: 14 additions & 0 deletions src/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,20 @@ where
}
}

#[cfg(feature = "serde")]
impl<T: serde::Serialize + ImplicitClone> serde::Serialize for IArray<T> {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
<[T] as serde::Serialize>::serialize(self, serializer)
}
}

#[cfg(feature = "serde")]
impl<'de, T: serde::Deserialize<'de> + ImplicitClone> serde::Deserialize<'de> for IArray<T> {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
<Vec<T> as serde::Deserialize>::deserialize(deserializer).map(IArray::<T>::from)
}
}

#[cfg(test)]
mod test_array {
use super::*;
Expand Down
36 changes: 36 additions & 0 deletions src/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,42 @@ impl<'a, K: Eq + Hash + ImplicitClone + 'static, V: PartialEq + ImplicitClone +
}
}

#[cfg(feature = "serde")]
impl<K, V> serde::Serialize for IMap<K, V>
where
K: Eq + Hash + ImplicitClone + 'static + serde::Serialize,
V: PartialEq + ImplicitClone + 'static + serde::Serialize,
{
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
use serde::ser::SerializeMap;
let mut seq = serializer.serialize_map(Some(self.len()))?;
match self {
Self::Static(a) => {
for (k, v) in a.iter() {
seq.serialize_entry(k, v)?;
}
},
Self::Rc(a) => {
for (k, v) in a.iter() {
seq.serialize_entry(k, v)?;
}
}
}
seq.end()
}
}

#[cfg(feature = "serde")]
impl<'de, K, V> serde::Deserialize<'de> for IMap<K, V>
where
K: Eq + Hash + ImplicitClone + 'static + serde::Deserialize<'de>,
V: PartialEq + ImplicitClone + 'static + serde::Deserialize<'de>,
{
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
<Map<K, V> as serde::Deserialize>::deserialize(deserializer).map(IMap::<K, V>::from)
}
}

#[cfg(test)]
mod test_map {
use super::*;
Expand Down
14 changes: 14 additions & 0 deletions src/string.rs
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,20 @@ impl std::borrow::Borrow<str> for IString {
}
}

#[cfg(feature = "serde")]
impl serde::Serialize for IString {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
<str as serde::Serialize>::serialize(self, serializer)
}
}

#[cfg(feature = "serde")]
impl<'de> serde::Deserialize<'de> for IString{
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
<String as serde::Deserialize>::deserialize(deserializer).map(IString::from)
}
}

#[cfg(test)]
mod test_string {
use super::*;
Expand Down

0 comments on commit a5188ea

Please sign in to comment.