12345678910111213141516171819use core::fmt;20use sp_std::collections::{btree_map::BTreeMap, btree_set::BTreeSet};21use sp_std::vec::Vec;2223use frame_support::{24 BoundedVec,25 storage::{bounded_btree_map::BoundedBTreeMap, bounded_btree_set::BoundedBTreeSet},26};272829#[cfg(feature = "serde1")]30pub mod vec_serde {31 use core::convert::TryFrom;32 use frame_support::{BoundedVec, traits::Get};33 use serde::{34 ser::{self, Serialize},35 de::{self, Deserialize, Error},36 };37 use sp_std::vec::Vec;3839 pub fn serialize<D, V, S>(value: &BoundedVec<V, S>, serializer: D) -> Result<D::Ok, D::Error>40 where41 D: ser::Serializer,42 V: Serialize,43 {44 (value as &Vec<_>).serialize(serializer)45 }4647 pub fn deserialize<'de, D, V, S>(deserializer: D) -> Result<BoundedVec<V, S>, D::Error>48 where49 D: de::Deserializer<'de>,50 V: de::Deserialize<'de>,51 S: Get<u32>,52 {53 54 let vec = <Vec<V>>::deserialize(deserializer)?;55 let len = vec.len();56 TryFrom::try_from(vec).map_err(|_| D::Error::invalid_length(len, &"lesser size"))57 }58}596061pub fn vec_debug<V, S>(v: &BoundedVec<V, S>, f: &mut fmt::Formatter) -> Result<(), fmt::Error>62where63 V: fmt::Debug,64{65 use core::fmt::Debug;66 (&v as &Vec<V>).fmt(f)67}6869#[cfg(feature = "serde1")]70#[allow(dead_code)]7172pub mod map_serde {73 use core::convert::TryFrom;74 use sp_std::collections::btree_map::BTreeMap;75 use frame_support::{traits::Get, storage::bounded_btree_map::BoundedBTreeMap};76 use serde::{77 ser::{self, Serialize},78 de::{self, Deserialize, Error},79 };80 pub fn serialize<D, K, V, S>(81 value: &BoundedBTreeMap<K, V, S>,82 serializer: D,83 ) -> Result<D::Ok, D::Error>84 where85 D: ser::Serializer,86 K: Serialize + Ord,87 V: Serialize,88 {89 (value as &BTreeMap<_, _>).serialize(serializer)90 }9192 pub fn deserialize<'de, D, K, V, S>(93 deserializer: D,94 ) -> Result<BoundedBTreeMap<K, V, S>, D::Error>95 where96 D: de::Deserializer<'de>,97 K: de::Deserialize<'de> + Ord,98 V: de::Deserialize<'de>,99 S: Get<u32>,100 {101 let map = <BTreeMap<K, V>>::deserialize(deserializer)?;102 let len = map.len();103 TryFrom::try_from(map).map_err(|_| D::Error::invalid_length(len, &"lesser size"))104 }105}106107108pub fn map_debug<K, V, S>(109 v: &BoundedBTreeMap<K, V, S>,110 f: &mut fmt::Formatter,111) -> Result<(), fmt::Error>112where113 K: fmt::Debug + Ord,114 V: fmt::Debug,115{116 use core::fmt::Debug;117 (&v as &BTreeMap<K, V>).fmt(f)118}119120#[cfg(feature = "serde1")]121#[allow(dead_code)]122123pub mod set_serde {124 use core::convert::TryFrom;125 use sp_std::collections::btree_set::BTreeSet;126 use frame_support::{traits::Get, storage::bounded_btree_set::BoundedBTreeSet};127 use serde::{128 ser::{self, Serialize},129 de::{self, Deserialize, Error},130 };131 pub fn serialize<D, K, S>(132 value: &BoundedBTreeSet<K, S>,133 serializer: D,134 ) -> Result<D::Ok, D::Error>135 where136 D: ser::Serializer,137 K: Serialize + Ord,138 {139 (value as &BTreeSet<_>).serialize(serializer)140 }141142 pub fn deserialize<'de, D, K, S>(deserializer: D) -> Result<BoundedBTreeSet<K, S>, D::Error>143 where144 D: de::Deserializer<'de>,145 K: de::Deserialize<'de> + Ord,146 S: Get<u32>,147 {148 let map = <BTreeSet<K>>::deserialize(deserializer)?;149 let len = map.len();150 TryFrom::try_from(map).map_err(|_| D::Error::invalid_length(len, &"lesser size"))151 }152}153154155pub fn set_debug<K, S>(v: &BoundedBTreeSet<K, S>, f: &mut fmt::Formatter) -> Result<(), fmt::Error>156where157 K: fmt::Debug + Ord,158{159 use core::fmt::Debug;160 (&v as &BTreeSet<K>).fmt(f)161}