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