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