| #pragma once |
| |
| #include "logger.hpp" |
| #include "parser_interface.hpp" |
| #include "types.hpp" |
| |
| #include <memory> |
| |
| 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<ParserInterface> getParser( |
| const types::BinaryVector& i_vpdVector, |
| const std::string& i_vpdFilePath, size_t i_vpdStartOffset); |
| }; |
| } // namespace vpd |