| #ifndef THIRD_PARTY_GBMCWEB_PLUGINS_MACROS_H_ |
| #define THIRD_PARTY_GBMCWEB_PLUGINS_MACROS_H_ |
| |
| #include <array> |
| #include <cstddef> |
| #include <cstdint> |
| #include <string_view> |
| |
| #include "boost/beast/http/verb.hpp" // NOLINT |
| #include "app_singleton.hpp" |
| #include "privileges.hpp" |
| |
| // 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 |
| |
| #endif // THIRD_PARTY_GBMCWEB_PLUGINS_MACROS_H_ |