xref: /openbmc/bmcweb/features/redfish/include/registries_selector.hpp (revision 40e9b92ec19acffb46f83a6e55b18974da5d708e)
1*40e9b92eSEd Tanous // SPDX-License-Identifier: Apache-2.0
2*40e9b92eSEd Tanous // SPDX-FileCopyrightText: Copyright OpenBMC Authors
38dab0f58SEd Tanous #pragma once
4f7a26073SMyung Bae #include "registries.hpp"
58dab0f58SEd Tanous #include "registries/base_message_registry.hpp"
6fb546105SMyung Bae #include "registries/heartbeat_event_message_registry.hpp"
78dab0f58SEd Tanous #include "registries/openbmc_message_registry.hpp"
8f7a26073SMyung Bae #include "registries/resource_event_message_registry.hpp"
98dab0f58SEd Tanous #include "registries/task_event_message_registry.hpp"
10f7a26073SMyung Bae #include "registries/telemetry_message_registry.hpp"
118dab0f58SEd Tanous 
12f7a26073SMyung Bae #include <optional>
138dab0f58SEd Tanous #include <span>
148dab0f58SEd Tanous #include <string_view>
158dab0f58SEd Tanous 
168dab0f58SEd Tanous namespace redfish::registries
178dab0f58SEd Tanous {
18f7a26073SMyung Bae struct HeaderAndUrl
198dab0f58SEd Tanous {
20f7a26073SMyung Bae     const Header& header;
21f7a26073SMyung Bae     const char* url;
22f7a26073SMyung Bae };
23f7a26073SMyung Bae 
24f7a26073SMyung Bae inline std::optional<registries::HeaderAndUrl>
25f7a26073SMyung Bae     getRegistryHeaderAndUrlFromPrefix(std::string_view registryName)
268dab0f58SEd Tanous {
27f7a26073SMyung Bae     if (base::header.registryPrefix == registryName)
28f7a26073SMyung Bae     {
29f7a26073SMyung Bae         return HeaderAndUrl{base::header, base::url};
30f7a26073SMyung Bae     }
31f7a26073SMyung Bae     if (heartbeat_event::header.registryPrefix == registryName)
32f7a26073SMyung Bae     {
33f7a26073SMyung Bae         return HeaderAndUrl{heartbeat_event::header, heartbeat_event::url};
348dab0f58SEd Tanous     }
358dab0f58SEd Tanous     if (openbmc::header.registryPrefix == registryName)
368dab0f58SEd Tanous     {
37f7a26073SMyung Bae         return HeaderAndUrl{openbmc::header, openbmc::url};
38f7a26073SMyung Bae     }
39f7a26073SMyung Bae     if (resource_event::header.registryPrefix == registryName)
40f7a26073SMyung Bae     {
41f7a26073SMyung Bae         return HeaderAndUrl{resource_event::header, resource_event::url};
42f7a26073SMyung Bae     }
43f7a26073SMyung Bae     if (task_event::header.registryPrefix == registryName)
44f7a26073SMyung Bae     {
45f7a26073SMyung Bae         return HeaderAndUrl{task_event::header, task_event::url};
46f7a26073SMyung Bae     }
47f7a26073SMyung Bae     if (telemetry::header.registryPrefix == registryName)
48f7a26073SMyung Bae     {
49f7a26073SMyung Bae         return HeaderAndUrl{telemetry::header, telemetry::url};
50f7a26073SMyung Bae     }
51f7a26073SMyung Bae     return std::nullopt;
52f7a26073SMyung Bae }
53f7a26073SMyung Bae 
54f7a26073SMyung Bae inline std::span<const MessageEntry>
55f7a26073SMyung Bae     getRegistryFromPrefix(std::string_view registryName)
56f7a26073SMyung Bae {
57f7a26073SMyung Bae     if (base::header.registryPrefix == registryName)
58f7a26073SMyung Bae     {
59f7a26073SMyung Bae         return {base::registry};
608dab0f58SEd Tanous     }
61fb546105SMyung Bae     if (heartbeat_event::header.registryPrefix == registryName)
62fb546105SMyung Bae     {
63fb546105SMyung Bae         return {heartbeat_event::registry};
64fb546105SMyung Bae     }
65f7a26073SMyung Bae     if (openbmc::header.registryPrefix == registryName)
668dab0f58SEd Tanous     {
67f7a26073SMyung Bae         return {openbmc::registry};
68f7a26073SMyung Bae     }
69f7a26073SMyung Bae     if (resource_event::header.registryPrefix == registryName)
70f7a26073SMyung Bae     {
71f7a26073SMyung Bae         return {resource_event::registry};
72f7a26073SMyung Bae     }
73f7a26073SMyung Bae     if (task_event::header.registryPrefix == registryName)
74f7a26073SMyung Bae     {
75f7a26073SMyung Bae         return {task_event::registry};
76f7a26073SMyung Bae     }
77f7a26073SMyung Bae     if (telemetry::header.registryPrefix == registryName)
78f7a26073SMyung Bae     {
79f7a26073SMyung Bae         return {telemetry::registry};
808dab0f58SEd Tanous     }
818dab0f58SEd Tanous     return {openbmc::registry};
828dab0f58SEd Tanous }
838dab0f58SEd Tanous } // namespace redfish::registries
84