1c1f5ed6fSDhruvaraj Subhashchandran ## This file is a template.The comment below is emitted
2c1f5ed6fSDhruvaraj Subhashchandran ## into the rendered file; feel free to edit this file.
3c1f5ed6fSDhruvaraj Subhashchandran //  !!! WARNING: This is a GENERATED Code..Please do NOT Edit !!!
4c1f5ed6fSDhruvaraj Subhashchandran #include "dump_types.hpp"
5c1f5ed6fSDhruvaraj Subhashchandran 
6c1f5ed6fSDhruvaraj Subhashchandran #include <phosphor-logging/elog-errors.hpp>
7c1f5ed6fSDhruvaraj Subhashchandran #include <phosphor-logging/elog.hpp>
8c1f5ed6fSDhruvaraj Subhashchandran #include <phosphor-logging/lg2.hpp>
9c1f5ed6fSDhruvaraj Subhashchandran #include <xyz/openbmc_project/Common/error.hpp>
10c1f5ed6fSDhruvaraj Subhashchandran 
11c1f5ed6fSDhruvaraj Subhashchandran namespace phosphor
12c1f5ed6fSDhruvaraj Subhashchandran {
13c1f5ed6fSDhruvaraj Subhashchandran namespace dump
14c1f5ed6fSDhruvaraj Subhashchandran {
15c1f5ed6fSDhruvaraj Subhashchandran 
16c1f5ed6fSDhruvaraj Subhashchandran DUMP_TYPE_TABLE dumpTypeTable = {
17c1f5ed6fSDhruvaraj Subhashchandran % for item in DUMP_TYPE_TABLE:
18c1f5ed6fSDhruvaraj Subhashchandran   % for key, values in item.items():
19c1f5ed6fSDhruvaraj Subhashchandran     {"${key}", {DumpTypes::${values[0].upper()}, "${values[1]}"}},
20c1f5ed6fSDhruvaraj Subhashchandran   % endfor
21c1f5ed6fSDhruvaraj Subhashchandran % endfor
22c1f5ed6fSDhruvaraj Subhashchandran };
23c1f5ed6fSDhruvaraj Subhashchandran 
24*aa0937f9SDhruvaraj Subhashchandran <%
25*aa0937f9SDhruvaraj Subhashchandran map_keys = set()
26*aa0937f9SDhruvaraj Subhashchandran %>
27c1f5ed6fSDhruvaraj Subhashchandran DUMP_TYPE_TO_STRING_MAP dumpTypeToStringMap = {
28c1f5ed6fSDhruvaraj Subhashchandran % for item in DUMP_TYPE_TABLE:
29c1f5ed6fSDhruvaraj Subhashchandran   % for key, values in item.items():
30*aa0937f9SDhruvaraj Subhashchandran     % if values[0].upper() not in map_keys:
31c1f5ed6fSDhruvaraj Subhashchandran         {DumpTypes::${values[0].upper()}, "${values[0]}"},
32*aa0937f9SDhruvaraj Subhashchandran         <% map_keys.add(values[0].upper()) %>
33*aa0937f9SDhruvaraj Subhashchandran     % endif
34c1f5ed6fSDhruvaraj Subhashchandran   % endfor
35c1f5ed6fSDhruvaraj Subhashchandran % endfor
36*aa0937f9SDhruvaraj Subhashchandran % for key, values in ERROR_TYPE_DICT.items():
37*aa0937f9SDhruvaraj Subhashchandran     % if key.upper() not in map_keys:
38*aa0937f9SDhruvaraj Subhashchandran         {DumpTypes::${key.upper()}, "${key}"},
39*aa0937f9SDhruvaraj Subhashchandran         <% map_keys.add(key.upper()) %>
40*aa0937f9SDhruvaraj Subhashchandran     % endif
41*aa0937f9SDhruvaraj Subhashchandran % endfor
42*aa0937f9SDhruvaraj Subhashchandran };
43*aa0937f9SDhruvaraj Subhashchandran 
44*aa0937f9SDhruvaraj Subhashchandran const ErrorMap errorMap = {
45*aa0937f9SDhruvaraj Subhashchandran % for key, errors in ERROR_TYPE_DICT.items():
46*aa0937f9SDhruvaraj Subhashchandran     {"${key}", {
47*aa0937f9SDhruvaraj Subhashchandran     % for error in errors:
48*aa0937f9SDhruvaraj Subhashchandran         "${error}",
49*aa0937f9SDhruvaraj Subhashchandran     % endfor
50*aa0937f9SDhruvaraj Subhashchandran     }},
51*aa0937f9SDhruvaraj Subhashchandran % endfor
52c1f5ed6fSDhruvaraj Subhashchandran };
53c1f5ed6fSDhruvaraj Subhashchandran 
dumpTypeToString(const DumpTypes & dumpType)54c1f5ed6fSDhruvaraj Subhashchandran std::optional<std::string> dumpTypeToString(const DumpTypes& dumpType)
55c1f5ed6fSDhruvaraj Subhashchandran {
56c1f5ed6fSDhruvaraj Subhashchandran     auto it = dumpTypeToStringMap.find(dumpType);
57c1f5ed6fSDhruvaraj Subhashchandran     if (it != dumpTypeToStringMap.end())
58c1f5ed6fSDhruvaraj Subhashchandran     {
59c1f5ed6fSDhruvaraj Subhashchandran         return it->second;
60c1f5ed6fSDhruvaraj Subhashchandran     }
61c1f5ed6fSDhruvaraj Subhashchandran     return std::nullopt;
62c1f5ed6fSDhruvaraj Subhashchandran }
63c1f5ed6fSDhruvaraj Subhashchandran 
stringToDumpType(const std::string & str)64c1f5ed6fSDhruvaraj Subhashchandran std::optional<DumpTypes> stringToDumpType(const std::string& str)
65c1f5ed6fSDhruvaraj Subhashchandran {
66c1f5ed6fSDhruvaraj Subhashchandran     auto it = std::ranges::find_if(dumpTypeToStringMap,
67c1f5ed6fSDhruvaraj Subhashchandran                                    [&str](const auto& pair) {
68c1f5ed6fSDhruvaraj Subhashchandran         return pair.second == str;
69c1f5ed6fSDhruvaraj Subhashchandran     });
70c1f5ed6fSDhruvaraj Subhashchandran 
71c1f5ed6fSDhruvaraj Subhashchandran     if (it != dumpTypeToStringMap.end())
72c1f5ed6fSDhruvaraj Subhashchandran     {
73c1f5ed6fSDhruvaraj Subhashchandran         return it->first;
74c1f5ed6fSDhruvaraj Subhashchandran     }
75c1f5ed6fSDhruvaraj Subhashchandran     return std::nullopt;
76c1f5ed6fSDhruvaraj Subhashchandran }
77c1f5ed6fSDhruvaraj Subhashchandran 
validateDumpType(const std::string & type,const std::string & category)78c1f5ed6fSDhruvaraj Subhashchandran DumpTypes validateDumpType(const std::string& type, const std::string& category)
79c1f5ed6fSDhruvaraj Subhashchandran {
80c1f5ed6fSDhruvaraj Subhashchandran     using namespace phosphor::logging;
81c1f5ed6fSDhruvaraj Subhashchandran     using InvalidArgument =
82c1f5ed6fSDhruvaraj Subhashchandran         sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
83c1f5ed6fSDhruvaraj Subhashchandran     using Argument = xyz::openbmc_project::Common::InvalidArgument;
84c1f5ed6fSDhruvaraj Subhashchandran     // Dump type user will be return if type is empty
85c1f5ed6fSDhruvaraj Subhashchandran     DumpTypes dumpType = DumpTypes::USER;
86c1f5ed6fSDhruvaraj Subhashchandran     if (type.empty())
87c1f5ed6fSDhruvaraj Subhashchandran     {
88c1f5ed6fSDhruvaraj Subhashchandran         return dumpType;
89c1f5ed6fSDhruvaraj Subhashchandran     }
90c1f5ed6fSDhruvaraj Subhashchandran 
91c1f5ed6fSDhruvaraj Subhashchandran     // Find any matching dump collection type for the category
92c1f5ed6fSDhruvaraj Subhashchandran     auto it = std::find_if(dumpTypeTable.begin(), dumpTypeTable.end(),
93c1f5ed6fSDhruvaraj Subhashchandran                            [&](const auto& pair) {
94c1f5ed6fSDhruvaraj Subhashchandran         return pair.first == type && pair.second.second == category;
95c1f5ed6fSDhruvaraj Subhashchandran     });
96c1f5ed6fSDhruvaraj Subhashchandran 
97c1f5ed6fSDhruvaraj Subhashchandran     if (it != dumpTypeTable.end())
98c1f5ed6fSDhruvaraj Subhashchandran     {
99c1f5ed6fSDhruvaraj Subhashchandran         dumpType = it->second.first;
100c1f5ed6fSDhruvaraj Subhashchandran     }
101c1f5ed6fSDhruvaraj Subhashchandran     else
102c1f5ed6fSDhruvaraj Subhashchandran     {
103c1f5ed6fSDhruvaraj Subhashchandran         lg2::error("An invalid dump type: {TYPE} passed", "TYPE", type);
104c1f5ed6fSDhruvaraj Subhashchandran         elog<InvalidArgument>(Argument::ARGUMENT_NAME("BMC_DUMP_TYPE"),
105c1f5ed6fSDhruvaraj Subhashchandran                               Argument::ARGUMENT_VALUE(type.c_str()));
106c1f5ed6fSDhruvaraj Subhashchandran     }
107c1f5ed6fSDhruvaraj Subhashchandran     return dumpType;
108c1f5ed6fSDhruvaraj Subhashchandran }
109c1f5ed6fSDhruvaraj Subhashchandran 
isErrorTypeValid(const std::string & errorType)110*aa0937f9SDhruvaraj Subhashchandran bool isErrorTypeValid(const std::string& errorType)
111*aa0937f9SDhruvaraj Subhashchandran {
112*aa0937f9SDhruvaraj Subhashchandran     const auto it = errorMap.find(errorType);
113*aa0937f9SDhruvaraj Subhashchandran     return it != errorMap.end();
114*aa0937f9SDhruvaraj Subhashchandran }
115*aa0937f9SDhruvaraj Subhashchandran 
findErrorType(const std::string & errString)116*aa0937f9SDhruvaraj Subhashchandran std::optional<ErrorType> findErrorType(const std::string& errString)
117*aa0937f9SDhruvaraj Subhashchandran {
118*aa0937f9SDhruvaraj Subhashchandran     for (const auto& [type, errorList] : errorMap)
119*aa0937f9SDhruvaraj Subhashchandran     {
120*aa0937f9SDhruvaraj Subhashchandran         auto error = std::find(errorList.begin(), errorList.end(), errString);
121*aa0937f9SDhruvaraj Subhashchandran         if (error != errorList.end())
122*aa0937f9SDhruvaraj Subhashchandran         {
123*aa0937f9SDhruvaraj Subhashchandran             return type;
124*aa0937f9SDhruvaraj Subhashchandran         }
125*aa0937f9SDhruvaraj Subhashchandran     }
126*aa0937f9SDhruvaraj Subhashchandran     return std::nullopt;
127*aa0937f9SDhruvaraj Subhashchandran }
128*aa0937f9SDhruvaraj Subhashchandran 
129c1f5ed6fSDhruvaraj Subhashchandran } // namespace dump
130c1f5ed6fSDhruvaraj Subhashchandran } // namespace phosphor
131