xref: /openbmc/telemetry/src/types/report_action.hpp (revision 583ba441654657bb4ba9d051b747144a7258c159)
1 #pragma once
2 
3 #include "utils/conversion.hpp"
4 
5 #include <array>
6 #include <cstdint>
7 #include <string_view>
8 #include <type_traits>
9 
10 enum class ReportAction : uint32_t
11 {
12     emitsReadingsUpdate,
13     logToMetricReportsCollection
14 };
15 
16 namespace utils
17 {
18 
19 template <>
20 struct EnumTraits<ReportAction>
21 {
22     static constexpr auto propertyName = ConstexprString{"ReportAction"};
23 };
24 
25 constexpr std::array<std::pair<std::string_view, ReportAction>, 2>
26     convDataReportAction = {
27         {std::make_pair<std::string_view, ReportAction>(
28              "xyz.openbmc_project.Telemetry.Report."
29              "ReportActions.EmitsReadingsUpdate",
30              ReportAction::emitsReadingsUpdate),
31          std::make_pair<std::string_view, ReportAction>(
32              "xyz.openbmc_project.Telemetry.Report."
33              "ReportActions.LogToMetricReportsCollection",
34              ReportAction::logToMetricReportsCollection)}};
35 
toReportAction(std::underlying_type_t<ReportAction> value)36 inline ReportAction toReportAction(std::underlying_type_t<ReportAction> value)
37 {
38     return toEnum<ReportAction, minEnumValue(convDataReportAction),
39                   maxEnumValue(convDataReportAction)>(value);
40 }
41 
toReportAction(const std::string & value)42 inline ReportAction toReportAction(const std::string& value)
43 {
44     return toEnum(convDataReportAction, value);
45 }
46 
enumToString(ReportAction value)47 inline std::string enumToString(ReportAction value)
48 {
49     return std::string(enumToString(convDataReportAction, value));
50 }
51 
52 } // namespace utils
53