diff options
author | Deepak Kodihalli <dkodihal@in.ibm.com> | 2017-08-05 13:09:54 -0500 |
---|---|---|
committer | Deepak Kodihalli <dkodihal@in.ibm.com> | 2017-08-23 22:35:03 -0500 |
commit | 6620e98de4b81e5eadb96cb739b76c8c030418c8 (patch) | |
tree | 5df4a58e4e51d04185eef996a34aa59acc4307cf /manager.hpp | |
parent | f7b0399a47e6bc0b03843a7b49445cf8ec675e94 (diff) | |
download | phosphor-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.hpp | 14 |
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. * |