peace_rt_model_core/
items_state_stored_stale.rs

1use std::ops::{Deref, DerefMut};
2
3use indexmap::IndexMap;
4use peace_item_model::ItemId;
5
6use crate::StateStoredAndDiscovered;
7
8/// Items whose stored and discovered state are not equal.
9///
10/// `IndexMap<ItemId, StateStoredAndDiscovered>` newtype.
11///
12/// This can be used for either current state or goal state.
13#[derive(Clone, Debug, Default)]
14pub struct ItemsStateStoredStale(IndexMap<ItemId, StateStoredAndDiscovered>);
15
16impl ItemsStateStoredStale {
17    /// Returns a new `ItemsStateStoredStale` map.
18    pub fn new() -> Self {
19        Self(IndexMap::new())
20    }
21
22    /// Returns a new `ItemsStateStoredStale` map with the given preallocated
23    /// capacity.
24    pub fn with_capacity(capacity: usize) -> Self {
25        Self(IndexMap::with_capacity(capacity))
26    }
27
28    /// Returns the underlying map.
29    pub fn into_inner(self) -> IndexMap<ItemId, StateStoredAndDiscovered> {
30        self.0
31    }
32
33    /// Returns `true` if there is at least one stale stored state.
34    pub fn stale(&self) -> bool {
35        !self.0.is_empty()
36    }
37}
38
39impl Deref for ItemsStateStoredStale {
40    type Target = IndexMap<ItemId, StateStoredAndDiscovered>;
41
42    fn deref(&self) -> &Self::Target {
43        &self.0
44    }
45}
46
47impl DerefMut for ItemsStateStoredStale {
48    fn deref_mut(&mut self) -> &mut Self::Target {
49        &mut self.0
50    }
51}
52
53impl FromIterator<(ItemId, StateStoredAndDiscovered)> for ItemsStateStoredStale {
54    fn from_iter<I: IntoIterator<Item = (ItemId, StateStoredAndDiscovered)>>(iter: I) -> Self {
55        Self(IndexMap::from_iter(iter))
56    }
57}