12345678910111213141516171819use core::fmt;2021use frame_support::{22 storage::{bounded_btree_map::BoundedBTreeMap, bounded_btree_set::BoundedBTreeSet},23 BoundedVec,24};25use sp_std::{26 collections::{btree_map::BTreeMap, btree_set::BTreeSet},27 vec::Vec,28};293031pub mod vec_serde {32 use core::convert::TryFrom;3334 use frame_support::{traits::Get, BoundedVec};35 use serde::{36 de::{self, Deserialize, Error},37 ser::{self, Serialize},38 };39 use sp_std::vec::Vec;4041 pub fn serialize<D, V, S>(value: &BoundedVec<V, S>, serializer: D) -> Result<D::Ok, D::Error>42 where43 D: ser::Serializer,44 V: Serialize,45 {46 (value as &Vec<_>).serialize(serializer)47 }4849 pub fn deserialize<'de, D, V, S>(deserializer: D) -> Result<BoundedVec<V, S>, D::Error>50 where51 D: de::Deserializer<'de>,52 V: de::Deserialize<'de>,53 S: Get<u32>,54 {55 56 let vec = <Vec<V>>::deserialize(deserializer)?;57 let len = vec.len();58 TryFrom::try_from(vec).map_err(|_| D::Error::invalid_length(len, &"lesser size"))59 }60}616263pub fn vec_debug<V, S>(v: &BoundedVec<V, S>, f: &mut fmt::Formatter) -> Result<(), fmt::Error>64where65 V: fmt::Debug,66{67 use core::fmt::Debug;68 (v as &Vec<V>).fmt(f)69}7071#[allow(dead_code)]7273pub mod map_serde {74 use core::convert::TryFrom;7576 use frame_support::{storage::bounded_btree_map::BoundedBTreeMap, traits::Get};77 use serde::{78 de::{self, Deserialize, Error},79 ser::{self, Serialize},80 };81 use sp_std::collections::btree_map::BTreeMap;82 pub fn serialize<D, K, V, S>(83 value: &BoundedBTreeMap<K, V, S>,84 serializer: D,85 ) -> Result<D::Ok, D::Error>86 where87 D: ser::Serializer,88 K: Serialize + Ord,89 V: Serialize,90 {91 (value as &BTreeMap<_, _>).serialize(serializer)92 }9394 pub fn deserialize<'de, D, K, V, S>(95 deserializer: D,96 ) -> Result<BoundedBTreeMap<K, V, S>, D::Error>97 where98 D: de::Deserializer<'de>,99 K: de::Deserialize<'de> + Ord,100 V: de::Deserialize<'de>,101 S: Get<u32>,102 {103 let map = <BTreeMap<K, V>>::deserialize(deserializer)?;104 let len = map.len();105 TryFrom::try_from(map).map_err(|_| D::Error::invalid_length(len, &"lesser size"))106 }107}108109110pub fn map_debug<K, V, S>(111 v: &BoundedBTreeMap<K, V, S>,112 f: &mut fmt::Formatter,113) -> Result<(), fmt::Error>114where115 K: fmt::Debug + Ord,116 V: fmt::Debug,117{118 use core::fmt::Debug;119 (v as &BTreeMap<K, V>).fmt(f)120}121122#[allow(dead_code)]123124pub mod set_serde {125 use core::convert::TryFrom;126127 use frame_support::{storage::bounded_btree_set::BoundedBTreeSet, traits::Get};128 use serde::{129 de::{self, Deserialize, Error},130 ser::{self, Serialize},131 };132 use sp_std::collections::btree_set::BTreeSet;133 pub fn serialize<D, K, S>(134 value: &BoundedBTreeSet<K, S>,135 serializer: D,136 ) -> Result<D::Ok, D::Error>137 where138 D: ser::Serializer,139 K: Serialize + Ord,140 {141 (value as &BTreeSet<_>).serialize(serializer)142 }143144 pub fn deserialize<'de, D, K, S>(deserializer: D) -> Result<BoundedBTreeSet<K, S>, D::Error>145 where146 D: de::Deserializer<'de>,147 K: de::Deserialize<'de> + Ord,148 S: Get<u32>,149 {150 let map = <BTreeSet<K>>::deserialize(deserializer)?;151 let len = map.len();152 TryFrom::try_from(map).map_err(|_| D::Error::invalid_length(len, &"lesser size"))153 }154}155156157pub fn set_debug<K, S>(v: &BoundedBTreeSet<K, S>, f: &mut fmt::Formatter) -> Result<(), fmt::Error>158where159 K: fmt::Debug + Ord,160{161 use core::fmt::Debug;162 (v as &BTreeSet<K>).fmt(f)163}