From 7cab547f39513ac37c74b2a6f8fc18c4970de23a Mon Sep 17 00:00:00 2001 From: jadit19 Date: Thu, 5 Sep 2024 22:56:45 +0530 Subject: [PATCH] use smart pointers for middlewares --- example/main.cpp | 24 ++++++++++++++---------- include/expresso/core/router.h | 4 ++-- src/core/router.cpp | 8 +++++--- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/example/main.cpp b/example/main.cpp index e655b13..6755219 100644 --- a/example/main.cpp +++ b/example/main.cpp @@ -8,6 +8,7 @@ // Personally, I don't encourange using namespaces, but, I left it here just so // that the code could be more readable ¯\_(ツ)_/¯ +using namespace std; using namespace expresso::core; using namespace expresso::enums; using namespace expresso::middleware; @@ -66,18 +67,20 @@ int main(int argc, char **argv) { Server app = Server(); // CORS middleware - Cors cors; - cors.allowOrigin("*"); - cors.allowCredentials(true); - app.use(&cors); + unique_ptr cors = make_unique(); + cors->allowOrigin("*"); + cors->allowCredentials(true); + app.use(move(cors)); // Cookie Parser - CookieParser cookieParser; - app.use(&cookieParser); + unique_ptr cookieParser = + make_unique(); + app.use(move(cookieParser)); // Static serve middleware - StaticServe staticServe("../assets"); - app.use(&staticServe); + unique_ptr staticServe = + make_unique("../assets"); + app.use(move(staticServe)); // Route handling like normal app.get("/health", [](Request &req, Response &res) { @@ -90,9 +93,10 @@ int main(int argc, char **argv) { app.use("/about", &router); // Listing directories - StaticServe pictureServe("../assets/github", true); + unique_ptr pictureServe = + make_unique("../assets/github", true); Router pictureRouter; - pictureRouter.use(&pictureServe); + pictureRouter.use(move(pictureServe)); app.use("/pictures", &pictureRouter); // Sending multiple files as single zip diff --git a/include/expresso/core/router.h b/include/expresso/core/router.h index bfdbb6e..ee212de 100644 --- a/include/expresso/core/router.h +++ b/include/expresso/core/router.h @@ -22,7 +22,7 @@ class Router { Router *paramRouter; std::string paramRouterParam; - std::vector middlewares; + std::vector> middlewares; bool handleMiddlewares(Request &request, Response &response); @@ -44,7 +44,7 @@ class Router { void (*handler)(Request &request, Response &response)); void use(std::string path, Router *router); - void use(expresso::middleware::Middleware *middleware); + void use(std::unique_ptr middleware); void handleRequest(Request &request, Response &response); }; diff --git a/src/core/router.cpp b/src/core/router.cpp index 1ead698..04d785b 100644 --- a/src/core/router.cpp +++ b/src/core/router.cpp @@ -122,8 +122,9 @@ void expresso::core::Router::use(std::string path, Router *router) { return; } -void expresso::core::Router::use(expresso::middleware::Middleware *middleware) { - this->middlewares.push_back(middleware); +void expresso::core::Router::use( + std::unique_ptr middleware) { + this->middlewares.push_back(std::move(middleware)); return; } @@ -202,7 +203,8 @@ void expresso::core::Router::handleRequest(Request &request, bool expresso::core::Router::handleMiddlewares(Request &request, Response &response) { - for (expresso::middleware::Middleware *middleware : this->middlewares) { + for (const std::unique_ptr &middleware : + this->middlewares) { if (!middleware->use(request, response)) { response.end(); return false;