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}