| #include "app_singleton.hpp" |
| #include "async_resp.hpp" |
| #include "http_request.hpp" |
| #include "privileges.hpp" |
| #include "utility.hpp" |
| |
| #include <boost/beast/http/verb.hpp> |
| |
| #include <array> |
| #include <string_view> |
| |
| // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) |
| #define REDFISH_HANDLER_ADD(url, verb, privileges, func) \ |
| plugins::addRedfishHandler<crow::black_magic::getParameterTag(url)>( \ |
| url, verb, privileges, func) |
| |
| // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) |
| #define REDFISH_HANDLER_REPLACE(url, verb, func) \ |
| plugins::replaceRedfishHandler<crow::black_magic::getParameterTag(url)>( \ |
| url, verb, func) |
| |
| // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) |
| #define REDFISH_HANDLER_REMOVE(url, verb) \ |
| plugins::removeRedfishHandler<crow::black_magic::getParameterTag(url)>( \ |
| url, verb); |
| |
| // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) |
| #define REDFISH_HANDLER_APPEND(url, verb, func) \ |
| plugins::appendRedfishHandler<crow::black_magic::getParameterTag(url)>( \ |
| url, verb, func); |
| |
| namespace plugins |
| { |
| template <uint64_t tag, typename RedfishHandler, size_t N> |
| void addRedfishHandler(std::string_view url, boost::beast::http::verb verb, |
| const std::array<redfish::Privileges, N>& p, |
| RedfishHandler&& func) |
| { |
| crow::globalBmcWebApp->addHandler<tag>(url, verb, p, func); |
| } |
| |
| template <uint64_t tag, typename RedfishHandler> |
| void replaceRedfishHandler(std::string_view url, boost::beast::http::verb verb, |
| RedfishHandler&& func) |
| { |
| crow::globalBmcWebApp->replaceHandler<tag>(url, verb, func); |
| } |
| |
| template <uint64_t tag> |
| void removeRedfishHandler(std::string_view url, boost::beast::http::verb verb) |
| { |
| crow::globalBmcWebApp->removeHandler<tag>(url, verb); |
| } |
| |
| // For a specific route, appending more than one async callbacks should be rarely |
| // used. |
| // When multiple callbacks are appended. The order is LIFO: the last appended handler |
| // will be executed first. |
| template <uint64_t tag, typename RedfishHandler> |
| void appendRedfishHandler(std::string_view url, boost::beast::http::verb verb, |
| RedfishHandler&& func) |
| { |
| crow::globalBmcWebApp->appendHandler<tag>(url, verb, func); |
| } |
| |
| } // namespace plugins |