es_entity/
nested.rs

1use crate::traits::*;
2
3use std::collections::HashMap;
4
5pub struct Nested<T: EsEntity> {
6    entities: HashMap<<<T as EsEntity>::Event as EsEvent>::EntityId, T>,
7    new_entities: Vec<<T as EsEntity>::New>,
8}
9
10impl<T: EsEntity> Default for Nested<T> {
11    fn default() -> Self {
12        Self {
13            entities: HashMap::new(),
14            new_entities: Vec::new(),
15        }
16    }
17}
18
19impl<T: EsEntity> Nested<T> {
20    pub fn add_new(&mut self, new: <T as EsEntity>::New) -> &<T as EsEntity>::New {
21        let len = self.new_entities.len();
22        self.new_entities.push(new);
23        &self.new_entities[len]
24    }
25
26    pub fn get_persisted(&self, id: &<<T as EsEntity>::Event as EsEvent>::EntityId) -> Option<&T> {
27        self.entities.get(id)
28    }
29
30    pub fn get_persisted_mut(
31        &mut self,
32        id: &<<T as EsEntity>::Event as EsEvent>::EntityId,
33    ) -> Option<&mut T> {
34        self.entities.get_mut(id)
35    }
36
37    pub fn new_entities_mut(&mut self) -> &mut Vec<<T as EsEntity>::New> {
38        &mut self.new_entities
39    }
40
41    pub fn entities_mut(
42        &mut self,
43    ) -> &mut HashMap<<<T as EsEntity>::Event as EsEvent>::EntityId, T> {
44        &mut self.entities
45    }
46
47    pub fn extend_entities(&mut self, entities: impl IntoIterator<Item = T>) {
48        self.entities.extend(
49            entities
50                .into_iter()
51                .map(|entity| (entity.events().entity_id.clone(), entity)),
52        );
53    }
54}