| #pragma once | 
 |  | 
 | #include "data_interface.hpp" | 
 | #include "mtms.hpp" | 
 | #include "section.hpp" | 
 | #include "stream.hpp" | 
 |  | 
 | namespace openpower | 
 | { | 
 | namespace pels | 
 | { | 
 |  | 
 | /** | 
 |  * @class FailingMTMS | 
 |  * | 
 |  * This represents the Failing Enclosure MTMS section in a PEL. | 
 |  * It is a required section.  In the BMC case, the enclosure is | 
 |  * the system enclosure. | 
 |  */ | 
 | class FailingMTMS : public Section | 
 | { | 
 |   public: | 
 |     FailingMTMS() = delete; | 
 |     ~FailingMTMS() = default; | 
 |     FailingMTMS(const FailingMTMS&) = default; | 
 |     FailingMTMS& operator=(const FailingMTMS&) = default; | 
 |     FailingMTMS(FailingMTMS&&) = default; | 
 |     FailingMTMS& operator=(FailingMTMS&&) = default; | 
 |  | 
 |     /** | 
 |      * @brief Constructor | 
 |      * | 
 |      * @param[in] dataIface - The object to use to obtain | 
 |      *                        the MTM and SN. | 
 |      */ | 
 |     explicit FailingMTMS(const DataInterfaceBase& dataIface); | 
 |  | 
 |     /** | 
 |      * @brief Constructor | 
 |      * | 
 |      * Fills in this class's data fields from the stream. | 
 |      * | 
 |      * @param[in] pel - the PEL data stream | 
 |      */ | 
 |     explicit FailingMTMS(Stream& pel); | 
 |  | 
 |     /** | 
 |      * @brief Flatten the section into the stream | 
 |      * | 
 |      * @param[in] stream - The stream to write to | 
 |      */ | 
 |     void flatten(Stream& stream) const override; | 
 |  | 
 |     /** | 
 |      * @brief Returns the size of this section when flattened into a PEL | 
 |      * | 
 |      * @return size_t - the size of the section | 
 |      */ | 
 |     static constexpr size_t flattenedSize() | 
 |     { | 
 |         return Section::flattenedSize() + MTMS::flattenedSize(); | 
 |     } | 
 |  | 
 |     /** | 
 |      * @brief Returns the machine type+model as a string | 
 |      * | 
 |      * @return std::string the MTM | 
 |      */ | 
 |     std::string getMachineTypeModel() const | 
 |     { | 
 |         return _mtms.machineTypeAndModel(); | 
 |     } | 
 |  | 
 |     /** | 
 |      * @brief Returns the machine serial number as a string | 
 |      * | 
 |      * @return std::string the serial number | 
 |      */ | 
 |     std::string getMachineSerialNumber() const | 
 |     { | 
 |         return _mtms.machineSerialNumber(); | 
 |     } | 
 |  | 
 |     /** | 
 |      * @brief Get section in JSON. | 
 |      * @return std::optional<std::string> - Failing MTMS section in JSON | 
 |      */ | 
 |     std::optional<std::string> getJSON() const override; | 
 |  | 
 |   private: | 
 |     /** | 
 |      * @brief Validates the section contents | 
 |      * | 
 |      * Updates _valid (in Section) with the results. | 
 |      */ | 
 |     void validate() override; | 
 |  | 
 |     /** | 
 |      * @brief Fills in the object from the stream data | 
 |      * | 
 |      * @param[in] stream - The stream to read from | 
 |      */ | 
 |     void unflatten(Stream& stream); | 
 |  | 
 |     /** | 
 |      * @brief The structure that holds the TM and SN fields. | 
 |      *        This is also used in other places in the PEL. | 
 |      */ | 
 |     MTMS _mtms; | 
 | }; | 
 |  | 
 | } // namespace pels | 
 |  | 
 | } // namespace openpower |