use crate::builder::CanBeAddedToModel;
use crate::{Eventhdlr, Model, ProblemCreated};
pub struct EventHdlrBuilder<E: Eventhdlr> {
name: Option<String>,
desc: Option<String>,
eventhdlr: E,
}
impl<E: Eventhdlr> EventHdlrBuilder<E> {
pub fn new(eventhdlr: E) -> Self {
EventHdlrBuilder {
name: None,
desc: None,
eventhdlr,
}
}
pub fn name(mut self, name: &str) -> Self {
self.name = Some(name.to_string());
self
}
pub fn desc(mut self, desc: &str) -> Self {
self.desc = Some(desc.to_string());
self
}
}
pub fn eventhdlr<E: Eventhdlr>(ev: E) -> EventHdlrBuilder<E> {
EventHdlrBuilder::new(ev)
}
impl<E: Eventhdlr + 'static> CanBeAddedToModel for EventHdlrBuilder<E> {
type Return = ();
fn add(self, model: &mut Model<ProblemCreated>) {
let name = self.name.unwrap_or_else(|| "".into());
let desc = self.desc.unwrap_or_else(|| "".into());
let eventhdlr = Box::new(self.eventhdlr);
model.include_eventhdlr(&name, &desc, eventhdlr);
}
}