1*c1f5ed6fSDhruvaraj Subhashchandran ## This file is a template.  The comment below is emitted
2*c1f5ed6fSDhruvaraj Subhashchandran ## into the rendered file; feel free to edit this file.
3*c1f5ed6fSDhruvaraj Subhashchandran // !!! WARNING: This is a GENERATED Code..Please do NOT Edit !!!
4*c1f5ed6fSDhruvaraj Subhashchandran #include "dump_types.hpp"
5*c1f5ed6fSDhruvaraj Subhashchandran 
6*c1f5ed6fSDhruvaraj Subhashchandran #include <phosphor-logging/elog-errors.hpp>
7*c1f5ed6fSDhruvaraj Subhashchandran #include <phosphor-logging/elog.hpp>
8*c1f5ed6fSDhruvaraj Subhashchandran #include <phosphor-logging/lg2.hpp>
9*c1f5ed6fSDhruvaraj Subhashchandran #include <xyz/openbmc_project/Common/error.hpp>
10*c1f5ed6fSDhruvaraj Subhashchandran 
11*c1f5ed6fSDhruvaraj Subhashchandran namespace phosphor
12*c1f5ed6fSDhruvaraj Subhashchandran {
13*c1f5ed6fSDhruvaraj Subhashchandran namespace dump
14*c1f5ed6fSDhruvaraj Subhashchandran {
15*c1f5ed6fSDhruvaraj Subhashchandran 
16*c1f5ed6fSDhruvaraj Subhashchandran DUMP_TYPE_TABLE dumpTypeTable = {
17*c1f5ed6fSDhruvaraj Subhashchandran % for item in DUMP_TYPE_TABLE:
18*c1f5ed6fSDhruvaraj Subhashchandran   % for key, values in item.items():
19*c1f5ed6fSDhruvaraj Subhashchandran     {"${key}", {DumpTypes::${values[0].upper()}, "${values[1]}"}},
20*c1f5ed6fSDhruvaraj Subhashchandran   % endfor
21*c1f5ed6fSDhruvaraj Subhashchandran % endfor
22*c1f5ed6fSDhruvaraj Subhashchandran };
23*c1f5ed6fSDhruvaraj Subhashchandran 
24*c1f5ed6fSDhruvaraj Subhashchandran DUMP_TYPE_TO_STRING_MAP dumpTypeToStringMap = {
25*c1f5ed6fSDhruvaraj Subhashchandran % for item in DUMP_TYPE_TABLE:
26*c1f5ed6fSDhruvaraj Subhashchandran   % for key, values in item.items():
27*c1f5ed6fSDhruvaraj Subhashchandran     {DumpTypes::${values[0].upper()}, "${values[0]}"},
28*c1f5ed6fSDhruvaraj Subhashchandran   % endfor
29*c1f5ed6fSDhruvaraj Subhashchandran % endfor
30*c1f5ed6fSDhruvaraj Subhashchandran };
31*c1f5ed6fSDhruvaraj Subhashchandran 
32*c1f5ed6fSDhruvaraj Subhashchandran std::optional<std::string> dumpTypeToString(const DumpTypes& dumpType)
33*c1f5ed6fSDhruvaraj Subhashchandran {
34*c1f5ed6fSDhruvaraj Subhashchandran     auto it = dumpTypeToStringMap.find(dumpType);
35*c1f5ed6fSDhruvaraj Subhashchandran     if (it != dumpTypeToStringMap.end())
36*c1f5ed6fSDhruvaraj Subhashchandran     {
37*c1f5ed6fSDhruvaraj Subhashchandran         return it->second;
38*c1f5ed6fSDhruvaraj Subhashchandran     }
39*c1f5ed6fSDhruvaraj Subhashchandran     return std::nullopt;
40*c1f5ed6fSDhruvaraj Subhashchandran }
41*c1f5ed6fSDhruvaraj Subhashchandran 
42*c1f5ed6fSDhruvaraj Subhashchandran std::optional<DumpTypes> stringToDumpType(const std::string& str)
43*c1f5ed6fSDhruvaraj Subhashchandran {
44*c1f5ed6fSDhruvaraj Subhashchandran     auto it = std::ranges::find_if(dumpTypeToStringMap,
45*c1f5ed6fSDhruvaraj Subhashchandran                                    [&str](const auto& pair) {
46*c1f5ed6fSDhruvaraj Subhashchandran         return pair.second == str;
47*c1f5ed6fSDhruvaraj Subhashchandran     });
48*c1f5ed6fSDhruvaraj Subhashchandran 
49*c1f5ed6fSDhruvaraj Subhashchandran     if (it != dumpTypeToStringMap.end())
50*c1f5ed6fSDhruvaraj Subhashchandran     {
51*c1f5ed6fSDhruvaraj Subhashchandran         return it->first;
52*c1f5ed6fSDhruvaraj Subhashchandran     }
53*c1f5ed6fSDhruvaraj Subhashchandran     return std::nullopt;
54*c1f5ed6fSDhruvaraj Subhashchandran }
55*c1f5ed6fSDhruvaraj Subhashchandran 
56*c1f5ed6fSDhruvaraj Subhashchandran DumpTypes validateDumpType(const std::string& type, const std::string& category)
57*c1f5ed6fSDhruvaraj Subhashchandran {
58*c1f5ed6fSDhruvaraj Subhashchandran     using namespace phosphor::logging;
59*c1f5ed6fSDhruvaraj Subhashchandran     using InvalidArgument =
60*c1f5ed6fSDhruvaraj Subhashchandran         sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
61*c1f5ed6fSDhruvaraj Subhashchandran     using Argument = xyz::openbmc_project::Common::InvalidArgument;
62*c1f5ed6fSDhruvaraj Subhashchandran     // Dump type user will be return if type is empty
63*c1f5ed6fSDhruvaraj Subhashchandran     DumpTypes dumpType = DumpTypes::USER;
64*c1f5ed6fSDhruvaraj Subhashchandran     if (type.empty())
65*c1f5ed6fSDhruvaraj Subhashchandran     {
66*c1f5ed6fSDhruvaraj Subhashchandran         return dumpType;
67*c1f5ed6fSDhruvaraj Subhashchandran     }
68*c1f5ed6fSDhruvaraj Subhashchandran 
69*c1f5ed6fSDhruvaraj Subhashchandran     // Find any matching dump collection type for the category
70*c1f5ed6fSDhruvaraj Subhashchandran     auto it = std::find_if(dumpTypeTable.begin(), dumpTypeTable.end(),
71*c1f5ed6fSDhruvaraj Subhashchandran                            [&](const auto& pair) {
72*c1f5ed6fSDhruvaraj Subhashchandran         return pair.first == type && pair.second.second == category;
73*c1f5ed6fSDhruvaraj Subhashchandran     });
74*c1f5ed6fSDhruvaraj Subhashchandran 
75*c1f5ed6fSDhruvaraj Subhashchandran     if (it != dumpTypeTable.end())
76*c1f5ed6fSDhruvaraj Subhashchandran     {
77*c1f5ed6fSDhruvaraj Subhashchandran         dumpType = it->second.first;
78*c1f5ed6fSDhruvaraj Subhashchandran     }
79*c1f5ed6fSDhruvaraj Subhashchandran     else
80*c1f5ed6fSDhruvaraj Subhashchandran     {
81*c1f5ed6fSDhruvaraj Subhashchandran         lg2::error("An invalid dump type: {TYPE} passed", "TYPE", type);
82*c1f5ed6fSDhruvaraj Subhashchandran         elog<InvalidArgument>(Argument::ARGUMENT_NAME("BMC_DUMP_TYPE"),
83*c1f5ed6fSDhruvaraj Subhashchandran                               Argument::ARGUMENT_VALUE(type.c_str()));
84*c1f5ed6fSDhruvaraj Subhashchandran     }
85*c1f5ed6fSDhruvaraj Subhashchandran     return dumpType;
86*c1f5ed6fSDhruvaraj Subhashchandran }
87*c1f5ed6fSDhruvaraj Subhashchandran 
88*c1f5ed6fSDhruvaraj Subhashchandran } // namespace dump
89*c1f5ed6fSDhruvaraj Subhashchandran } // namespace phosphor
90