1 #pragma once 2 3 #include "registry.hpp" 4 #include "section_header.hpp" 5 6 #include <optional> 7 8 namespace openpower 9 { 10 namespace pels 11 { 12 /** 13 * @class Section 14 * 15 * The base class for a PEL section. It contains the SectionHeader 16 * as all sections start with it. 17 * 18 */ 19 class Section 20 { 21 public: 22 Section() = default; 23 virtual ~Section() = default; 24 Section(const Section&) = default; 25 Section& operator=(const Section&) = default; 26 Section(Section&&) = default; 27 Section& operator=(Section&&) = default; 28 29 /** 30 * @brief Returns a reference to the SectionHeader 31 */ 32 const SectionHeader& header() const 33 { 34 return _header; 35 } 36 37 /** 38 * @brief Says if the section is valid. 39 */ 40 bool valid() const 41 { 42 return _valid; 43 } 44 45 /** 46 * @brief Flatten the section into the stream 47 * 48 * @param[in] stream - The stream to write to 49 */ 50 virtual void flatten(Stream& stream) const = 0; 51 52 /** 53 * @brief Get section in JSON. Derived classes to override when required to. 54 * @return std::optional<std::string> - If a section comes with a JSON 55 * representation, this would return the string for it. 56 */ 57 virtual std::optional<std::string> getJSON() const 58 { 59 return std::nullopt; 60 } 61 62 /** 63 * @brief Get section in JSON. Derived classes to override when required to. 64 * @param[in] registry - Registry object reference 65 * @return std::optional<std::string> - If a section comes with a JSON 66 * representation, this would return the string for it. 67 */ 68 virtual std::optional<std::string> 69 getJSON(message::Registry& registry) const 70 { 71 return std::nullopt; 72 } 73 74 protected: 75 /** 76 * @brief Returns the flattened size of the section header 77 */ 78 static constexpr size_t flattenedSize() 79 { 80 return SectionHeader::flattenedSize(); 81 } 82 83 /** 84 * @brief Used to validate the section. 85 * 86 * Implemented by derived classes. 87 */ 88 virtual void validate() = 0; 89 90 /** 91 * @brief The section header structure. 92 * 93 * Filled in by derived classes. 94 */ 95 SectionHeader _header; 96 97 /** 98 * @brief The section valid flag. 99 * 100 * This is determined by the derived class. 101 */ 102 bool _valid = false; 103 }; 104 } // namespace pels 105 } // namespace openpower 106