| #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_ |