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// }