Remove some indirection in application traits

Skill issue, though.
This commit is contained in:
Héctor Ramón Jiménez 2025-05-13 22:29:20 +02:00
parent 3a3a02beef
commit 8c87f67d6d
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
3 changed files with 13 additions and 31 deletions

View file

@ -75,7 +75,7 @@ pub use timed::timed;
pub fn application<State, Message, Theme, Renderer>( pub fn application<State, Message, Theme, Renderer>(
boot: impl Boot<State, Message>, boot: impl Boot<State, Message>,
update: impl Update<State, Message>, update: impl Update<State, Message>,
view: impl for<'a> self::View<'a, State, Message, Theme, Renderer>, view: impl for<'a> View<'a, State, Message, Theme, Renderer>,
) -> Application<impl Program<State = State, Message = Message, Theme = Theme>> ) -> Application<impl Program<State = State, Message = Message, Theme = Theme>>
where where
State: 'static, State: 'static,
@ -482,19 +482,12 @@ where
/// returns any `Into<Task<Message>>`. /// returns any `Into<Task<Message>>`.
pub trait Update<State, Message> { pub trait Update<State, Message> {
/// Processes the message and updates the state of the [`Application`]. /// Processes the message and updates the state of the [`Application`].
fn update( fn update(&self, state: &mut State, message: Message) -> Task<Message>;
&self,
state: &mut State,
message: Message,
) -> impl Into<Task<Message>>;
} }
impl<State, Message> Update<State, Message> for () { impl<State, Message> Update<State, Message> for () {
fn update( fn update(&self, _state: &mut State, _message: Message) -> Task<Message> {
&self, Task::none()
_state: &mut State,
_message: Message,
) -> impl Into<Task<Message>> {
} }
} }
@ -503,12 +496,8 @@ where
T: Fn(&mut State, Message) -> C, T: Fn(&mut State, Message) -> C,
C: Into<Task<Message>>, C: Into<Task<Message>>,
{ {
fn update( fn update(&self, state: &mut State, message: Message) -> Task<Message> {
&self, self(state, message).into()
state: &mut State,
message: Message,
) -> impl Into<Task<Message>> {
self(state, message)
} }
} }
@ -518,10 +507,7 @@ where
/// returns any `Into<Element<'_, Message>>`. /// returns any `Into<Element<'_, Message>>`.
pub trait View<'a, State, Message, Theme, Renderer> { pub trait View<'a, State, Message, Theme, Renderer> {
/// Produces the widget of the [`Application`]. /// Produces the widget of the [`Application`].
fn view( fn view(&self, state: &'a State) -> Element<'a, Message, Theme, Renderer>;
&self,
state: &'a State,
) -> impl Into<Element<'a, Message, Theme, Renderer>>;
} }
impl<'a, T, State, Message, Theme, Renderer, Widget> impl<'a, T, State, Message, Theme, Renderer, Widget>
@ -531,10 +517,7 @@ where
State: 'static, State: 'static,
Widget: Into<Element<'a, Message, Theme, Renderer>>, Widget: Into<Element<'a, Message, Theme, Renderer>>,
{ {
fn view( fn view(&self, state: &'a State) -> Element<'a, Message, Theme, Renderer> {
&self, self(state).into()
state: &'a State,
) -> impl Into<Element<'a, Message, Theme, Renderer>> {
self(state)
} }
} }

View file

@ -110,7 +110,6 @@ where
) -> Element<'a, Self::Message, Self::Theme, Self::Renderer> { ) -> Element<'a, Self::Message, Self::Theme, Self::Renderer> {
self.view self.view
.view(state) .view(state)
.into()
.map(|message| (message, Instant::now())) .map(|message| (message, Instant::now()))
} }

View file

@ -21,7 +21,7 @@ use std::borrow::Cow;
pub fn daemon<State, Message, Theme, Renderer>( pub fn daemon<State, Message, Theme, Renderer>(
boot: impl application::Boot<State, Message>, boot: impl application::Boot<State, Message>,
update: impl application::Update<State, Message>, update: impl application::Update<State, Message>,
view: impl for<'a> self::View<'a, State, Message, Theme, Renderer>, view: impl for<'a> View<'a, State, Message, Theme, Renderer>,
) -> Daemon<impl Program<State = State, Message = Message, Theme = Theme>> ) -> Daemon<impl Program<State = State, Message = Message, Theme = Theme>>
where where
State: 'static, State: 'static,
@ -286,7 +286,7 @@ pub trait View<'a, State, Message, Theme, Renderer> {
&self, &self,
state: &'a State, state: &'a State,
window: window::Id, window: window::Id,
) -> impl Into<Element<'a, Message, Theme, Renderer>>; ) -> Element<'a, Message, Theme, Renderer>;
} }
impl<'a, T, State, Message, Theme, Renderer, Widget> impl<'a, T, State, Message, Theme, Renderer, Widget>
@ -300,7 +300,7 @@ where
&self, &self,
state: &'a State, state: &'a State,
window: window::Id, window: window::Id,
) -> impl Into<Element<'a, Message, Theme, Renderer>> { ) -> Element<'a, Message, Theme, Renderer> {
self(state, window) self(state, window).into()
} }
} }