summaryrefslogtreecommitdiffstats
path: root/manager.hpp
diff options
context:
space:
mode:
authorDeepak Kodihalli <dkodihal@in.ibm.com>2017-08-05 13:09:54 -0500
committerDeepak Kodihalli <dkodihal@in.ibm.com>2017-08-23 22:35:03 -0500
commit6620e98de4b81e5eadb96cb739b76c8c030418c8 (patch)
tree5df4a58e4e51d04185eef996a34aa59acc4307cf /manager.hpp
parentf7b0399a47e6bc0b03843a7b49445cf8ec675e94 (diff)
downloadphosphor-inventory-manager-6620e98de4b81e5eadb96cb739b76c8c030418c8.tar.gz
phosphor-inventory-manager-6620e98de4b81e5eadb96cb739b76c8c030418c8.zip
inventory: implement serialization
Use Cereal to serialize and persist inventory items to the filesystem. Serialize inventory objects as and when they're created/updated via the notify() API. Create a template API to perform serialization on the sdbusplus inventory interface type. An inventory item path /foo/bar/baz implementing interfaces iface1 and iface2 would be stored in paths /foo/bar/baz/iface1 and /foo/bar/baz/iface2. Change-Id: I9a175185eac1740d6f2ca86a3ee13457edfc8ea9 Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
Diffstat (limited to 'manager.hpp')
-rw-r--r--manager.hpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/manager.hpp b/manager.hpp
index 4f146cb..a94d5ea 100644
--- a/manager.hpp
+++ b/manager.hpp
@@ -9,6 +9,7 @@
#include "events.hpp"
#include "functor.hpp"
#include "types.hpp"
+#include "serialize.hpp"
namespace phosphor
{
@@ -85,6 +86,14 @@ struct MakeInterface
p.first, convertVariant<PropertiesVariantType<T>>(p.second));
}
}
+
+ static void serialize(const std::string& path, const std::string& iface,
+ const any_ns::any& holder)
+ {
+ const auto& object =
+ *any_ns::any_cast<const std::shared_ptr<T> &>(holder);
+ cereal::serialize(path, iface, object);
+ }
};
/** @class Manager
@@ -190,7 +199,10 @@ class Manager final :
decltype(MakeInterface<int>::make) >;
using AssignerType = std::add_pointer_t <
decltype(MakeInterface<int>::assign) >;
- using Makers = std::map<std::string, std::tuple<MakerType, AssignerType>>;
+ using SerializerType = std::add_pointer_t <
+ decltype(MakeInterface<int>::serialize) >;
+ using Makers = std::map<std::string,
+ std::tuple<MakerType, AssignerType, SerializerType>>;
/** @brief Provides weak references to interface holders.
*
OpenPOWER on IntegriCloud