]> piware.de Git - learn-rust.git/blobdiff - warp-server/src/main.rs
warp-server: Add route for serving static directory
[learn-rust.git] / warp-server / src / main.rs
index fe36ca7faf989572f7eb765e64a4e8497fde8f97..06b289af1405e0ed5be440a54a126134aea6bd0d 100644 (file)
@@ -71,9 +71,13 @@ pub fn api() -> impl Filter<Extract = impl warp::Reply, Error = warp::Rejection>
         .and(warp::ws())
         .map(|ws: warp::ws::Ws| { ws.on_upgrade(ws_rev_connected) });
 
+    let static_dir = warp::path("dir")
+        .and(warp::fs::dir("../static"));
+
     hello
         .or(ws_echo)
         .or(ws_rev)
+        .or(static_dir)
         .with(warp::log("warp-server"))
 }
 
@@ -146,4 +150,30 @@ mod tests {
         client.send(warp::ws::Message::close()).await;
         client.recv_closed().await.unwrap();
     }
+
+    #[tokio::test]
+    async fn test_static_dir() {
+        let res = warp::test::request()
+            .path("/dir/plain.txt")
+            .reply(&super::api())
+            .await;
+        assert_eq!(res.status(), 200);
+        assert_eq!(res.body(), "Hello world! This is uncompressed text.\n");
+
+        // subdir
+        let res = warp::test::request()
+            .path("/dir/dir1/optzip.txt")
+            .reply(&super::api())
+            .await;
+        assert_eq!(res.status(), 200);
+        assert_eq!(res.body(), "This file is available uncompressed or compressed\n\
+                                AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n");
+
+        // fs::dir does not support transparent decompression
+        let res = warp::test::request()
+            .path("/dir/onlycompressed.txt")
+            .reply(&super::api())
+            .await;
+        assert_eq!(res.status(), 404);
+    }
 }