use crate::{backend::Backend, Component, Node};
use std::{cell::RefCell, fmt::Debug, marker::PhantomData, rc::Rc};
pub struct Program<APP, MSG, B> {
backend: Rc<B>,
_phantom_data: PhantomData<MSG>,
_phantom_app: PhantomData<APP>,
}
impl<APP, MSG, B> Program<APP, MSG, B>
where
MSG: Clone + Debug + 'static,
APP: Component<MSG> + 'static,
B: Backend<APP, MSG>,
{
pub fn new(app: APP) -> Rc<Self> {
println!("Instantiation..");
let program = Program {
backend: B::init(app),
_phantom_data: PhantomData,
_phantom_app: PhantomData,
};
Rc::new(program)
}
pub fn dispatch(self: &Rc<Self>, msg: MSG) {
self.backend.start_render();
}
}