1 #pragma once
2 
3 #include "impl.hpp"
4 #include "parser_interface.hpp"
5 #include "types.hpp"
6 
7 namespace openpower
8 {
9 namespace vpd
10 {
11 namespace memory
12 {
13 namespace parser
14 {
15 using ParserInterface = openpower::vpd::parser::interface::ParserInterface;
16 using kwdVpdMap = openpower::vpd::inventory::KeywordVpdMap;
17 
18 class memoryVpdParser : public ParserInterface
19 {
20   public:
21     memoryVpdParser() = delete;
22     memoryVpdParser(const memoryVpdParser&) = delete;
23     memoryVpdParser& operator=(const memoryVpdParser&) = delete;
24     memoryVpdParser(memoryVpdParser&&) = delete;
25     memoryVpdParser& operator=(memoryVpdParser&&) = delete;
26     ~memoryVpdParser() = default;
27 
28     /**
29      * @brief Constructor
30      *
31      * Move memVpdVector to parser object's memVpdVector
32      */
33     memoryVpdParser(Binary&& VpdVector) : memVpd(std::move(VpdVector))
34     {
35     }
36 
37     /**
38      * @brief Parse the memory VPD binary data.
39      * Collects and emplace the keyword-value pairs in map.
40      *
41      * @return map of keyword:value
42      */
43     std::variant<kwdVpdMap, Store> parse();
44 
45     /**
46      * @brief An api to return interface name with respect to
47      * publish data on cache
48      *
49      * @return - Interface name for that vpd type.
50      */
51     std::string getInterfaceName() const;
52 
53   private:
54     /**
55      * @brief An api to read keywords.
56      *
57      * @return- map of kwd:value
58      */
59     kwdVpdMap readKeywords(Binary::const_iterator iterator);
60 
61     // vdp file to be parsed
62     Binary memVpd;
63 };
64 } // namespace parser
65 } // namespace memory
66 } // namespace vpd
67 } // namespace openpower