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