1fa5e4d32SSunny Srivastava #pragma once 2fa5e4d32SSunny Srivastava 3fa5e4d32SSunny Srivastava #include "logger.hpp" 4fa5e4d32SSunny Srivastava #include "parser_interface.hpp" 5fa5e4d32SSunny Srivastava #include "types.hpp" 6fa5e4d32SSunny Srivastava 7fa5e4d32SSunny Srivastava #include <memory> 8fa5e4d32SSunny Srivastava 9fa5e4d32SSunny Srivastava namespace vpd 10fa5e4d32SSunny Srivastava { 11fa5e4d32SSunny Srivastava /** 12fa5e4d32SSunny Srivastava * @brief Factory calss to instantiate concrete parser class. 13fa5e4d32SSunny Srivastava * 14fa5e4d32SSunny Srivastava * This class should be used to instantiate an instance of parser class based 15fa5e4d32SSunny Srivastava * on the type of vpd file. 16fa5e4d32SSunny Srivastava */ 17fa5e4d32SSunny Srivastava class ParserFactory 18fa5e4d32SSunny Srivastava { 19fa5e4d32SSunny Srivastava public: 20fa5e4d32SSunny Srivastava // Deleted APIs 21fa5e4d32SSunny Srivastava ParserFactory() = delete; 22fa5e4d32SSunny Srivastava ~ParserFactory() = delete; 23fa5e4d32SSunny Srivastava ParserFactory(const ParserFactory&) = delete; 24fa5e4d32SSunny Srivastava ParserFactory& operator=(const ParserFactory&) = delete; 25fa5e4d32SSunny Srivastava ParserFactory(ParserFactory&&) = delete; 26fa5e4d32SSunny Srivastava ParserFactory& operator=(ParserFactory&&) = delete; 27fa5e4d32SSunny Srivastava 28fa5e4d32SSunny Srivastava /** 29fa5e4d32SSunny Srivastava * @brief An API to get object of concrete parser class. 30fa5e4d32SSunny Srivastava * 31fa5e4d32SSunny Srivastava * The method is used to get object of respective parser class based on the 32fa5e4d32SSunny Srivastava * type of VPD extracted from VPD vector passed to the API. 33fa5e4d32SSunny Srivastava * To detect respective parser from VPD vector, add logic into the API 34fa5e4d32SSunny Srivastava * vpdTypeCheck. 35fa5e4d32SSunny Srivastava * 36fa5e4d32SSunny Srivastava * Note: API throws DataException in case vpd type check fails for any 37fa5e4d32SSunny Srivastava * unknown type. Caller responsibility to handle the exception. 38fa5e4d32SSunny Srivastava * 39fa5e4d32SSunny Srivastava * @param[in] i_vpdVector - vpd file content to check for the type. 40fa5e4d32SSunny Srivastava * @param[in] i_vpdFilePath - FRU EEPROM path. 41fa5e4d32SSunny Srivastava * @param[in] i_vpdStartOffset - Offset from where VPD starts in the VPD 42fa5e4d32SSunny Srivastava * file. 43fa5e4d32SSunny Srivastava * 44fa5e4d32SSunny Srivastava * @return - Pointer to concrete parser class object. 45fa5e4d32SSunny Srivastava */ 46*43fedabcSPatrick Williams static std::shared_ptr<ParserInterface> getParser( 47*43fedabcSPatrick Williams const types::BinaryVector& i_vpdVector, 48fa5e4d32SSunny Srivastava const std::string& i_vpdFilePath, size_t i_vpdStartOffset); 49fa5e4d32SSunny Srivastava }; 50fa5e4d32SSunny Srivastava } // namespace vpd 51