xref: /openbmc/phosphor-inventory-manager/serialize.hpp (revision 6620e98de4b81e5eadb96cb739b76c8c030418c8)
1*6620e98dSDeepak Kodihalli #pragma once
2*6620e98dSDeepak Kodihalli 
3*6620e98dSDeepak Kodihalli #include <cereal/archives/json.hpp>
4*6620e98dSDeepak Kodihalli #include <experimental/filesystem>
5*6620e98dSDeepak Kodihalli #include <fstream>
6*6620e98dSDeepak Kodihalli #include "config.h"
7*6620e98dSDeepak Kodihalli 
8*6620e98dSDeepak Kodihalli namespace cereal
9*6620e98dSDeepak Kodihalli {
10*6620e98dSDeepak Kodihalli 
11*6620e98dSDeepak Kodihalli namespace fs = std::experimental::filesystem;
12*6620e98dSDeepak Kodihalli 
13*6620e98dSDeepak Kodihalli using Path = std::string;
14*6620e98dSDeepak Kodihalli using Interface = std::string;
15*6620e98dSDeepak Kodihalli 
16*6620e98dSDeepak Kodihalli /** @brief Serialize inventory item
17*6620e98dSDeepak Kodihalli  *
18*6620e98dSDeepak Kodihalli  *  @param[in] path - DBus object path
19*6620e98dSDeepak Kodihalli  *  @param[in] iface - Inventory interface name
20*6620e98dSDeepak Kodihalli  *  @param[in] object - Object to be serialized
21*6620e98dSDeepak Kodihalli  */
22*6620e98dSDeepak Kodihalli template <typename T>
23*6620e98dSDeepak Kodihalli inline void serialize(const Path& path, const Interface& iface, const T& object)
24*6620e98dSDeepak Kodihalli {
25*6620e98dSDeepak Kodihalli     fs::path p(PIM_PERSIST_PATH);
26*6620e98dSDeepak Kodihalli     p /= path;
27*6620e98dSDeepak Kodihalli     fs::create_directories(p);
28*6620e98dSDeepak Kodihalli     p /= iface;
29*6620e98dSDeepak Kodihalli     std::ofstream os(p, std::ios::binary);
30*6620e98dSDeepak Kodihalli     cereal::JSONOutputArchive oarchive(os);
31*6620e98dSDeepak Kodihalli     oarchive(object);
32*6620e98dSDeepak Kodihalli }
33*6620e98dSDeepak Kodihalli 
34*6620e98dSDeepak Kodihalli } // namespace cereal
35