1use core::fmt;2use sp_std::collections::{btree_map::BTreeMap, btree_set::BTreeSet};3use sp_std::vec::Vec;45use frame_support::{6 BoundedVec,7 storage::{bounded_btree_map::BoundedBTreeMap, bounded_btree_set::BoundedBTreeSet},8};91011#[cfg(feature = "serde1")]12pub mod vec_serde {13 use core::convert::TryFrom;14 use frame_support::{BoundedVec, traits::Get};15 use serde::{16 ser::{self, Serialize},17 de::{self, Deserialize, Error},18 };19 use sp_std::vec::Vec;2021 pub fn serialize<D, V, S>(value: &BoundedVec<V, S>, serializer: D) -> Result<D::Ok, D::Error>22 where23 D: ser::Serializer,24 V: Serialize,25 {26 (value as &Vec<_>).serialize(serializer)27 }2829 pub fn deserialize<'de, D, V, S>(deserializer: D) -> Result<BoundedVec<V, S>, D::Error>30 where31 D: de::Deserializer<'de>,32 V: de::Deserialize<'de>,33 S: Get<u32>,34 {35 36 let vec = <Vec<V>>::deserialize(deserializer)?;37 let len = vec.len();38 TryFrom::try_from(vec).map_err(|_| D::Error::invalid_length(len, &"lesser size"))39 }40}4142pub fn vec_debug<V, S>(v: &BoundedVec<V, S>, f: &mut fmt::Formatter) -> Result<(), fmt::Error>43where44 V: fmt::Debug,45{46 use core::fmt::Debug;47 (&v as &Vec<V>).fmt(f)48}4950#[cfg(feature = "serde1")]51#[allow(dead_code)]52pub mod map_serde {53 use core::convert::TryFrom;54 use sp_std::collections::btree_map::BTreeMap;55 use frame_support::{traits::Get, storage::bounded_btree_map::BoundedBTreeMap};56 use serde::{57 ser::{self, Serialize},58 de::{self, Deserialize, Error},59 };60 pub fn serialize<D, K, V, S>(61 value: &BoundedBTreeMap<K, V, S>,62 serializer: D,63 ) -> Result<D::Ok, D::Error>64 where65 D: ser::Serializer,66 K: Serialize + Ord,67 V: Serialize,68 {69 (value as &BTreeMap<_, _>).serialize(serializer)70 }7172 pub fn deserialize<'de, D, K, V, S>(73 deserializer: D,74 ) -> Result<BoundedBTreeMap<K, V, S>, D::Error>75 where76 D: de::Deserializer<'de>,77 K: de::Deserialize<'de> + Ord,78 V: de::Deserialize<'de>,79 S: Get<u32>,80 {81 let map = <BTreeMap<K, V>>::deserialize(deserializer)?;82 let len = map.len();83 TryFrom::try_from(map).map_err(|_| D::Error::invalid_length(len, &"lesser size"))84 }85}8687pub fn map_debug<K, V, S>(88 v: &BoundedBTreeMap<K, V, S>,89 f: &mut fmt::Formatter,90) -> Result<(), fmt::Error>91where92 K: fmt::Debug + Ord,93 V: fmt::Debug,94{95 use core::fmt::Debug;96 (&v as &BTreeMap<K, V>).fmt(f)97}9899#[cfg(feature = "serde1")]100#[allow(dead_code)]101pub mod set_serde {102 use core::convert::TryFrom;103 use sp_std::collections::btree_set::BTreeSet;104 use frame_support::{traits::Get, storage::bounded_btree_set::BoundedBTreeSet};105 use serde::{106 ser::{self, Serialize},107 de::{self, Deserialize, Error},108 };109 pub fn serialize<D, K, S>(110 value: &BoundedBTreeSet<K, S>,111 serializer: D,112 ) -> Result<D::Ok, D::Error>113 where114 D: ser::Serializer,115 K: Serialize + Ord,116 {117 (value as &BTreeSet<_>).serialize(serializer)118 }119120 pub fn deserialize<'de, D, K, S>(deserializer: D) -> Result<BoundedBTreeSet<K, S>, D::Error>121 where122 D: de::Deserializer<'de>,123 K: de::Deserialize<'de> + Ord,124 S: Get<u32>,125 {126 let map = <BTreeSet<K>>::deserialize(deserializer)?;127 let len = map.len();128 TryFrom::try_from(map).map_err(|_| D::Error::invalid_length(len, &"lesser size"))129 }130}131132pub fn set_debug<K, S>(v: &BoundedBTreeSet<K, S>, f: &mut fmt::Formatter) -> Result<(), fmt::Error>133where134 K: fmt::Debug + Ord,135{136 use core::fmt::Debug;137 (&v as &BTreeSet<K>).fmt(f)138}