diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-11-16 11:21:17 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-11-16 11:21:17 -0500 |
commit | d190bd7354519f655ec37cd6847059557d949302 (patch) | |
tree | e65ca92f1725bb6d8bdee88d67c204343dc9c09f /teleterm | |
parent | c3aed08259c794290d8cf21fe0712b36d4c5f523 (diff) | |
download | teleterm-d190bd7354519f655ec37cd6847059557d949302.tar.gz teleterm-d190bd7354519f655ec37cd6847059557d949302.zip |
start refactoring into a struct
Diffstat (limited to 'teleterm')
-rw-r--r-- | teleterm/src/cmd/web.rs | 8 | ||||
-rw-r--r-- | teleterm/src/web.rs | 43 |
2 files changed, 43 insertions, 8 deletions
diff --git a/teleterm/src/cmd/web.rs b/teleterm/src/cmd/web.rs index c39582b..6f82815 100644 --- a/teleterm/src/cmd/web.rs +++ b/teleterm/src/cmd/web.rs @@ -17,13 +17,7 @@ impl crate::config::Config for Config { fn run( &self, ) -> Box<dyn futures::Future<Item = (), Error = Error> + Send> { - Box::new( - gotham::init_server( - self.web.listen_address, - crate::web::router(), - ) - .map_err(|_| unreachable!()), - ) + Box::new(crate::web::Server::new(self.web.listen_address)) } } diff --git a/teleterm/src/web.rs b/teleterm/src/web.rs index 1cf3a31..d8324c2 100644 --- a/teleterm/src/web.rs +++ b/teleterm/src/web.rs @@ -1,6 +1,7 @@ mod ws; -use futures::{Future as _, Sink as _, Stream as _}; +use crate::prelude::*; + use gotham::router::builder::{DefineSingleRoute as _, DrawRoutes as _}; use gotham::state::FromState as _; use lazy_static::lazy_static; @@ -19,6 +20,46 @@ lazy_static_include::lazy_static_include_bytes!( "static/teleterm_web_bg.wasm" ); +pub struct Server { + server: Box<dyn futures::Future<Item = (), Error = ()> + Send>, +} + +impl Server { + pub fn new<T: std::net::ToSocketAddrs + 'static>(addr: T) -> Self { + Self { + server: Box::new(gotham::init_server(addr, router())), + } + } +} + +impl Server { + const POLL_FNS: + &'static [&'static dyn for<'a> Fn( + &'a mut Self, + ) + -> component_future::Poll< + (), + Error, + >] = &[&Self::poll_web_server]; + + fn poll_web_server(&mut self) -> component_future::Poll<(), Error> { + component_future::try_ready!(self + .server + .poll() + .map_err(|_| unreachable!())); + Ok(component_future::Async::Ready(())) + } +} + +impl futures::Future for Server { + type Item = (); + type Error = Error; + + fn poll(&mut self) -> futures::Poll<Self::Item, Self::Error> { + component_future::poll_future(self, Self::POLL_FNS) + } +} + pub fn router() -> impl gotham::handler::NewHandler { gotham::router::builder::build_simple_router(|route| { route.get("/").to(serve_static("text/html", &INDEX_HTML)); |