aboutsummaryrefslogtreecommitdiffstats
path: root/adenosine-pds/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'adenosine-pds/src/lib.rs')
-rw-r--r--adenosine-pds/src/lib.rs65
1 files changed, 29 insertions, 36 deletions
diff --git a/adenosine-pds/src/lib.rs b/adenosine-pds/src/lib.rs
index bb34c80..f321d3f 100644
--- a/adenosine-pds/src/lib.rs
+++ b/adenosine-pds/src/lib.rs
@@ -1,42 +1,35 @@
use anyhow::Result;
-use log::{self, debug};
-use warp::Filter;
-use warp::reply::Response;
-use std::collections::HashMap;
+use log::{info, error};
+use rouille::{Request, Response, router};
-pub async fn run_server() -> Result<()> {
+pub fn run_server() -> Result<()> {
- // GET /
- let homepage = warp::path::end().map(|| "Not much to see here yet!");
+ // TODO: log access requests
+ // TODO: some static files? https://github.com/tomaka/rouille/blob/master/examples/static-files.rs
- // GET /xrpc/some.method w/ query params
- let xrpc_some_get = warp::get()
- .and(warp::path!("xrpc" / "some.method"))
- .and(warp::query::<HashMap<String, String>>())
- .map(|query_params: HashMap<String, String>| {
- println!("query params: {:?}", query_params);
- // return query params as a JSON map object
- warp::reply::json(&query_params)
- });
-
- // POST /xrpc/other.method w/ query params
- let xrpc_other_post = warp::post()
- .and(warp::path!("xrpc" / "other.method"))
- .and(warp::query::<HashMap<String, String>>())
- .and(warp::body::json())
- .map(|query_params: HashMap<String, String>, body_val: serde_json::Value| {
- println!("query params: {:?}", query_params);
- println!("body JSON: {}", body_val);
- // echo it back
- warp::reply::json(&body_val)
- });
-
- let routes = homepage.or(xrpc_some_get).or(xrpc_other_post).with(warp::log("adenosine-pds"));
- warp::serve(routes)
- .run(([127, 0, 0, 1], 3030))
- .await;
- Ok(())
+ let log_ok = |req: &Request, resp: &Response, elap: std::time::Duration| {
+ info!("{} {} ({:?})", req.method(), req.raw_url(), elap);
+ };
+ let log_err = |req: &Request, elap: std::time::Duration| {
+ error!("HTTP handler panicked: {} {} ({:?})", req.method(), req.raw_url(), elap);
+ };
+ rouille::start_server("localhost:3030", move |request| {
+ rouille::log_custom(request, log_ok, log_err, || {
+ router!(request,
+ (GET) ["/"] => {
+ Response::text("Not much to see here yet!")
+ },
+ (GET) ["/xrpc/some.method"] => {
+ Response::text("didn't get a thing")
+ // TODO: reply with query params as a JSON body
+ },
+ (POST) ["/xrpc/other.method"] => {
+ Response::text("didn't get other thing")
+ // TODO: parse and echo back JSON body
+ },
+ _ => rouille::Response::empty_404()
+ )
+ })
+ });
}
-
-// TODO: tokio::task::spawn_blocking