Skip to content

Commit

Permalink
Merge pull request #87 from jchlapinski/master
Browse files Browse the repository at this point in the history
deps upgrade serde: 1.*, heapsize: 0.*
  • Loading branch information
Gankra authored Jul 26, 2017
2 parents df66adc + 35589c5 commit 92c4fc5
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 28 deletions.
6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ heapsize_impl = ["heapsize"]

[dependencies]
clippy = { version = "0.*", optional = true }
serde = { version = "0.9", optional = true }
serde_test = { version = "0.9", optional = true }
heapsize = { version = "0.3.9", optional = true }
serde = { version = "1.0", optional = true }
serde_test = { version = "1.0", optional = true }
heapsize = { version = "0.4", optional = true }
40 changes: 20 additions & 20 deletions src/serde.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
//! An optional implementation of serialization/deserialization. Reference
//! implementations used:
//!
//! - [Serialize][1].
//! - [Deserialize][2].
//!
//! [1]: https://github.com/serde-rs/serde/blob/97856462467db2e90cf368e407c7ebcc726a01a9/serde/src/ser/impls.rs#L601-L611
//! [2]: https://github.com/serde-rs/serde/blob/97856462467db2e90cf368e407c7ebcc726a01a9/serde/src/de/impls.rs#L694-L746
//! An optional implementation of serialization/deserialization.
extern crate serde;

Expand All @@ -17,7 +10,7 @@ use super::LinkedHashMap;

use self::serde::{Serialize, Serializer, Deserialize, Deserializer};
use self::serde::ser::SerializeMap;
use self::serde::de::{Visitor, MapVisitor, Error};
use self::serde::de::{Visitor, MapAccess, Error};

impl<K, V, S> Serialize for LinkedHashMap<K, V, S>
where K: Serialize + Eq + Hash,
Expand All @@ -37,6 +30,7 @@ impl<K, V, S> Serialize for LinkedHashMap<K, V, S>
}
}

#[derive(Debug)]
/// `serde::de::Visitor` for a linked hash map.
pub struct LinkedHashMapVisitor<K, V> {
marker: PhantomData<LinkedHashMap<K, V>>,
Expand All @@ -51,9 +45,15 @@ impl<K, V> LinkedHashMapVisitor<K, V> {
}
}

impl<K, V> Visitor for LinkedHashMapVisitor<K, V>
where K: Deserialize + Eq + Hash,
V: Deserialize,
impl<K, V> Default for LinkedHashMapVisitor<K, V> {
fn default() -> Self {
LinkedHashMapVisitor::new()
}
}

impl<'de, K, V> Visitor<'de> for LinkedHashMapVisitor<K, V>
where K: Deserialize<'de> + Eq + Hash,
V: Deserialize<'de>,
{
type Value = LinkedHashMap<K, V>;

Expand All @@ -69,25 +69,25 @@ impl<K, V> Visitor for LinkedHashMapVisitor<K, V>
}

#[inline]
fn visit_map<Visitor>(self, mut visitor: Visitor) -> Result<Self::Value, Visitor::Error>
where Visitor: MapVisitor,
fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
where M: MapAccess<'de>,
{
let mut values = LinkedHashMap::with_capacity(visitor.size_hint().0);
let mut values = LinkedHashMap::with_capacity(map.size_hint().unwrap_or(0));

while let Some((key, value)) = try!(visitor.visit()) {
while let Some((key, value)) = map.next_entry()? {
values.insert(key, value);
}

Ok(values)
}
}

impl<K, V> Deserialize for LinkedHashMap<K, V>
where K: Deserialize + Eq + Hash,
V: Deserialize,
impl<'de, K, V> Deserialize<'de> for LinkedHashMap<K, V>
where K: Deserialize<'de> + Eq + Hash,
V: Deserialize<'de>,
{
fn deserialize<D>(deserializer: D) -> Result<LinkedHashMap<K, V>, D::Error>
where D: Deserializer,
where D: Deserializer<'de>,
{
deserializer.deserialize_map(LinkedHashMapVisitor::new())
}
Expand Down
7 changes: 2 additions & 5 deletions tests/serde.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ fn test_ser_de_empty() {
let map = LinkedHashMap::<char, u32>::new();

assert_tokens(&map, &[
Token::MapStart(Some(0)),
Token::Map { len: Some(0) },
Token::MapEnd,
]);
}
Expand All @@ -24,16 +24,13 @@ fn test_ser_de() {
map.insert('c', 30);

assert_tokens(&map, &[
Token::MapStart(Some(3)),
Token::MapSep,
Token::Map { len: Some(3) },
Token::Char('b'),
Token::I32(20),

Token::MapSep,
Token::Char('a'),
Token::I32(10),

Token::MapSep,
Token::Char('c'),
Token::I32(30),
Token::MapEnd,
Expand Down

0 comments on commit 92c4fc5

Please sign in to comment.