SNode.C
Loading...
Searching...
No Matches
Router.h
Go to the documentation of this file.
1/*
2 * SNode.C - a slim toolkit for network communication
3 * Copyright (C) Volker Christian <me@vchrist.at>
4 * 2020, 2021, 2022, 2023, 2024, 2025
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published
8 * by the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef EXPRESS_ROUTER_H
21#define EXPRESS_ROUTER_H
22
23#include "express/Next.h" // IWYU pragma: export
24#include "express/Request.h" // IWYU pragma: export
25#include "express/Response.h" // IWYU pragma: export
26#include "express/RootRoute.h" // IWYU pragma: export
27
28namespace express {
29 class Router;
30}
31
32#ifndef DOXYGEN_SHOULD_SKIP_THIS
33
34#include <functional> // IWYU pragma: export
35#include <memory>
36#include <string>
37
38#endif /* DOXYGEN_SHOULD_SKIP_THIS */
39
40#define MIDDLEWARE(req, res, next)
41 ([[maybe_unused]] const std::shared_ptr<express::Request>& req,
42 [[maybe_unused]] const std::shared_ptr<express::Response>& res,
43 [[maybe_unused]] express::Next&(next))
44
45#define APPLICATION(req, res)
46 ([[maybe_unused]] const std::shared_ptr<express::Request>& req, [[maybe_unused]] const std::shared_ptr<express::Response>& res)
47
48#define DECLARE_ROUTER_REQUESTMETHOD(METHOD)
49 Route& METHOD(const Router& router) const;
50 Route& METHOD(const std::string& relativeMountPath, const Router& router) const;
51 Route& METHOD(const std::function<void(const std::shared_ptr<Request>&, const std::shared_ptr<Response>&)>& lambda) const;
52 Route& METHOD(const std::string& relativeMountPath,
53 const std::function<void(const std::shared_ptr<Request>&, const std::shared_ptr<Response>&)>& lambda) const;
54 Route& METHOD(const std::function<void(const std::shared_ptr<Request>&, const std::shared_ptr<Response>&, Next&)>& lambda) const;
55 Route& METHOD(const std::string& relativeMountPath,
56 const std::function<void(const std::shared_ptr<Request>&, const std::shared_ptr<Response>&, Next&)>& lambda) const;
57
58 template <typename... Lambdas>
59 Route& METHOD(const std::function<void(const std::shared_ptr<Request>&, const std::shared_ptr<Response>&)>& lambda,
60 Lambdas... lambdas) const;
61 template <typename... Lambdas>
62 Route& METHOD(const std::string& relativeMountPath,
63 const std::function<void(const std::shared_ptr<Request>&, const std::shared_ptr<Response>&)>& lambda,
64 Lambdas... lambdas) const;
65 template <typename... Lambdas>
66 Route& METHOD(const std::function<void(const std::shared_ptr<Request>&, const std::shared_ptr<Response>&, Next&)>& lambda,
67 Lambdas... lambdas) const;
68 template <typename... Lambdas>
69 Route& METHOD(const std::string& relativeMountPath,
70 const std::function<void(const std::shared_ptr<Request>&, const std::shared_ptr<Response>&, Next&)>& lambda,
71 Lambdas... lambdas) const;
72
73namespace express {
74
100
101} // namespace express
102
103#include "express/Router.hpp" // IWYU pragma: export
104
105#endif // EXPRESS_ROUTER_H
#define DECLARE_ROUTER_REQUESTMETHOD(METHOD)
Definition Router.h:48
#define APPLICATION(req, res)
Definition Router.h:45
Route & head(const Router &router) const
Definition Router.cpp:70
Route & all(const Router &router) const
Definition Router.cpp:61
Route & options(const Router &router) const
Definition Router.cpp:67
Route & connect(const Router &router) const
Definition Router.cpp:66
Route & post(const Router &router) const
Definition Router.cpp:64
Route & del(const Router &router) const
Definition Router.cpp:65
Router(const Router &)=default
Route & use(const Router &router) const
Definition Router.cpp:60
Route & get(const Router &router) const
Definition Router.cpp:62
Route & trace(const Router &router) const
Definition Router.cpp:68
Route & patch(const Router &router) const
Definition Router.cpp:69
void laxRouting(bool strict=false)
Definition Router.cpp:56
Route & put(const Router &router) const
Definition Router.cpp:63
std::shared_ptr< RootRoute > rootRoute
Definition Router.h:95
WebAppT(const std::string &name, const Router &router)
Definition WebAppT.h:58
WebAppT(const std::string &name)
Definition WebAppT.h:54
static void free()
Definition WebApp.cpp:50
static void init(int argc, char *argv[])
Definition WebApp.cpp:34
static void stop()
Definition WebApp.cpp:42
static core::TickStatus tick(const utils::Timeval &timeOut=0)
Definition WebApp.cpp:46
static core::State state()
Definition WebApp.cpp:54
static int start(const utils::Timeval &timeOut={LONG_MAX, 0})
Definition WebApp.cpp:38
WebApp(const Router &router)
Definition WebApp.cpp:30
int main(int argc, char *argv[])
Definition Config.h:37