// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // Copyright by contributors to this project. // SPDX-License-Identifier: (Apache-2.0 OR MIT) use alloc::{collections::BTreeMap, vec::Vec}; #[cfg(feature = "std")] use std::{collections::HashMap, hash::Hash}; use crate::{MlsDecode, MlsEncode, MlsSize}; #[cfg(feature = "std")] impl MlsSize for HashMap where K: MlsSize, V: MlsSize, { fn mls_encoded_len(&self) -> usize { crate::iter::mls_encoded_len(self.iter()) } } #[cfg(feature = "std")] impl MlsEncode for HashMap where K: MlsEncode, V: MlsEncode, { fn mls_encode(&self, writer: &mut Vec) -> Result<(), crate::Error> { crate::iter::mls_encode(self.iter(), writer) } } #[cfg(feature = "std")] impl MlsDecode for HashMap where K: MlsDecode + Hash + Eq, V: MlsDecode, { fn mls_decode(reader: &mut &[u8]) -> Result { crate::iter::mls_decode_collection(reader, |data| { let mut items = HashMap::new(); while !data.is_empty() { items.insert(K::mls_decode(data)?, V::mls_decode(data)?); } Ok(items) }) } } impl MlsSize for BTreeMap where K: MlsSize, V: MlsSize, { fn mls_encoded_len(&self) -> usize { crate::iter::mls_encoded_len(self.iter()) } } impl MlsEncode for BTreeMap where K: MlsEncode, V: MlsEncode, { fn mls_encode(&self, writer: &mut Vec) -> Result<(), crate::Error> { crate::iter::mls_encode(self.iter(), writer) } } impl MlsDecode for BTreeMap where K: MlsDecode + Eq + Ord, V: MlsDecode, { fn mls_decode(reader: &mut &[u8]) -> Result { crate::iter::mls_decode_collection(reader, |data| { let mut items = BTreeMap::new(); while !data.is_empty() { items.insert(K::mls_decode(data)?, V::mls_decode(data)?); } Ok(items) }) } }