//! Defines the HTTP-based UI. These endpoints generally return HTML and SVG. use std::sync::Arc; use futures::{future, Future}; use hyper::{ service::Service, header, Body, Method, StatusCode, Request, Response, }; use ritz::html; use crate::serve_session::ServeSession; const SERVER_VERSION: &str = env!("CARGO_PKG_VERSION"); static HOME_CSS: &str = include_str!("../../assets/index.css"); pub struct InterfaceService { #[allow(unused)] // TODO: Fill out interface service serve_session: Arc, } impl Service for InterfaceService { type ReqBody = Body; type ResBody = Body; type Error = hyper::Error; type Future = Box, Error = Self::Error> + Send>; fn call(&mut self, request: Request) -> Self::Future { let response = match (request.method(), request.uri().path()) { (&Method::GET, "/") => self.handle_home(), (&Method::GET, "/visualize/rbx") => self.handle_visualize_rbx(), (&Method::GET, "/visualize/imfs") => self.handle_visualize_imfs(), _ => Response::builder() .status(StatusCode::NOT_FOUND) .body(Body::empty()) .unwrap(), }; Box::new(future::ok(response)) } } impl InterfaceService { pub fn new(serve_session: Arc) -> InterfaceService { InterfaceService { serve_session, } } fn handle_home(&self) -> Response { let page = html! { "Rojo"

"Rojo Live Sync is up and running!"

"Version " { SERVER_VERSION }

"Rojo Documentation"
}; Response::builder() .header(header::CONTENT_TYPE, "text/html") .body(Body::from(format!("{}", page))) .unwrap() } fn handle_visualize_rbx(&self) -> Response { Response::builder() .header(header::CONTENT_TYPE, "text/plain") .body(Body::from("TODO: /visualize/rbx")) .unwrap() } fn handle_visualize_imfs(&self) -> Response { Response::builder() .header(header::CONTENT_TYPE, "text/plain") .body(Body::from("TODO: /visualize/imfs")) .unwrap() } }