xref: /openbmc/bmcweb/redfish-core/include/registries_selector.hpp (revision 40e9b92ec19acffb46f83a6e55b18974da5d708e)
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