moire_types/objects/
slots.rs1use crate::{EdgeKind, EntityBody, EventKind, EventTarget, ScopeBody};
2
3pub trait EntityBodySlot {
4 type Value;
5 const KIND_NAME: &'static str;
6
7 fn project(body: &EntityBody) -> Option<&Self::Value>;
8 fn project_mut(body: &mut EntityBody) -> Option<&mut Self::Value>;
9}
10
11pub trait ScopeBodySlot {
12 type Value;
13 const KIND_NAME: &'static str;
14
15 fn project(body: &ScopeBody) -> Option<&Self::Value>;
16 fn project_mut(body: &mut ScopeBody) -> Option<&mut Self::Value>;
17}
18
19pub trait EventTargetSlot {
20 type Value;
21 const KIND_NAME: &'static str;
22
23 fn project(target: &EventTarget) -> Option<&Self::Value>;
24 fn project_mut(target: &mut EventTarget) -> Option<&mut Self::Value>;
25}
26
27pub trait EventKindSlot {
28 const KIND: EventKind;
29 const KIND_NAME: &'static str;
30}
31
32pub trait EdgeKindSlot {
33 const KIND: EdgeKind;
34 const KIND_NAME: &'static str;
35}