1 #pragma once 2 3 #include <ctype.h> 4 #include <stdio.h> 5 6 #include <fstream> 7 #include <iomanip> 8 #include <iostream> 9 #include <string> 10 #include <vector> 11 12 namespace openpower 13 { 14 namespace pels 15 { 16 const uint8_t indentLevel = 4; 17 const uint8_t colAlign = 32; 18 /** 19 * @brief escape json - use it for PEL hex dumps. 20 * @param[in] std::string - the unescaped JSON as a string literal 21 * @return std::string - escaped JSON string literal 22 */ 23 std::string escapeJSON(const std::string& input); 24 25 /** 26 * @brief get hex dump for PEL section in json format. 27 * @param[in] const void* data - Raw PEL data 28 * @param[i] size_t size - size of Raw PEL 29 * @param[in] size_t indentCount - The number of indent levels to indent 30 * @param[in] bool toJson - if true, output lines as JSON array, else print 31 * output as plain text 32 * @return char * - the Hex dump 33 */ 34 char* dumpHex(const void* data, size_t size, size_t indentCount, 35 bool toJson = true); 36 37 /** 38 * @brief Inserts key-value into a JSON string 39 * 40 * @param[in] jsonStr - The JSON string 41 * @param[in] fieldName - The JSON key to insert 42 * @param[in] fieldValue - The JSON value to insert 43 * @param[in] indentCount - Indent count for the line 44 */ 45 void jsonInsert(std::string& jsonStr, const std::string& fieldName, 46 std::string fieldValue, uint8_t indentCount); 47 48 /** 49 * @brief Inserts key-value array into a JSON string 50 * 51 * @param[in] jsonStr - The JSON string 52 * @param[in] fieldName - The JSON key to insert 53 * @param[in] values - The JSON array to insert 54 * @param[in] indentCount - Indent count for the line 55 */ 56 void jsonInsertArray(std::string& jsonStr, const std::string& fieldName, 57 std::vector<std::string>& values, uint8_t indentCount); 58 59 /** 60 * @brief Converts an integer to a formatted string 61 * @param[in] format - the format of output string 62 * @param[in] number - the integer to convert 63 * @return std::string - the formatted string 64 */ 65 template <typename T> 66 std::string getNumberString(const char* format, T number) 67 { 68 char* value = nullptr; 69 std::string numString; 70 71 static_assert(std::is_integral<T>::value, "Integral required."); 72 73 int len = asprintf(&value, format, number); 74 if (len >= 0) 75 { 76 numString = value; 77 } 78 else 79 { 80 throw std::invalid_argument( 81 std::string("getNumberString: invalid format string: ") + format); 82 } 83 free(value); 84 85 return numString; 86 } 87 88 /** 89 * @brief helper function to trim trailing whitespaces 90 * @return std::string - trimmed string 91 * @param[in] std::string - string to trim 92 */ 93 std::string trimEnd(std::string s); 94 95 } // namespace pels 96 } // namespace openpower 97