/rust/registry/src/index.crates.io-6f17d22bba15001f/indexmap-1.9.1/src/serde.rs
Line | Count | Source (jump to first uncovered line) |
1 | | use serde::de::value::{MapDeserializer, SeqDeserializer}; |
2 | | use serde::de::{ |
3 | | Deserialize, Deserializer, Error, IntoDeserializer, MapAccess, SeqAccess, Visitor, |
4 | | }; |
5 | | use serde::ser::{Serialize, Serializer}; |
6 | | |
7 | | use core::fmt::{self, Formatter}; |
8 | | use core::hash::{BuildHasher, Hash}; |
9 | | use core::marker::PhantomData; |
10 | | |
11 | | use crate::IndexMap; |
12 | | |
13 | | /// Requires crate feature `"serde"` or `"serde-1"` |
14 | | impl<K, V, S> Serialize for IndexMap<K, V, S> |
15 | | where |
16 | | K: Serialize + Hash + Eq, |
17 | | V: Serialize, |
18 | | S: BuildHasher, |
19 | | { |
20 | 659k | fn serialize<T>(&self, serializer: T) -> Result<T::Ok, T::Error> |
21 | 659k | where |
22 | 659k | T: Serializer, |
23 | 659k | { |
24 | 659k | serializer.collect_map(self) |
25 | 659k | } Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, wasmtime_environ::component::info::CoreDef> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, (alloc::string::String, wasmtime_environ::component::types::TypeDef)> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<(alloc::string::String, alloc::string::String), wasmtime_types::EntityType> as serde::ser::Serialize>::serialize::<&mut bincode::ser::Serializer<&mut alloc::vec::Vec<u8>, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, wasmtime_types::EntityType> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, wasmtime_types::EntityType> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, indexmap::map::IndexMap<alloc::string::String, wasmtime_environ::component::info::CoreDef>> as serde::ser::Serialize>::serialize::<&mut bincode::ser::Serializer<&mut alloc::vec::Vec<u8>, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, wasmtime_types::EntityType> as serde::ser::Serialize>::serialize::<&mut bincode::ser::Serializer<&mut alloc::vec::Vec<u8>, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<(alloc::string::String, alloc::string::String), wasmtime_types::EntityType> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, wasmtime_environ::component::info::Export> as serde::ser::Serialize>::serialize::<&mut bincode::ser::Serializer<&mut alloc::vec::Vec<u8>, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, (alloc::string::String, wasmtime_environ::component::types::TypeDef)> as serde::ser::Serialize>::serialize::<&mut bincode::ser::Serializer<&mut alloc::vec::Vec<u8>, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> <indexmap::map::IndexMap<alloc::string::String, wasmtime_types::EntityIndex> as serde::ser::Serialize>::serialize::<&mut bincode::ser::Serializer<&mut alloc::vec::Vec<u8>, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Line | Count | Source | 20 | 329k | fn serialize<T>(&self, serializer: T) -> Result<T::Ok, T::Error> | 21 | 329k | where | 22 | 329k | T: Serializer, | 23 | 329k | { | 24 | 329k | serializer.collect_map(self) | 25 | 329k | } |
Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, indexmap::map::IndexMap<alloc::string::String, wasmtime_environ::component::info::CoreDef>> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>>> <indexmap::map::IndexMap<alloc::string::String, wasmtime_types::EntityIndex> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>>> Line | Count | Source | 20 | 329k | fn serialize<T>(&self, serializer: T) -> Result<T::Ok, T::Error> | 21 | 329k | where | 22 | 329k | T: Serializer, | 23 | 329k | { | 24 | 329k | serializer.collect_map(self) | 25 | 329k | } |
Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, wasmtime_types::EntityIndex> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, wasmtime_environ::component::info::CoreDef> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, (alloc::string::String, wasmtime_environ::component::types::TypeDef)> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, indexmap::map::IndexMap<alloc::string::String, wasmtime_environ::component::info::CoreDef>> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<(alloc::string::String, alloc::string::String), wasmtime_types::EntityType> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, wasmtime_environ::component::info::Export> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, wasmtime_environ::component::info::CoreDef> as serde::ser::Serialize>::serialize::<&mut bincode::ser::Serializer<&mut alloc::vec::Vec<u8>, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, wasmtime_environ::component::info::Export> as serde::ser::Serialize>::serialize::<&mut bincode::ser::SizeChecker<&mut bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>>> Unexecuted instantiation: <indexmap::map::IndexMap<_, _, _> as serde::ser::Serialize>::serialize::<_> |
26 | | } |
27 | | |
28 | | struct IndexMapVisitor<K, V, S>(PhantomData<(K, V, S)>); |
29 | | |
30 | | impl<'de, K, V, S> Visitor<'de> for IndexMapVisitor<K, V, S> |
31 | | where |
32 | | K: Deserialize<'de> + Eq + Hash, |
33 | | V: Deserialize<'de>, |
34 | | S: Default + BuildHasher, |
35 | | { |
36 | | type Value = IndexMap<K, V, S>; |
37 | | |
38 | 0 | fn expecting(&self, formatter: &mut Formatter<'_>) -> fmt::Result { |
39 | 0 | write!(formatter, "a map") |
40 | 0 | } |
41 | | |
42 | 15.1k | fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> |
43 | 15.1k | where |
44 | 15.1k | A: MapAccess<'de>, |
45 | 15.1k | { |
46 | 15.1k | let mut values = |
47 | 15.1k | IndexMap::with_capacity_and_hasher(map.size_hint().unwrap_or(0), S::default()); |
48 | | |
49 | 114k | while let Some((key, value)) = map.next_entry()? { |
50 | 99.0k | values.insert(key, value); |
51 | 99.0k | } |
52 | | |
53 | 15.1k | Ok(values) |
54 | 15.1k | } Unexecuted instantiation: <indexmap::serde::IndexMapVisitor<(alloc::string::String, alloc::string::String), wasmtime_types::EntityType, std::collections::hash::map::RandomState> as serde::de::Visitor>::visit_map::<<&mut bincode::de::Deserializer<_, _> as serde::de::Deserializer>::deserialize_map::Access<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> <indexmap::serde::IndexMapVisitor<alloc::string::String, wasmtime_types::EntityIndex, std::collections::hash::map::RandomState> as serde::de::Visitor>::visit_map::<<&mut bincode::de::Deserializer<_, _> as serde::de::Deserializer>::deserialize_map::Access<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Line | Count | Source | 42 | 15.1k | fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> | 43 | 15.1k | where | 44 | 15.1k | A: MapAccess<'de>, | 45 | 15.1k | { | 46 | 15.1k | let mut values = | 47 | 15.1k | IndexMap::with_capacity_and_hasher(map.size_hint().unwrap_or(0), S::default()); | 48 | | | 49 | 114k | while let Some((key, value)) = map.next_entry()? { | 50 | 99.0k | values.insert(key, value); | 51 | 99.0k | } | 52 | | | 53 | 15.1k | Ok(values) | 54 | 15.1k | } |
Unexecuted instantiation: <indexmap::serde::IndexMapVisitor<alloc::string::String, indexmap::map::IndexMap<alloc::string::String, wasmtime_environ::component::info::CoreDef>, std::collections::hash::map::RandomState> as serde::de::Visitor>::visit_map::<<&mut bincode::de::Deserializer<_, _> as serde::de::Deserializer>::deserialize_map::Access<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::serde::IndexMapVisitor<alloc::string::String, wasmtime_types::EntityType, std::collections::hash::map::RandomState> as serde::de::Visitor>::visit_map::<<&mut bincode::de::Deserializer<_, _> as serde::de::Deserializer>::deserialize_map::Access<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::serde::IndexMapVisitor<alloc::string::String, wasmtime_environ::component::info::Export, std::collections::hash::map::RandomState> as serde::de::Visitor>::visit_map::<<&mut bincode::de::Deserializer<_, _> as serde::de::Deserializer>::deserialize_map::Access<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::serde::IndexMapVisitor<alloc::string::String, wasmtime_environ::component::info::CoreDef, std::collections::hash::map::RandomState> as serde::de::Visitor>::visit_map::<<&mut bincode::de::Deserializer<_, _> as serde::de::Deserializer>::deserialize_map::Access<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::serde::IndexMapVisitor<alloc::string::String, (alloc::string::String, wasmtime_environ::component::types::TypeDef), std::collections::hash::map::RandomState> as serde::de::Visitor>::visit_map::<<&mut bincode::de::Deserializer<_, _> as serde::de::Deserializer>::deserialize_map::Access<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::serde::IndexMapVisitor<_, _, _> as serde::de::Visitor>::visit_map::<_> |
55 | | } |
56 | | |
57 | | /// Requires crate feature `"serde"` or `"serde-1"` |
58 | | impl<'de, K, V, S> Deserialize<'de> for IndexMap<K, V, S> |
59 | | where |
60 | | K: Deserialize<'de> + Eq + Hash, |
61 | | V: Deserialize<'de>, |
62 | | S: Default + BuildHasher, |
63 | | { |
64 | 15.1k | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> |
65 | 15.1k | where |
66 | 15.1k | D: Deserializer<'de>, |
67 | 15.1k | { |
68 | 15.1k | deserializer.deserialize_map(IndexMapVisitor(PhantomData)) |
69 | 15.1k | } <indexmap::map::IndexMap<alloc::string::String, wasmtime_types::EntityIndex> as serde::de::Deserialize>::deserialize::<&mut bincode::de::Deserializer<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Line | Count | Source | 64 | 15.1k | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> | 65 | 15.1k | where | 66 | 15.1k | D: Deserializer<'de>, | 67 | 15.1k | { | 68 | 15.1k | deserializer.deserialize_map(IndexMapVisitor(PhantomData)) | 69 | 15.1k | } |
Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, wasmtime_environ::component::info::Export> as serde::de::Deserialize>::deserialize::<&mut bincode::de::Deserializer<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<(alloc::string::String, alloc::string::String), wasmtime_types::EntityType> as serde::de::Deserialize>::deserialize::<&mut bincode::de::Deserializer<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, wasmtime_types::EntityType> as serde::de::Deserialize>::deserialize::<&mut bincode::de::Deserializer<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, wasmtime_environ::component::info::CoreDef> as serde::de::Deserialize>::deserialize::<&mut bincode::de::Deserializer<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, (alloc::string::String, wasmtime_environ::component::types::TypeDef)> as serde::de::Deserialize>::deserialize::<&mut bincode::de::Deserializer<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<alloc::string::String, indexmap::map::IndexMap<alloc::string::String, wasmtime_environ::component::info::CoreDef>> as serde::de::Deserialize>::deserialize::<&mut bincode::de::Deserializer<bincode::de::read::SliceReader, bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>>> Unexecuted instantiation: <indexmap::map::IndexMap<_, _, _> as serde::de::Deserialize>::deserialize::<_> |
70 | | } |
71 | | |
72 | | impl<'de, K, V, S, E> IntoDeserializer<'de, E> for IndexMap<K, V, S> |
73 | | where |
74 | | K: IntoDeserializer<'de, E> + Eq + Hash, |
75 | | V: IntoDeserializer<'de, E>, |
76 | | S: BuildHasher, |
77 | | E: Error, |
78 | | { |
79 | | type Deserializer = MapDeserializer<'de, <Self as IntoIterator>::IntoIter, E>; |
80 | | |
81 | 0 | fn into_deserializer(self) -> Self::Deserializer { |
82 | 0 | MapDeserializer::new(self.into_iter()) |
83 | 0 | } |
84 | | } |
85 | | |
86 | | use crate::IndexSet; |
87 | | |
88 | | /// Requires crate feature `"serde"` or `"serde-1"` |
89 | | impl<T, S> Serialize for IndexSet<T, S> |
90 | | where |
91 | | T: Serialize + Hash + Eq, |
92 | | S: BuildHasher, |
93 | | { |
94 | 0 | fn serialize<Se>(&self, serializer: Se) -> Result<Se::Ok, Se::Error> |
95 | 0 | where |
96 | 0 | Se: Serializer, |
97 | 0 | { |
98 | 0 | serializer.collect_seq(self) |
99 | 0 | } |
100 | | } |
101 | | |
102 | | struct IndexSetVisitor<T, S>(PhantomData<(T, S)>); |
103 | | |
104 | | impl<'de, T, S> Visitor<'de> for IndexSetVisitor<T, S> |
105 | | where |
106 | | T: Deserialize<'de> + Eq + Hash, |
107 | | S: Default + BuildHasher, |
108 | | { |
109 | | type Value = IndexSet<T, S>; |
110 | | |
111 | 0 | fn expecting(&self, formatter: &mut Formatter<'_>) -> fmt::Result { |
112 | 0 | write!(formatter, "a set") |
113 | 0 | } |
114 | | |
115 | 0 | fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error> |
116 | 0 | where |
117 | 0 | A: SeqAccess<'de>, |
118 | 0 | { |
119 | 0 | let mut values = |
120 | 0 | IndexSet::with_capacity_and_hasher(seq.size_hint().unwrap_or(0), S::default()); |
121 | | |
122 | 0 | while let Some(value) = seq.next_element()? { |
123 | 0 | values.insert(value); |
124 | 0 | } |
125 | | |
126 | 0 | Ok(values) |
127 | 0 | } |
128 | | } |
129 | | |
130 | | /// Requires crate feature `"serde"` or `"serde-1"` |
131 | | impl<'de, T, S> Deserialize<'de> for IndexSet<T, S> |
132 | | where |
133 | | T: Deserialize<'de> + Eq + Hash, |
134 | | S: Default + BuildHasher, |
135 | | { |
136 | 0 | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> |
137 | 0 | where |
138 | 0 | D: Deserializer<'de>, |
139 | 0 | { |
140 | 0 | deserializer.deserialize_seq(IndexSetVisitor(PhantomData)) |
141 | 0 | } |
142 | | } |
143 | | |
144 | | impl<'de, T, S, E> IntoDeserializer<'de, E> for IndexSet<T, S> |
145 | | where |
146 | | T: IntoDeserializer<'de, E> + Eq + Hash, |
147 | | S: BuildHasher, |
148 | | E: Error, |
149 | | { |
150 | | type Deserializer = SeqDeserializer<<Self as IntoIterator>::IntoIter, E>; |
151 | | |
152 | 0 | fn into_deserializer(self) -> Self::Deserializer { |
153 | 0 | SeqDeserializer::new(self.into_iter()) |
154 | 0 | } |
155 | | } |