xref: /openbmc/openpower-vpd-parser/vpd-manager/include/parser_factory.hpp (revision 43fedabc032ba7c209b58111b6c35c7d95a9f14e)
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