1 // SPDX-License-Identifier: Apache-2.0 2 // SPDX-FileCopyrightText: Copyright OpenBMC Authors 3 #pragma once 4 #include "registries.hpp" 5 #include "registries/base_message_registry.hpp" 6 #include "registries/heartbeat_event_message_registry.hpp" 7 #include "registries/openbmc_message_registry.hpp" 8 #include "registries/resource_event_message_registry.hpp" 9 #include "registries/task_event_message_registry.hpp" 10 #include "registries/telemetry_message_registry.hpp" 11 12 #include <optional> 13 #include <span> 14 #include <string_view> 15 16 namespace redfish::registries 17 { 18 struct HeaderAndUrl 19 { 20 const Header& header; 21 const char* url; 22 }; 23 24 inline std::optional<registries::HeaderAndUrl> 25 getRegistryHeaderAndUrlFromPrefix(std::string_view registryName) 26 { 27 if (base::header.registryPrefix == registryName) 28 { 29 return HeaderAndUrl{base::header, base::url}; 30 } 31 if (heartbeat_event::header.registryPrefix == registryName) 32 { 33 return HeaderAndUrl{heartbeat_event::header, heartbeat_event::url}; 34 } 35 if (openbmc::header.registryPrefix == registryName) 36 { 37 return HeaderAndUrl{openbmc::header, openbmc::url}; 38 } 39 if (resource_event::header.registryPrefix == registryName) 40 { 41 return HeaderAndUrl{resource_event::header, resource_event::url}; 42 } 43 if (task_event::header.registryPrefix == registryName) 44 { 45 return HeaderAndUrl{task_event::header, task_event::url}; 46 } 47 if (telemetry::header.registryPrefix == registryName) 48 { 49 return HeaderAndUrl{telemetry::header, telemetry::url}; 50 } 51 return std::nullopt; 52 } 53 54 inline std::span<const MessageEntry> 55 getRegistryFromPrefix(std::string_view registryName) 56 { 57 if (base::header.registryPrefix == registryName) 58 { 59 return {base::registry}; 60 } 61 if (heartbeat_event::header.registryPrefix == registryName) 62 { 63 return {heartbeat_event::registry}; 64 } 65 if (openbmc::header.registryPrefix == registryName) 66 { 67 return {openbmc::registry}; 68 } 69 if (resource_event::header.registryPrefix == registryName) 70 { 71 return {resource_event::registry}; 72 } 73 if (task_event::header.registryPrefix == registryName) 74 { 75 return {task_event::registry}; 76 } 77 if (telemetry::header.registryPrefix == registryName) 78 { 79 return {telemetry::registry}; 80 } 81 return {openbmc::registry}; 82 } 83 } // namespace redfish::registries 84