Skip to main content

moire_types/objects/
slots.rs

1use 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}