use rocket; use rocket::State; use rocket::response::Content; use rocket::http::ContentType; use rocket_contrib::Json; use language::{ProgrammingLanguageInterface, EvalOptions}; use WEBFILES; use ::PLIGenerator; #[get("/")] fn index() -> Content { let path = "static/index.html"; let html_contents = String::from_utf8(WEBFILES.get(path).unwrap().into_owned()).unwrap(); Content(ContentType::HTML, html_contents) } #[get("/bundle.js")] fn js_bundle() -> Content { let path = "static/bundle.js"; let js_contents = String::from_utf8(WEBFILES.get(path).unwrap().into_owned()).unwrap(); Content(ContentType::JavaScript, js_contents) } #[derive(Debug, Serialize, Deserialize)] struct Input { source: String, } #[derive(Serialize, Deserialize)] struct Output { text: String, } #[post("/input", format = "application/json", data = "")] fn interpreter_input(input: Json, generators: State>) -> Json { let schala_gen = generators.get(0).unwrap(); let mut schala: Box = schala_gen(); let code_output = schala.evaluate_in_repl(&input.source, &EvalOptions::default()); Json(Output { text: code_output.to_string() }) } pub fn web_main(language_generators: Vec) { rocket::ignite().manage(language_generators).mount("/", routes![index, js_bundle, interpreter_input]).launch(); }