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 #pragma once
5c1f5ed6fSDhruvaraj Subhashchandran 
6c1f5ed6fSDhruvaraj Subhashchandran #include <optional>
7c1f5ed6fSDhruvaraj Subhashchandran #include <ranges>
8c1f5ed6fSDhruvaraj Subhashchandran #include <string>
9c1f5ed6fSDhruvaraj Subhashchandran #include <unordered_map>
10*aa0937f9SDhruvaraj Subhashchandran #include <vector>
11c1f5ed6fSDhruvaraj Subhashchandran 
12c1f5ed6fSDhruvaraj Subhashchandran namespace phosphor
13c1f5ed6fSDhruvaraj Subhashchandran {
14c1f5ed6fSDhruvaraj Subhashchandran namespace dump
15c1f5ed6fSDhruvaraj Subhashchandran {
16c1f5ed6fSDhruvaraj Subhashchandran // Overall dump category for example BMC dump
17c1f5ed6fSDhruvaraj Subhashchandran using DUMP_CATEGORY = std::string;
18c1f5ed6fSDhruvaraj Subhashchandran 
19c1f5ed6fSDhruvaraj Subhashchandran // Dump type
20c1f5ed6fSDhruvaraj Subhashchandran using DUMP_TYPE = std::string;
21c1f5ed6fSDhruvaraj Subhashchandran 
22c1f5ed6fSDhruvaraj Subhashchandran // Dump collection indicator
23c1f5ed6fSDhruvaraj Subhashchandran using DUMP_COLLECTION_TYPE = std::string;
24c1f5ed6fSDhruvaraj Subhashchandran 
25*aa0937f9SDhruvaraj Subhashchandran using ErrorType = std::string;
26*aa0937f9SDhruvaraj Subhashchandran using Error = std::string;
27*aa0937f9SDhruvaraj Subhashchandran using ErrorList = std::vector<Error>;
28*aa0937f9SDhruvaraj Subhashchandran using ErrorMap = std::unordered_map<ErrorType, ErrorList>;
29*aa0937f9SDhruvaraj Subhashchandran 
30c1f5ed6fSDhruvaraj Subhashchandran // Dump types
31*aa0937f9SDhruvaraj Subhashchandran <% enum_values = set() %>
32c1f5ed6fSDhruvaraj Subhashchandran enum class DumpTypes {
33c1f5ed6fSDhruvaraj Subhashchandran % for item in DUMP_TYPE_TABLE:
34c1f5ed6fSDhruvaraj Subhashchandran   % for key, values in item.items():
35*aa0937f9SDhruvaraj Subhashchandran     % if values[0].upper() not in enum_values:
36c1f5ed6fSDhruvaraj Subhashchandran         ${values[0].upper()},
37*aa0937f9SDhruvaraj Subhashchandran         <% enum_values.add(values[0].upper()) %>
38*aa0937f9SDhruvaraj Subhashchandran     % endif
39c1f5ed6fSDhruvaraj Subhashchandran   % endfor
40c1f5ed6fSDhruvaraj Subhashchandran % endfor
41*aa0937f9SDhruvaraj Subhashchandran % for key in ERROR_TYPE_DICT:
42*aa0937f9SDhruvaraj Subhashchandran     % if key.upper() not in enum_values:
43*aa0937f9SDhruvaraj Subhashchandran         ${key.upper()},
44*aa0937f9SDhruvaraj Subhashchandran         <% enum_values.add(key.upper()) %>
45*aa0937f9SDhruvaraj Subhashchandran     % endif
46*aa0937f9SDhruvaraj Subhashchandran % endfor
47c1f5ed6fSDhruvaraj Subhashchandran };
48c1f5ed6fSDhruvaraj Subhashchandran 
49c1f5ed6fSDhruvaraj Subhashchandran // A table of dump types
50c1f5ed6fSDhruvaraj Subhashchandran using DUMP_TYPE_TABLE =
51c1f5ed6fSDhruvaraj Subhashchandran     std::unordered_map<DUMP_TYPE, std::pair<DumpTypes, DUMP_CATEGORY>>;
52c1f5ed6fSDhruvaraj Subhashchandran 
53c1f5ed6fSDhruvaraj Subhashchandran // Mapping between dump type and dump collection type string
54c1f5ed6fSDhruvaraj Subhashchandran using DUMP_TYPE_TO_STRING_MAP =
55c1f5ed6fSDhruvaraj Subhashchandran     std::unordered_map<DumpTypes, DUMP_COLLECTION_TYPE>;
56c1f5ed6fSDhruvaraj Subhashchandran 
57c1f5ed6fSDhruvaraj Subhashchandran /**
58c1f5ed6fSDhruvaraj Subhashchandran  * @brief Converts a DumpTypes enum value to dump name.
59c1f5ed6fSDhruvaraj Subhashchandran  *
60c1f5ed6fSDhruvaraj Subhashchandran  * @param[in] dumpType The DumpTypes value to be converted.
61c1f5ed6fSDhruvaraj Subhashchandran  * @return Name of the dump as string, std::nullopt if not found.
62c1f5ed6fSDhruvaraj Subhashchandran  */
63c1f5ed6fSDhruvaraj Subhashchandran std::optional<std::string> dumpTypeToString(const DumpTypes& dumpType);
64c1f5ed6fSDhruvaraj Subhashchandran 
65c1f5ed6fSDhruvaraj Subhashchandran /**
66c1f5ed6fSDhruvaraj Subhashchandran  * @brief Converts dump name to its corresponding DumpTypes enum value.
67c1f5ed6fSDhruvaraj Subhashchandran  *
68c1f5ed6fSDhruvaraj Subhashchandran  * @param[in] str The string to be converted to a DumpTypes value.
69c1f5ed6fSDhruvaraj Subhashchandran  * @return The DumpTypes value that corresponds to the name or std::nullopt if
70c1f5ed6fSDhruvaraj Subhashchandran  * not found.
71c1f5ed6fSDhruvaraj Subhashchandran  */
72c1f5ed6fSDhruvaraj Subhashchandran std::optional<DumpTypes> stringToDumpType(const std::string& str);
73c1f5ed6fSDhruvaraj Subhashchandran 
74c1f5ed6fSDhruvaraj Subhashchandran /**
75c1f5ed6fSDhruvaraj Subhashchandran  * @brief Validates dump type and returns corresponding collection type
76c1f5ed6fSDhruvaraj Subhashchandran  *
77c1f5ed6fSDhruvaraj Subhashchandran  * This function checks the provided dump type against the specified category.
78c1f5ed6fSDhruvaraj Subhashchandran  * If the dump type is empty, it defaults to "user". If the dump type does not
79c1f5ed6fSDhruvaraj Subhashchandran  * exist or does not match with the specified category, it logs an error and
80c1f5ed6fSDhruvaraj Subhashchandran  * throws an InvalidArgument exception.
81c1f5ed6fSDhruvaraj Subhashchandran  *
82c1f5ed6fSDhruvaraj Subhashchandran  * @param[in] type - The dump type to be validated.
83c1f5ed6fSDhruvaraj Subhashchandran  * @param[in] category - The category to match against the dump type.
84c1f5ed6fSDhruvaraj Subhashchandran  *
85c1f5ed6fSDhruvaraj Subhashchandran  * @return The corresponding dump collection type if the dump type and category
86c1f5ed6fSDhruvaraj Subhashchandran  * match an entry in the dumpTypeTable. If the type is empty or does not match
87c1f5ed6fSDhruvaraj Subhashchandran  * any entry, it returns "user".
88c1f5ed6fSDhruvaraj Subhashchandran  *
89c1f5ed6fSDhruvaraj Subhashchandran  * @throws InvalidArgument - Thrown if the type does not match the specified
90c1f5ed6fSDhruvaraj Subhashchandran  * category or does not exist in the table.
91c1f5ed6fSDhruvaraj Subhashchandran  */
92c1f5ed6fSDhruvaraj Subhashchandran DumpTypes validateDumpType(const std::string& type,
93c1f5ed6fSDhruvaraj Subhashchandran                            const std::string& category);
94c1f5ed6fSDhruvaraj Subhashchandran 
95*aa0937f9SDhruvaraj Subhashchandran /**
96*aa0937f9SDhruvaraj Subhashchandran  * @brief Checks if the provided error type is valid.
97*aa0937f9SDhruvaraj Subhashchandran  *
98*aa0937f9SDhruvaraj Subhashchandran  * This function verifies the validity of the error type by checking if it
99*aa0937f9SDhruvaraj Subhashchandran  * exists in the error map.
100*aa0937f9SDhruvaraj Subhashchandran  *
101*aa0937f9SDhruvaraj Subhashchandran  * @param[in] errorType - The string representation of the error type to
102*aa0937f9SDhruvaraj Subhashchandran  * validate.
103*aa0937f9SDhruvaraj Subhashchandran  *
104*aa0937f9SDhruvaraj Subhashchandran  * @return True if the error type exists in the error map, False otherwise.
105*aa0937f9SDhruvaraj Subhashchandran  */
106*aa0937f9SDhruvaraj Subhashchandran bool isErrorTypeValid(const std::string& errorType);
107*aa0937f9SDhruvaraj Subhashchandran 
108*aa0937f9SDhruvaraj Subhashchandran /**
109*aa0937f9SDhruvaraj Subhashchandran  * @brief Finds the error type based on the provided error string.
110*aa0937f9SDhruvaraj Subhashchandran  *
111*aa0937f9SDhruvaraj Subhashchandran  * This function searches the error map for the provided error string.
112*aa0937f9SDhruvaraj Subhashchandran  * If it finds the string in the list of errors for a specific error type,
113*aa0937f9SDhruvaraj Subhashchandran  * it returns that error type.
114*aa0937f9SDhruvaraj Subhashchandran  *
115*aa0937f9SDhruvaraj Subhashchandran  * @param[in] errString - The string representation of the error to search for.
116*aa0937f9SDhruvaraj Subhashchandran  *
117*aa0937f9SDhruvaraj Subhashchandran  * @return An optional containing the error type if found. If the error string
118*aa0937f9SDhruvaraj Subhashchandran  * is not found in the map, returns an empty optional.
119*aa0937f9SDhruvaraj Subhashchandran  */
120*aa0937f9SDhruvaraj Subhashchandran std::optional<ErrorType> findErrorType(const std::string& errString);
121*aa0937f9SDhruvaraj Subhashchandran 
122c1f5ed6fSDhruvaraj Subhashchandran } // namespace dump
123c1f5ed6fSDhruvaraj Subhashchandran } // namespace phosphor
124