aboutsummaryrefslogtreecommitdiffstats
path: root/teleterm
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-16 11:21:17 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-16 11:21:17 -0500
commitd190bd7354519f655ec37cd6847059557d949302 (patch)
treee65ca92f1725bb6d8bdee88d67c204343dc9c09f /teleterm
parentc3aed08259c794290d8cf21fe0712b36d4c5f523 (diff)
downloadteleterm-d190bd7354519f655ec37cd6847059557d949302.tar.gz
teleterm-d190bd7354519f655ec37cd6847059557d949302.zip
start refactoring into a struct
Diffstat (limited to 'teleterm')
-rw-r--r--teleterm/src/cmd/web.rs8
-rw-r--r--teleterm/src/web.rs43
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));