1use {
2 cosmwasm_schema::cw_serde,
3 cosmwasm_std::{StdError, StdResult},
4 std::{collections::HashMap, fmt::Debug, hash::Hash},
5};
6
7pub fn vec_to_i_hashmap<T>(vec: Vec<T>) -> HashMap<usize, T> {
9 let mut map: HashMap<usize, T> = HashMap::new();
10
11 for (i, v) in vec.into_iter().enumerate() {
12 map.insert(i, v);
13 }
14
15 map
16}
17
18pub fn vec_tuple_to_hashmap<K: Eq + Hash + Debug + Clone, V>(
20 vec: Vec<(K, V)>,
21) -> StdResult<HashMap<K, V>> {
22 let mut map: HashMap<K, V> = HashMap::new();
23
24 for (k, v) in vec {
25 if map.insert(k.clone(), v).is_some() {
26 return Err(StdError::generic_err(format!("Key alredy inserted, {k:?}")));
27 };
28 }
29
30 Ok(map)
31}
32
33#[cw_serde]
34pub enum UpdateOption<T> {
35 ToNone,
36 Some(T),
37}
38
39impl<T: Clone> UpdateOption<T> {
40 pub fn into_option(&self) -> Option<T> {
41 match self {
42 UpdateOption::ToNone => None,
43 UpdateOption::Some(t) => Some(t.clone()),
44 }
45 }
46
47 pub fn unwrap(self) -> T {
48 match self {
49 UpdateOption::ToNone => panic!("Unwrap a None value"),
50 UpdateOption::Some(val) => val,
51 }
52 }
53}
54
55#[allow(clippy::from_over_into)]
56impl<T> Into<Option<T>> for UpdateOption<T> {
57 fn into(self) -> Option<T> {
58 match self {
59 UpdateOption::ToNone => None,
60 UpdateOption::Some(val) => Some(val),
61 }
62 }
63}