2022-03-18 10:29:38 +00:00
|
|
|
mod db_handler;
|
2022-03-16 03:26:18 +00:00
|
|
|
mod json_handlers;
|
|
|
|
|
2022-03-18 10:29:38 +00:00
|
|
|
const SQLITE_DB_PATH: &str = "./fourLineDropper.db";
|
|
|
|
|
|
|
|
use std::sync::mpsc::{sync_channel, SyncSender};
|
|
|
|
|
|
|
|
use db_handler::start_db_handler_thread;
|
2022-03-16 04:10:21 +00:00
|
|
|
use warp::{Filter, Rejection};
|
2022-03-16 03:26:18 +00:00
|
|
|
|
|
|
|
#[tokio::main]
|
|
|
|
async fn main() {
|
2022-03-18 10:29:38 +00:00
|
|
|
let (db_tx, db_rx) = sync_channel::<SyncSender<u32>>(32);
|
|
|
|
let db_tx_clone = db_tx.clone();
|
|
|
|
|
|
|
|
start_db_handler_thread(db_rx, SQLITE_DB_PATH.into());
|
|
|
|
|
2022-03-16 03:26:18 +00:00
|
|
|
let route = warp::body::content_length_limit(1024 * 32)
|
2022-03-16 04:09:07 +00:00
|
|
|
.and(warp::body::bytes())
|
2022-03-18 10:29:38 +00:00
|
|
|
.and_then(move |bytes: bytes::Bytes| {
|
|
|
|
let db_tx_clone = db_tx_clone.clone();
|
|
|
|
async move {
|
|
|
|
let body_str_result = std::str::from_utf8(bytes.as_ref());
|
|
|
|
if let Ok(body_str) = body_str_result {
|
|
|
|
let json_result = serde_json::from_str(body_str);
|
|
|
|
if let Ok(json_value) = json_result {
|
|
|
|
Ok(json_handlers::handle_json(json_value, db_tx_clone)
|
|
|
|
.unwrap_or_else(|e| e))
|
|
|
|
} else {
|
|
|
|
Ok(String::from("{\"type\": \"invalid_syntax\"}"))
|
|
|
|
}
|
2022-03-16 04:09:07 +00:00
|
|
|
} else {
|
2022-03-18 10:29:38 +00:00
|
|
|
Ok::<String, Rejection>(String::from("{\"type\": \"invalid_syntax\"}"))
|
2022-03-16 04:09:07 +00:00
|
|
|
}
|
|
|
|
}
|
2022-03-16 03:26:18 +00:00
|
|
|
});
|
|
|
|
|
2022-03-16 03:31:18 +00:00
|
|
|
warp::serve(route).run(([0, 0, 0, 0], 1237)).await;
|
2022-03-14 05:33:51 +00:00
|
|
|
}
|