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_mut(
27        &mut self,
28        id: &<<T as EsEntity>::Event as EsEvent>::EntityId,
29    ) -> Option<&mut T> {
30        self.entities.get_mut(id)
31    }
32
33    pub fn new_entities_mut(&mut self) -> &mut Vec<<T as EsEntity>::New> {
34        &mut self.new_entities
35    }
36
37    pub fn entities_mut(
38        &mut self,
39    ) -> &mut HashMap<<<T as EsEntity>::Event as EsEvent>::EntityId, T> {
40        &mut self.entities
41    }
42
43    pub fn extend_entities(&mut self, entities: impl IntoIterator<Item = T>) {
44        self.entities.extend(
45            entities
46                .into_iter()
47                .map(|entity| (entity.events().entity_id.clone(), entity)),
48        );
49    }
50}