xref: /openbmc/telemetry/src/types/collection_time_scope.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 CollectionTimeScope : uint32_t
11 {
12     point,
13     interval,
14     startup
15 };
16 
17 namespace utils
18 {
19 
20 template <>
21 struct EnumTraits<CollectionTimeScope>
22 {
23     static constexpr auto propertyName = ConstexprString{"CollectionTimeScope"};
24 };
25 
26 constexpr std::array<std::pair<std::string_view, CollectionTimeScope>, 3>
27     convDataCollectionTimeScope = {
28         {std::make_pair<std::string_view, CollectionTimeScope>(
29              "xyz.openbmc_project.Telemetry.Report.CollectionTimescope.Point",
30              CollectionTimeScope::point),
31          std::make_pair<std::string_view, CollectionTimeScope>(
32              "xyz.openbmc_project.Telemetry.Report.CollectionTimescope."
33              "Interval",
34              CollectionTimeScope::interval),
35          std::make_pair<std::string_view, CollectionTimeScope>(
36              "xyz.openbmc_project.Telemetry.Report.CollectionTimescope."
37              "StartupInterval",
38              CollectionTimeScope::startup)}};
39 
toCollectionTimeScope(std::underlying_type_t<CollectionTimeScope> value)40 inline CollectionTimeScope toCollectionTimeScope(
41     std::underlying_type_t<CollectionTimeScope> value)
42 {
43     return toEnum<CollectionTimeScope,
44                   minEnumValue(convDataCollectionTimeScope),
45                   maxEnumValue(convDataCollectionTimeScope)>(value);
46 }
47 
toCollectionTimeScope(const std::string & value)48 inline CollectionTimeScope toCollectionTimeScope(const std::string& value)
49 {
50     return toEnum(convDataCollectionTimeScope, value);
51 }
52 
enumToString(CollectionTimeScope value)53 inline std::string enumToString(CollectionTimeScope value)
54 {
55     return std::string(enumToString(convDataCollectionTimeScope, value));
56 }
57 
58 } // namespace utils
59