use crate::event::Builder;
use crate::object::{Context, Factory, ObjectRef};
pub enum Type<C: Context> {
EnableObject(bool),
RemoveObject,
SpawnObject(Factory<C>)
}
pub struct Event<C: Context> {
pub notify: bool,
pub ty: Type<C>
}
pub struct EventInfo {
sender: Option<ObjectRef>,
target: Option<ObjectRef>,
notify: bool
}
impl EventInfo {
pub fn new() -> Self {
EventInfo {
sender: None,
target: None,
notify: false
}
}
pub fn sender(mut self, sender: ObjectRef) -> Self {
self.sender = Some(sender);
self
}
pub fn target(mut self, target: ObjectRef) -> Self {
self.target = Some(target);
self
}
pub fn notify(mut self) -> Self {
self.notify = true;
self
}
pub(crate) fn into_event<C: Context>(self, ty: Type<C>) -> Builder<Event<C>> {
let ev = Event {
notify: self.notify,
ty
};
let mut builder = Builder::new(ev);
if let Some(sender) = self.sender {
builder = builder.sender(sender);
}
if let Some(target) = self.target {
builder = builder.sender(target);
}
builder
}
}