From ba56a561b254c9a5f3d23cb54d23dc311759ab4c Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector0193@gmail.com>
Date: Thu, 21 Nov 2019 18:00:27 +0100
Subject: Implement `iced::Sandbox` trait for simple apps

---
 src/lib.rs | 72 ++++----------------------------------------------------------
 1 file changed, 4 insertions(+), 68 deletions(-)

(limited to 'src/lib.rs')

diff --git a/src/lib.rs b/src/lib.rs
index e64767c2..8462cd3c 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,73 +1,9 @@
+mod application;
 #[cfg_attr(target_arch = "wasm32", path = "web.rs")]
 #[cfg_attr(not(target_arch = "wasm32"), path = "native.rs")]
 mod platform;
+mod sandbox;
 
+pub use application::Application;
 pub use platform::*;
-
-pub trait Application: Sized {
-    type Message: std::fmt::Debug + Send;
-
-    fn new() -> (Self, Command<Self::Message>);
-
-    fn title(&self) -> String;
-
-    fn update(&mut self, message: Self::Message) -> Command<Self::Message>;
-
-    fn view(&mut self) -> Element<Self::Message>;
-
-    fn run()
-    where
-        Self: 'static + Sized,
-    {
-        #[cfg(not(target_arch = "wasm32"))]
-        <Instance<Self> as iced_winit::Application>::run();
-
-        #[cfg(target_arch = "wasm32")]
-        iced_web::Application::run(Instance(self));
-    }
-}
-
-struct Instance<A: Application>(A);
-
-#[cfg(not(target_arch = "wasm32"))]
-impl<A> iced_winit::Application for Instance<A>
-where
-    A: Application,
-{
-    type Renderer = iced_wgpu::Renderer;
-    type Message = A::Message;
-
-    fn new() -> (Self, Command<A::Message>) {
-        let (app, command) = A::new();
-
-        (Instance(app), command)
-    }
-
-    fn title(&self) -> String {
-        self.0.title()
-    }
-
-    fn update(&mut self, message: Self::Message) -> Command<Self::Message> {
-        self.0.update(message)
-    }
-
-    fn view(&mut self) -> Element<Self::Message> {
-        self.0.view()
-    }
-}
-
-#[cfg(target_arch = "wasm32")]
-impl<A> iced_web::Application for Instance<A>
-where
-    A: Application,
-{
-    type Message = A::Message;
-
-    fn update(&mut self, message: Self::Message) {
-        self.0.update(message);
-    }
-
-    fn view(&mut self) -> Element<Self::Message> {
-        self.0.view()
-    }
-}
+pub use sandbox::Sandbox;
-- 
cgit