xref: /openbmc/openpower-vpd-parser/vpd-parser/ipz_parser.hpp (revision f39537634cd08d39272c80b27fa7bda667da4033)
1 #pragma once
2 
3 #include "const.hpp"
4 #include "parser_interface.hpp"
5 #include "store.hpp"
6 #include "types.hpp"
7 
8 #include <vector>
9 
10 namespace openpower
11 {
12 namespace vpd
13 {
14 namespace ipz
15 {
16 namespace parser
17 {
18 
19 using ParserInterface = openpower::vpd::parser::interface::ParserInterface;
20 using kwdVpdMap = openpower::vpd::inventory::KeywordVpdMap;
21 
22 class IpzVpdParser : public ParserInterface
23 {
24   public:
25     IpzVpdParser() = delete;
26     IpzVpdParser(const IpzVpdParser&) = delete;
27     IpzVpdParser& operator=(const IpzVpdParser&) = delete;
28     IpzVpdParser(IpzVpdParser&&) = delete;
29     IpzVpdParser& operator=(IpzVpdParser&&) = delete;
30     ~IpzVpdParser() = default;
31 
32     /**
33      * @brief Constructor
34      */
35     IpzVpdParser(const Binary& VpdVector) : vpd(VpdVector)
36     {
37     }
38 
39     /**
40      * @brief Parse the memory VPD binary data.
41      * Collects and emplace the keyword-value pairs in map.
42      *
43      * @return map of keyword:value
44      */
45     std::variant<kwdVpdMap, Store> parse();
46 
47     /**
48      * @brief An api to return interface name with respect to
49      * the parser selected.
50      *
51      * @return - Interface name for that vpd type.
52      */
53     std::string getInterfaceName() const;
54 
55     /** @brief API to check vpd header
56      *  @param [in] vpd - VPDheader in binary format
57      */
58     void processHeader();
59 
60   private:
61     const Binary& vpd;
62 }; // class IpzVpdParser
63 
64 } // namespace parser
65 } // namespace ipz
66 } // namespace vpd
67 } // namespace openpower
68