#pragma once #include "logger.hpp" #include "parser_interface.hpp" #include "types.hpp" #include namespace vpd { /** * @brief Factory calss to instantiate concrete parser class. * * This class should be used to instantiate an instance of parser class based * on the type of vpd file. */ class ParserFactory { public: // Deleted APIs ParserFactory() = delete; ~ParserFactory() = delete; ParserFactory(const ParserFactory&) = delete; ParserFactory& operator=(const ParserFactory&) = delete; ParserFactory(ParserFactory&&) = delete; ParserFactory& operator=(ParserFactory&&) = delete; /** * @brief An API to get object of concrete parser class. * * The method is used to get object of respective parser class based on the * type of VPD extracted from VPD vector passed to the API. * To detect respective parser from VPD vector, add logic into the API * vpdTypeCheck. * * Note: API throws DataException in case vpd type check fails for any * unknown type. Caller responsibility to handle the exception. * * @param[in] i_vpdVector - vpd file content to check for the type. * @param[in] i_vpdFilePath - FRU EEPROM path. * @param[in] i_vpdStartOffset - Offset from where VPD starts in the VPD * file. * * @return - Pointer to concrete parser class object. */ static std::shared_ptr getParser( const types::BinaryVector& i_vpdVector, const std::string& i_vpdFilePath, size_t i_vpdStartOffset); }; } // namespace vpd