fj_core/layers/
objects.rs1use crate::{
4 geometry::Geometry,
5 objects::{AboutToBeStored, AnyObject, Objects},
6 validation::Validation,
7};
8
9use super::{validation::ValidateObject, Command, Event, Layer};
10
11impl Layer<Objects> {
12 pub fn insert(
16 &mut self,
17 object: AnyObject<AboutToBeStored>,
18 geometry: &Geometry,
19 validation: &mut Layer<Validation>,
20 ) {
21 let mut events = Vec::new();
22 self.process(InsertObject { object }, &mut events);
23
24 for event in events {
25 let event = ValidateObject {
26 object: event.object.into(),
27 geometry,
28 };
29 validation.process(event, &mut Vec::new());
30 }
31 }
32}
33
34#[derive(Clone, Debug)]
36pub struct InsertObject {
37 pub object: AnyObject<AboutToBeStored>,
39}
40
41impl Command<Objects> for InsertObject {
42 type Result = ();
43 type Event = InsertObject;
44
45 fn decide(self, _: &Objects, events: &mut Vec<Self::Event>) {
46 events.push(self);
47 }
48}
49
50impl Event<Objects> for InsertObject {
51 fn evolve(&self, state: &mut Objects) {
52 self.object.clone().insert(state);
53 }
54}