From 02c20e6202f1c8c28753f3233cc635790707937a Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 17 Nov 2019 07:09:46 +0100 Subject: Support async actions in `iced_winit` --- src/lib.rs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 52b0ff8c..945af421 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,21 +4,23 @@ mod platform; pub use platform::*; -pub trait Application { - type Message: std::fmt::Debug; +pub trait Application: Sized { + type Message: std::fmt::Debug + Send; + + fn new() -> (Self, Command); fn title(&self) -> String; - fn update(&mut self, message: Self::Message); + fn update(&mut self, message: Self::Message) -> Command; fn view(&mut self) -> Element; - fn run(self) + fn run() where Self: 'static + Sized, { #[cfg(not(target_arch = "wasm32"))] - iced_winit::Application::run(Instance(self)); + as iced_winit::Application>::run(); #[cfg(target_arch = "wasm32")] iced_web::Application::run(Instance(self)); @@ -35,12 +37,18 @@ where type Renderer = Renderer; type Message = A::Message; + fn new() -> (Self, Command) { + let (app, command) = A::new(); + + (Instance(app), command) + } + fn title(&self) -> String { self.0.title() } - fn update(&mut self, message: Self::Message) { - self.0.update(message); + fn update(&mut self, message: Self::Message) -> Command { + self.0.update(message) } fn view(&mut self) -> Element { -- cgit