1 ## This file is a template.  The comment below is emitted
2 ## into the rendered file; feel free to edit this file.
3 // WARNING: Generated header. Do not edit!
4 
5 
6 #pragma once
7 
8 #include <map>
9 #include <iostream>
10 #include "defines.hpp"
11 #include "store.hpp"
12 
13 namespace openpower
14 {
15 namespace vpd
16 {
17 namespace inventory
18 {
19 
20 using Inner = Parsed::mapped_type;
21 using Outer = std::map<std::string, Inner>;
22 
23 // TODO: Remove once the call to inventory manager is added
24 auto print = [](Outer&& object, const std::string& path)
25 {
26     std::cout << "\n";
27     std::cout << path << "\n";
28     std::cout << "\n";
29     for(const auto& o : object)
30     {
31         std::cout << o.first << "\n";
32         for(const auto& i : o.second)
33         {
34             std::cout << i.first << " : " << i.second << "\n";
35         }
36         std::cout << "\n";
37     }
38 };
39 
40 /** @brief API to write parsed VPD to inventory,
41  *      for a specifc FRU
42  *
43  *  @param [in] vpdStore - Store object containing
44  *      parsed VPD
45  *  @param [in] path - FRU object path
46  */
47 template<Fru F>
48 void writeFru(const Store& vpdStore, const std::string& path);
49 
50 % for key in fruDict.iterkeys():
51 <%
52     fru = fruDict[key]
53 %>\
54 // Specialization of ${key}
55 template<>
56 void writeFru<Fru::${key}>(const Store& vpdStore,
57                            const std::string& path)
58 {
59     Outer object;
60 
61     // Inventory manager needs object path, list of interface names to be
62     // implemented, and property:value pairs contained in said interfaces
63 
64     % for interfaces, properties in fru.iteritems():
65 <%
66         interface = interfaces.split(".")
67         intfName = interface[0] + interface[-1]
68 %>\
69     Inner ${intfName};
70         % for name, value in properties.iteritems():
71             % if fru and interfaces and name and value:
72 <%
73                 record, keyword = value.split(",")
74 %>\
75     ${intfName}["${name}"] =
76         vpdStore.get<Record::${record}, record::Keyword::${keyword}>();
77             % endif
78         % endfor
79     object.emplace("${interfaces}",
80                    std::move(${intfName}));
81     % endfor
82 
83     // TODO: Need integration with inventory manager, print serialized dbus
84     // object for now.
85     print(std::move(object), path);
86 }
87 
88 % endfor
89 } // namespace inventory
90 } // namespace vpd
91 } // namespace openpower
92