#[macro_use]
extern crate log;
extern crate tempfile;
extern crate futures;
extern crate futures_cpupool;
extern crate hyper;
extern crate pretty_env_logger;
extern crate reproto_server;
extern crate reproto_repository;
use futures_cpupool::CpuPool;
use hyper::server::Http;
use reproto_repository::objects_from_file;
use reproto_server::errors::*;
use reproto_server::reproto_service;
use std::path::Path;
use std::sync::{Arc, Mutex};
fn entry() -> Result<()> {
pretty_env_logger::init()?;
let addr = "127.0.0.1:1234".parse()?;
let path = Path::new("./objects");
let max_file_size = 10000000;
let pool = Arc::new(CpuPool::new_num_cpus());
let setup_pool = pool.clone();
let objects = Arc::new(Mutex::new(objects_from_file(path)?));
let setup = move || {
Ok(reproto_service::ReprotoService {
max_file_size: max_file_size,
pool: setup_pool.clone(),
objects: objects.clone(),
})
};
let server = Http::new().bind(&addr, setup)?;
info!("Listening on http://{}", server.local_addr()?);
server.run()?;
Ok(())
}
fn main() {
if let Err(e) = entry() {
error!("{}", e);
for e in e.iter().skip(1) {
error!("caused by: {}", e);
}
if let Some(backtrace) = e.backtrace() {
error!("{:?}", backtrace);
}
}
info!("Shutting down");
}