tauri_store/store/
state.rs

1use serde::{Deserialize, Deserializer, Serialize, Serializer};
2use serde_json::Value as Json;
3use std::collections::HashMap;
4use std::result::Result as StdResult;
5
6/// Internal state of a store.
7#[derive(Clone, Debug, Default)]
8pub struct StoreState(pub(super) HashMap<String, Json>);
9
10impl StoreState {
11  /// Consumes the store state and returns the inner map.
12  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}