| #pragma once | 
 |  | 
 | #include "types.hpp" | 
 |  | 
 | #include <variant> | 
 |  | 
 | namespace vpd | 
 | { | 
 | /** | 
 |  * @brief Interface class for parsers. | 
 |  * | 
 |  * Any concrete parser class, implementing parsing logic need to derive from | 
 |  * this interface class and override the parse method declared in this class. | 
 |  */ | 
 | class ParserInterface | 
 | { | 
 |   public: | 
 |     /** | 
 |      * @brief Pure virtual function for parsing VPD file. | 
 |      * | 
 |      * The API needs to be overridden by all the classes deriving from parser | 
 |      * inerface class to implement respective VPD parsing logic. | 
 |      * | 
 |      * @return parsed format for VPD data, depending upon the | 
 |      * parsing logic. | 
 |      */ | 
 |     virtual types::VPDMapVariant parse() = 0; | 
 |  | 
 |     /** | 
 |      * @brief Read keyword's value from hardware | 
 |      * | 
 |      * @param[in] types::ReadVpdParams - Parameters required to perform read. | 
 |      * | 
 |      * @return keyword's value on successful read. Exception on failure. | 
 |      */ | 
 |     virtual types::DbusVariantType readKeywordFromHardware( | 
 |         const types::ReadVpdParams) | 
 |     { | 
 |         return types::DbusVariantType(); | 
 |     } | 
 |  | 
 |     /** | 
 |      * @brief API to write keyword's value on hardware. | 
 |      * | 
 |      * This virtual method is created to achieve runtime polymorphism for | 
 |      * hardware writes on VPD of different types. This virtual method can be | 
 |      * redefined at derived classess to implement write according to the type of | 
 |      * VPD. | 
 |      * | 
 |      * @param[in] i_paramsToWriteData - Data required to perform write. | 
 |      * | 
 |      * @throw May throw exception depending on the implementation of derived | 
 |      * methods. | 
 |      * @return On success returns number of bytes written on hardware, On | 
 |      * failure returns -1. | 
 |      */ | 
 |     virtual int writeKeywordOnHardware( | 
 |         const types::WriteVpdParams i_paramsToWriteData) | 
 |     { | 
 |         (void)i_paramsToWriteData; | 
 |         return -1; | 
 |     } | 
 |  | 
 |     /** | 
 |      * @brief Virtual destructor. | 
 |      */ | 
 |     virtual ~ParserInterface() {} | 
 | }; | 
 | } // namespace vpd |