18457f821SDeepak Kodihalli ## This file is a template.  The comment below is emitted
28457f821SDeepak Kodihalli ## into the rendered file; feel free to edit this file.
38457f821SDeepak Kodihalli // WARNING: Generated header. Do not edit!
48457f821SDeepak Kodihalli 
58457f821SDeepak Kodihalli 
68457f821SDeepak Kodihalli #pragma once
78457f821SDeepak Kodihalli 
88457f821SDeepak Kodihalli #include <map>
98457f821SDeepak Kodihalli #include <iostream>
108457f821SDeepak Kodihalli #include "defines.hpp"
118457f821SDeepak Kodihalli #include "store.hpp"
12*76794495SDeepak Kodihalli #include "types.hpp"
13*76794495SDeepak Kodihalli #include "utils.hpp"
148457f821SDeepak Kodihalli 
158457f821SDeepak Kodihalli namespace openpower
168457f821SDeepak Kodihalli {
178457f821SDeepak Kodihalli namespace vpd
188457f821SDeepak Kodihalli {
198457f821SDeepak Kodihalli namespace inventory
208457f821SDeepak Kodihalli {
218457f821SDeepak Kodihalli 
228457f821SDeepak Kodihalli /** @brief API to write parsed VPD to inventory,
238457f821SDeepak Kodihalli  *      for a specifc FRU
248457f821SDeepak Kodihalli  *
258457f821SDeepak Kodihalli  *  @param [in] vpdStore - Store object containing
268457f821SDeepak Kodihalli  *      parsed VPD
278457f821SDeepak Kodihalli  *  @param [in] path - FRU object path
288457f821SDeepak Kodihalli  */
298457f821SDeepak Kodihalli template<Fru F>
308457f821SDeepak Kodihalli void writeFru(const Store& vpdStore, const std::string& path);
318457f821SDeepak Kodihalli 
328457f821SDeepak Kodihalli % for key in fruDict.iterkeys():
338457f821SDeepak Kodihalli <%
348457f821SDeepak Kodihalli     fru = fruDict[key]
358457f821SDeepak Kodihalli %>\
368457f821SDeepak Kodihalli // Specialization of ${key}
378457f821SDeepak Kodihalli template<>
388457f821SDeepak Kodihalli void writeFru<Fru::${key}>(const Store& vpdStore,
398457f821SDeepak Kodihalli                            const std::string& path)
408457f821SDeepak Kodihalli {
414cf89a10SDeepak Kodihalli     ObjectMap objects;
424cf89a10SDeepak Kodihalli     InterfaceMap interfaces;
438457f821SDeepak Kodihalli 
448457f821SDeepak Kodihalli     // Inventory manager needs object path, list of interface names to be
458457f821SDeepak Kodihalli     // implemented, and property:value pairs contained in said interfaces
468457f821SDeepak Kodihalli 
474cf89a10SDeepak Kodihalli     % for interface, properties in fru.iteritems():
488457f821SDeepak Kodihalli <%
494cf89a10SDeepak Kodihalli         names = interface.split(".")
504cf89a10SDeepak Kodihalli         intfName = names[0] + names[-1]
518457f821SDeepak Kodihalli %>\
524cf89a10SDeepak Kodihalli     PropertyMap ${intfName}Props;
538457f821SDeepak Kodihalli         % for name, value in properties.iteritems():
544cf89a10SDeepak Kodihalli             % if fru and interface and name and value:
558457f821SDeepak Kodihalli <%
568457f821SDeepak Kodihalli                 record, keyword = value.split(",")
578457f821SDeepak Kodihalli %>\
584cf89a10SDeepak Kodihalli     ${intfName}Props["${name}"] =
598457f821SDeepak Kodihalli         vpdStore.get<Record::${record}, record::Keyword::${keyword}>();
608457f821SDeepak Kodihalli             % endif
618457f821SDeepak Kodihalli         % endfor
624cf89a10SDeepak Kodihalli     interfaces.emplace("${interface}",
634cf89a10SDeepak Kodihalli                        std::move(${intfName}Props));
648457f821SDeepak Kodihalli     % endfor
658457f821SDeepak Kodihalli 
664cf89a10SDeepak Kodihalli     sdbusplus::message::object_path object(path);
674cf89a10SDeepak Kodihalli     objects.emplace(std::move(object), std::move(interfaces));
684cf89a10SDeepak Kodihalli 
694cf89a10SDeepak Kodihalli     callPIM(std::move(objects));
708457f821SDeepak Kodihalli }
718457f821SDeepak Kodihalli 
728457f821SDeepak Kodihalli % endfor
738457f821SDeepak Kodihalli } // namespace inventory
748457f821SDeepak Kodihalli } // namespace vpd
758457f821SDeepak Kodihalli } // namespace openpower
76