embedded_ui/app.rs
1// use core::marker::PhantomData;
2
3// use crate::{action::Action, el::El, event::Event, render::Renderer};
4
5// pub trait App<'a> {
6// type State;
7// type Message;
8// type R: Renderer;
9// type E: Event;
10// type S;
11
12// fn update(&self, state: &mut Self::State, message: Self::Message) -> impl Into<Action>;
13
14// fn view(
15// &self,
16// state: &'a Self::State,
17// ) -> impl Into<El<'a, Self::Message, Self::R, Self::E, Self::S>>;
18// }
19
20// pub fn app<'a, State, Message, R: Renderer, E: Event, S>(
21// update: impl Fn(&mut State, Message) -> Action,
22// view: impl Fn(&State),
23// ) -> impl App<'a> {
24// struct Instance<State, Message, R: Renderer, E: Event, S, U, V> {
25// update: U,
26// view: V,
27// _state: PhantomData<State>,
28// _message: PhantomData<Message>,
29// _r: PhantomData<R>,
30// _e: PhantomData<E>,
31// _s: PhantomData<S>,
32// }
33
34// impl<'a, State, Message, R, E, S, U, V> App<'a> for Instance<State, Message, R, E, S, U, V>
35// where
36// R: Renderer,
37// E: Event,
38// U: Fn(&mut State, Message),
39// V: Fn(&State) -> Into<El<'a, Self::Message, Self::R, Self::E, Self::S>>,
40// {
41// type State = State;
42// type Message = Message;
43// type R = R;
44// type E = E;
45// type S = S;
46
47// fn update(&self, state: &mut Self::State, message: Self::Message) -> impl Into<Action> {
48// (self.update)(state, message)
49// }
50
51// fn view(
52// &self,
53// state: &'a Self::State,
54// ) -> impl Into<El<'a, Self::Message, Self::R, Self::E, Self::S>> {
55// (self.view)(state)
56// }
57// }
58
59// Instance {
60// update,
61// view,
62// _state: PhantomData,
63// _message: PhantomData,
64// _r: PhantomData,
65// _e: PhantomData,
66// _s: PhantomData,
67// }
68// }