Skip to main content

euv_cli/hmr/
impl.rs

1use super::*;
2
3impl HmrState {
4    /// Creates a new empty `HmrState`.
5    pub fn new() -> Self {
6        Self::default()
7    }
8
9    /// Creates an `HmrState` from an iterator of
10    /// `(key, value)` pairs. Later pairs overwrite
11    /// earlier ones for the same key.
12    pub fn from_entries<I>(entries: I) -> Self
13    where
14        I: IntoIterator<Item = (String, String)>,
15    {
16        let mut state: Self = Self::new();
17        for (key, value) in entries {
18            state.entries.insert(key, value);
19        }
20        state
21    }
22
23    /// Sets a key-value pair. Overwrites any existing
24    /// value for the key.
25    pub fn set(&mut self, key: impl Into<String>, value: impl Into<String>) {
26        self.entries.insert(key.into(), value.into());
27    }
28
29    /// Returns the value for the given key, or `None`.
30    pub fn get(&self, key: &str) -> Option<&str> {
31        self.entries.get(key).map(|s: &String| s.as_str())
32    }
33
34    /// Removes the entry for the given key, returning
35    /// the previous value if any.
36    pub fn remove(&mut self, key: &str) -> Option<String> {
37        self.entries.remove(key)
38    }
39
40    /// Removes every entry.
41    pub fn clear(&mut self) {
42        self.entries.clear();
43    }
44
45    /// Returns the number of entries.
46    pub fn len(&self) -> usize {
47        self.entries.len()
48    }
49
50    /// Returns `true` if the state is empty.
51    pub fn is_empty(&self) -> bool {
52        self.entries.is_empty()
53    }
54
55    /// Returns `true` if the state contains the given
56    /// key.
57    pub fn contains(&self, key: &str) -> bool {
58        self.entries.contains_key(key)
59    }
60
61    /// Returns an iterator over the entries.
62    pub fn iter(&self) -> impl Iterator<Item = (&str, &str)> {
63        self.entries
64            .iter()
65            .map(|(k, v): (&String, &String)| (k.as_str(), v.as_str()))
66    }
67}