glote 0.6.2

A fast Rust web library
Documentation
// use std::{ sync::{ Arc }, thread, time::Duration };
// use glote::{ Glote, ResponseExt };

// #[test]
// fn test_server_instantiation() {
//     let server = Glote::new();
//     assert!(Arc::strong_count(&server) >= 1);
// }

// use glote::{ Cors, CorsExt, Next, Req, RequestExt, Res, mid, han };

// async fn hello(server: Arc<Glote>) {
//     server.static_path("public").await;
//     let cors = Cors::new(&vec!["127.0.0.1:5000"]);

//     // let cors_clone = Arc::clone(&cors);
//     // server.use_middleware(move |req, res, next| {
//     //     let cors = Arc::clone(&cors);
//     //     async move {
//     //         cors.run_middleware(req, res, next).await;
//     //     }
//     // }).await;

//     // Global middleware logs every request path
//     server.use_middleware(|req, res, next| async move {
//         req.with_write(|req| async move {
//             req.write().await.path = "/hh".into();
//         }).await;
//         next().await;
//     }).await;

//     // // GET route with middleware
//     // server.get_with_middleware(
//     //     "/",
//     //     vec![
//     //         mid!(req, res, next, {
//     //             println!("1. {}", req.read().await.path);
//     //             next().await;
//     //         }),
//     //         mid!(req, res, next, {
//     //             println!("2. Another middleware");
//     //             next().await;
//     //         })
//     //     ],
//     //     han!(req, res, {
//     //         println!("Handler");
//     //         res.status(200).await;
//     //         res.send("okay").await;
//     //     })
//     // ).await;

//     // let yo = mid!(req, res, next, {
//     //     println!("1. {}", req.read().await.path);

//     //     next().await;
//     // });

//     // server.post_with_middleware(
//     //     "/",
//     //     vec![
//     //         yo,
//     //         mid!(req, res, next, {
//     //             println!("2. Another middleware");
//     //             next().await;
//     //         })
//     //     ],
//     //     han!(req, res, {
//     //         println!("Handler");
//     //         res.status(200).await;
//     //         res.send("okay").await;
//     //     })
//     // ).await;

//     // Simple GET with path param and query param
//     server.get("/hello/:name", |req, res| async move {
//         let binding = req.read().await;
//         let name = binding
//             .params("name")
//             .cloned()
//             .unwrap_or_else(|| "stranger".to_string());
//         let q = binding.query("q").cloned().unwrap_or_default();

//         let message = format!("Hello, {}! Query: {}", name, q);
//         res.write().await.send(&message).await;
//     }).await;

//     // POST route echoes request body
//     server.post("/echo", |req, res| async move {
//         let body = req.read().await.body.clone().unwrap_or_default();
//         res.write().await.send(&format!("POST Echo: {}", body)).await;
//     }).await;

//     // PUT route example
//     server.put("/update", |req, res| async move {
//         let body = req.read().await.body.clone().unwrap_or_default();
//         res.write().await.send(&format!("PUT Received: {}", body)).await;
//     }).await;

//     // DELETE route example
//     server.delete("/remove/:id", |req, res| async move {
//         let id = req
//             .read().await
//             .params("id")
//             .cloned()
//             .unwrap_or_else(|| "unknown".to_string());
//         res.write().await.send(&format!("DELETE Requested for ID: {}", id)).await;
//     }).await;

//     server.listen(3000).await.unwrap();
// }
// #[test]
// fn server_test() {
//     let server = Glote::new();
//     server.block_on(async {
//         hello(server.clone()).await;
//     });
// }

// #[test]
// fn test_set_workers() {
//     let mut server = Glote::new();
//     Arc::get_mut(&mut server).unwrap().set_warkers(8);
// }

// #[test]
// fn _test_server_working() {
//     let server = Glote::new();

//     server.block_on(fut)
// let cors = Cors::new(&["http://localhost:4000"]);

// server.use_middleware({
//     let cors = Arc::clone(&cors);
//     move |req, res, next| {
//         cors.run_middleware(req, res, next);
//     }
// });
// }

// async fn run(server: Glote) {
//     server.use_middleware(|req, res, next| async {
//         println!("Global middleware");
//         next();
//     });

//     server.get("/", |_req, res| {
//         std::thread::sleep(std::time::Duration::from_millis(500));
//         res.status(200);
//         res.send("okay");
//     });

//     server.listen(3000).await;
// }

use glote::{ Glote, ResponseExt, han, mid };
use std::sync::Arc;

#[test]
fn main() {
    let server = Glote::new();
    server.block_on(async {
        run_server(server.clone()).await;
    })
}

async fn run_server(server: Arc<Glote>) {
    let logger = mid!(req, res, next, {
        println!("1. {}", req.read().await.path);

        next().await;
    });

    // server.get_with_middleware("/check", vec![logger], |req, res| {
    //     res.send("Checked with middleware").await;
    // }).await;

    server.get_with_middleware("/check", vec![logger], |req, res| async move {
        res.send("Checked with middleware").await;
    }).await;

    server.get("/", |req, res| async move {
        res.send("Hello, Glote!").await;
    }).await;

    server.get(
        "/hello",
        han!(req, res, {
            res.send("GET route").await;
        })
    ).await;

    let _ = server.listen(("0.0.0.0", 8080)).await;
}