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};272829pub mod vec_serde {30 use core::convert::TryFrom;3132 use frame_support::{traits::Get, BoundedVec};33 use serde::{34 de::{self, Deserialize, Error},35 ser::{self, Serialize},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#[allow(dead_code)]7071pub mod map_serde {72 use core::convert::TryFrom;7374 use frame_support::{storage::bounded_btree_map::BoundedBTreeMap, traits::Get};75 use serde::{76 de::{self, Deserialize, Error},77 ser::{self, Serialize},78 };79 use sp_std::collections::btree_map::BTreeMap;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#[allow(dead_code)]121122pub mod set_serde {123 use core::convert::TryFrom;124125 use frame_support::{storage::bounded_btree_set::BoundedBTreeSet, traits::Get};126 use serde::{127 de::{self, Deserialize, Error},128 ser::{self, Serialize},129 };130 use sp_std::collections::btree_set::BTreeSet;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}