summaryrefslogtreecommitdiffstats
path: root/src/auth/types
diff options
context:
space:
mode:
Diffstat (limited to 'src/auth/types')
-rw-r--r--src/auth/types/property_map.rs27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/auth/types/property_map.rs b/src/auth/types/property_map.rs
index 964b06f..ddfc9ce 100644
--- a/src/auth/types/property_map.rs
+++ b/src/auth/types/property_map.rs
@@ -2,22 +2,33 @@ use std::fmt::Formatter;
use multimap::MultiMap;
use serde::de::{SeqAccess, Visitor};
use serde::{Deserializer, Serializer};
-use serde::ser::SerializeSeq;
use crate::auth::Property;
pub type PropertyMap = MultiMap<String, Property>;
+pub mod legacy {
+ use serde::Serializer;
+ use super::PropertyMap;
+
+ pub fn serialize<S>(value: &PropertyMap, serializer: S) -> Result<S::Ok, S::Error>
+ where S: Serializer
+ {
+ serializer.collect_map(value.iter_all()
+ .filter_map(|(k, v)| {
+ if v.is_empty() {
+ None
+ } else {
+ Some((k, v.iter().map(|p| &p.value).collect::<Vec<_>>()))
+ }
+ }))
+ }
+}
+
pub fn serialize<S>(value: &PropertyMap, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer
{
- let mut seq = serializer.serialize_seq(Some(value.keys().len()))?;
-
- for (_, prop) in value.flat_iter() {
- seq.serialize_element(prop)?;
- }
-
- seq.end()
+ serializer.collect_seq(value.flat_iter().map(|(_, v)| v))
}
pub fn deserialize<'de, D>(deserializer: D) -> Result<PropertyMap, D::Error>