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 #include "types.hpp"
13 #include "utils.hpp"
14 #include "extra-properties-gen.hpp"
15 
16 namespace openpower
17 {
18 namespace vpd
19 {
20 namespace inventory
21 {
22 
23 /** @brief API to write parsed VPD to inventory,
24  *      for a specifc FRU
25  *
26  *  @param [in] vpdStore - Store object containing
27  *      parsed VPD
28  *  @param [in] path - FRU object path
29  */
30 template<Fru F>
31 void writeFru(const Store& vpdStore, const std::string& path);
32 
33 % for key in fruDict.iterkeys():
34 <%
35     fru = fruDict[key]
36 %>\
37 // Specialization of ${key}
38 template<>
39 void writeFru<Fru::${key}>(const Store& vpdStore,
40                            const std::string& path)
41 {
42     ObjectMap objects;
43     InterfaceMap interfaces;
44     auto iter = extra::objects.find(path);
45 
46     // Inventory manager needs object path, list of interface names to be
47     // implemented, and property:value pairs contained in said interfaces
48 
49     % for interface, properties in fru.iteritems():
50 <%
51         names = interface.split(".")
52         intfName = names[0] + names[-1]
53 %>\
54     PropertyMap ${intfName}Props;
55         % for name, value in properties.iteritems():
56             % if fru and interface and name and value:
57 <%
58                 record, keyword = value.split(",")
59 %>\
60     ${intfName}Props["${name}"] =
61         vpdStore.get<Record::${record}, record::Keyword::${keyword}>();
62             % endif
63         % endfor
64     // Check and update extra properties
65     if(extra::objects.end() != iter)
66     {
67         auto propIter = (iter->second).find("${interface}");
68         if((iter->second).end() != propIter)
69         {
70             for(const auto& map : propIter->second)
71             {
72                 ${intfName}Props[map.first] = map.second;
73             }
74         }
75     }
76     interfaces.emplace("${interface}",
77                        std::move(${intfName}Props));
78     % endfor
79 
80     sdbusplus::message::object_path object(path);
81     // Check and update extra properties
82     if(extra::objects.end() != iter)
83     {
84         for(const auto& entry : iter->second)
85         {
86             if(interfaces.end() == interfaces.find(entry.first))
87             {
88                 interfaces.emplace(entry.first, entry.second);
89             }
90         }
91     }
92     objects.emplace(std::move(object), std::move(interfaces));
93 
94     callPIM(std::move(objects));
95 }
96 
97 % endfor
98 } // namespace inventory
99 } // namespace vpd
100 } // namespace openpower
101