| #pragma once | 
 |  | 
 | #include "app.hpp" | 
 | #include "logging.hpp" | 
 | #include "query.hpp" | 
 | #include "registries/privilege_registry.hpp" | 
 | #include "utils/chassis_utils.hpp" | 
 |  | 
 | #include <memory> | 
 | #include <optional> | 
 | #include <string> | 
 |  | 
 | namespace redfish | 
 | { | 
 |  | 
 | inline void doPowerSubsystemCollection( | 
 |     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, | 
 |     const std::string& chassisId, | 
 |     const std::optional<std::string>& validChassisPath) | 
 | { | 
 |     if (!validChassisPath) | 
 |     { | 
 |         messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); | 
 |         return; | 
 |     } | 
 |  | 
 |     asyncResp->res.addHeader( | 
 |         boost::beast::http::field::link, | 
 |         "</redfish/v1/JsonSchemas/PowerSubsystem/PowerSubsystem.json>; rel=describedby"); | 
 |     asyncResp->res.jsonValue["@odata.type"] = | 
 |         "#PowerSubsystem.v1_1_0.PowerSubsystem"; | 
 |     asyncResp->res.jsonValue["Name"] = "Power Subsystem"; | 
 |     asyncResp->res.jsonValue["Id"] = "PowerSubsystem"; | 
 |     asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces( | 
 |         "redfish", "v1", "Chassis", chassisId, "PowerSubsystem"); | 
 |     asyncResp->res.jsonValue["Status"]["State"] = "Enabled"; | 
 |     asyncResp->res.jsonValue["Status"]["Health"] = "OK"; | 
 |     asyncResp->res.jsonValue["PowerSupplies"]["@odata.id"] = | 
 |         crow::utility::urlFromPieces("redfish", "v1", "Chassis", chassisId, | 
 |                                      "PowerSubsystem", "PowerSupplies"); | 
 | } | 
 |  | 
 | inline void handlePowerSubsystemCollectionHead( | 
 |     App& app, const crow::Request& req, | 
 |     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, | 
 |     const std::string& chassisId) | 
 | { | 
 |     if (!redfish::setUpRedfishRoute(app, req, asyncResp)) | 
 |     { | 
 |         return; | 
 |     } | 
 |  | 
 |     auto respHandler = [asyncResp, chassisId]( | 
 |                            const std::optional<std::string>& validChassisPath) { | 
 |         if (!validChassisPath) | 
 |         { | 
 |             messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); | 
 |             return; | 
 |         } | 
 |         asyncResp->res.addHeader( | 
 |             boost::beast::http::field::link, | 
 |             "</redfish/v1/JsonSchemas/PowerSubsystem/PowerSubsystem.json>; rel=describedby"); | 
 |     }; | 
 |     redfish::chassis_utils::getValidChassisPath(asyncResp, chassisId, | 
 |                                                 std::move(respHandler)); | 
 | } | 
 |  | 
 | inline void handlePowerSubsystemCollectionGet( | 
 |     App& app, const crow::Request& req, | 
 |     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, | 
 |     const std::string& chassisId) | 
 | { | 
 |     if (!redfish::setUpRedfishRoute(app, req, asyncResp)) | 
 |     { | 
 |         return; | 
 |     } | 
 |  | 
 |     redfish::chassis_utils::getValidChassisPath( | 
 |         asyncResp, chassisId, | 
 |         std::bind_front(doPowerSubsystemCollection, asyncResp, chassisId)); | 
 | } | 
 |  | 
 | inline void requestRoutesPowerSubsystem(App& app) | 
 | { | 
 |     BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/PowerSubsystem/") | 
 |         .privileges(redfish::privileges::headPowerSubsystem) | 
 |         .methods(boost::beast::http::verb::head)( | 
 |             std::bind_front(handlePowerSubsystemCollectionHead, std::ref(app))); | 
 |  | 
 |     BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/PowerSubsystem/") | 
 |         .privileges(redfish::privileges::getPowerSubsystem) | 
 |         .methods(boost::beast::http::verb::get)( | 
 |             std::bind_front(handlePowerSubsystemCollectionGet, std::ref(app))); | 
 | } | 
 |  | 
 | } // namespace redfish |