tauri_store/store/
state.rs1use serde::{Deserialize, Deserializer, Serialize, Serializer};
2use serde_json::Value as Json;
3use std::collections::HashMap;
4use std::result::Result as StdResult;
5
6#[derive(Clone, Debug, Default)]
8pub struct StoreState(pub(super) HashMap<String, Json>);
9
10impl StoreState {
11 pub fn into_inner(self) -> HashMap<String, Json> {
13 self.0
14 }
15}
16
17impl Serialize for StoreState {
18 fn serialize<S>(&self, serializer: S) -> StdResult<S::Ok, S::Error>
19 where
20 S: Serializer,
21 {
22 self.0.serialize(serializer)
23 }
24}
25
26impl<'de> Deserialize<'de> for StoreState {
27 fn deserialize<D>(deserializer: D) -> StdResult<Self, D::Error>
28 where
29 D: Deserializer<'de>,
30 {
31 type Map = HashMap<String, Json>;
32 Ok(Self(Map::deserialize(deserializer)?))
33 }
34}
35
36impl From<HashMap<String, Json>> for StoreState {
37 fn from(map: HashMap<String, Json>) -> Self {
38 Self(map)
39 }
40}
41
42impl<K, V> FromIterator<(K, V)> for StoreState
43where
44 K: Into<String>,
45 V: Into<Json>,
46{
47 fn from_iter<I>(iter: I) -> Self
48 where
49 I: IntoIterator<Item = (K, V)>,
50 {
51 let inner = iter
52 .into_iter()
53 .map(|(k, v)| (k.into(), v.into()))
54 .collect();
55
56 Self(inner)
57 }
58}
59
60impl<K, V> From<(K, V)> for StoreState
61where
62 K: Into<String>,
63 V: Into<Json>,
64{
65 fn from((key, value): (K, V)) -> Self {
66 Self::from_iter([(key, value)])
67 }
68}
69
70impl<K, V> From<Vec<(K, V)>> for StoreState
71where
72 K: Into<String>,
73 V: Into<Json>,
74{
75 fn from(pairs: Vec<(K, V)>) -> Self {
76 Self::from_iter(pairs)
77 }
78}
79
80impl<const N: usize, K, V> From<[(K, V); N]> for StoreState
81where
82 K: Into<String>,
83 V: Into<Json>,
84{
85 fn from(pairs: [(K, V); N]) -> Self {
86 Self::from_iter(pairs)
87 }
88}