crow/src/main.rs
2022-07-01 19:27:28 -03:00

44 lines
1.3 KiB
Rust

use std::{sync::Arc, thread};
use crow::*;
use matchit::Router;
fn main() -> anyhow::Result<()> {
let database_context = DatabaseContext::create("./db")?;
let server =
Arc::new(tiny_http::Server::http("localhost:8000").expect("Could not bind localhost:8000"));
let mut guards = Vec::with_capacity(4);
// router.insert("/upload", &routes::upload::upload_route);
// router.insert("/image", &routes::image::image_route);
for _ in 0..4 {
let server = server.clone();
let db = database_context.clone();
let mut router: Router<&dyn Handler> = Router::new();
router.insert("/get/:id", &routes::get::GetHandler)?;
router.insert("/upload", &routes::upload::UploadHandler)?;
router.insert("/image/upload", &routes::image::ImageUploadHandler)?;
router.insert("/image/get/:id/:format", &routes::image::ImageGetHandler)?;
let guard = thread::spawn(move || loop {
let request = server.recv().unwrap();
// i don't like this alloc
let url = request.url().to_owned();
let matched = router.at(&url).unwrap();
matched.value.respond(request, &db, matched.params).unwrap();
});
guards.push(guard);
}
for guard in guards {
guard.join().unwrap();
}
Ok(())
}