mars/src/server.rs

67 lines
1.6 KiB
Rust

extern crate colored;
extern crate hyper;
extern crate mars;
use std::thread;
use std::sync::{Mutex, Arc, mpsc};
use colored::*;
use hyper::{Body, Response, Server};
use hyper::service::service_fn_ok;
use hyper::rt::Future;
use mars::GeneralBuilder;
fn main() {
let builder = GeneralBuilder::new();
let (tx, rx) = mpsc::channel();
let tasks = Arc::new(Mutex::new(vec![]));
let clone = tasks.clone();
thread::spawn(move || {
let addr = ([127, 0, 0, 1], 1500).into();
let server = Server::bind(&addr)
.serve(move || {
let clone = clone.clone();
let tx_clone = tx.clone();
let r = service_fn_ok(move |r| {
clone.lock().unwrap().push(String::from(r.uri().path()));
tx_clone.send(()).unwrap();
Response::new(Body::from("Ok"))
});
r
})
.map_err(|e| eprintln!("server error: {}", e));
println!("{}", format!("Mars server listening on {}...", addr).bold().green());
hyper::rt::run(server);
});
for _ in rx {
let mut tasks = tasks.lock().unwrap();
while let Some(path) = tasks.pop() {
println!("{}", format!("---- STARTING BUILD ---- from {}", path).bold().green());
match builder.build(&path) {
Err(_) => {
println!("{}", "--------- FAIL ---------".bold().red());
},
Ok(_) => {
println!("{}", "----- SUCCESSFUL -----".bold().green());
},
};
println!();
}
}
}