Switch to generated interface factory methods
Automatically populate the association of interface with an
appropriate sdbusplus server side interface binding.
Change-Id: Ie46d91cf2e6726b033789be6228c10ca14a76220
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/generated.mako.cpp b/generated.mako.cpp
index a92daf1..44528cf 100644
--- a/generated.mako.cpp
+++ b/generated.mako.cpp
@@ -3,6 +3,9 @@
// This file was auto generated. Do not edit.
#include "manager.hpp"
+% for i in interfaces:
+#include <${'/'.join(i.split('.') + ['server.hpp'])}>
+% endfor
namespace phosphor
{
@@ -11,6 +14,16 @@
namespace manager
{
+const Manager::Makers Manager::_makers{
+% for i in interfaces:
+ {
+ "${i}",
+ details::interface::holder::Holder<
+ sdbusplus::server::${'::'.join(i.split('.'))}>::make,
+ },
+% endfor
+};
+
const Manager::Events Manager::_events{
% for e in events:
{
diff --git a/manager.cpp b/manager.cpp
index a846a0b..77d5990 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -101,18 +101,10 @@
void Manager::notify(std::string path, Object object)
{
try {
- using MakerType = HolderPtr(*)(
- sdbusplus::bus::bus &, const char *);
- using Makers = std::map<std::string, MakerType>;
-
if(object.cbegin() == object.cend())
throw std::runtime_error(
"No interfaces in " + path);
- static const Makers makers{
- // TODO - Add mappings here.
- };
-
path.insert(0, _root);
auto obj = _refs.find(path);
@@ -126,9 +118,9 @@
InterfaceComposite ref;
for (auto &x: object) {
- auto maker = makers.find(x.first.c_str());
+ auto maker = _makers.find(x.first.c_str());
- if(maker == makers.end())
+ if(maker == _makers.end())
throw std::runtime_error(
"Unimplemented interface: " + x.first);
diff --git a/manager.hpp b/manager.hpp
index 5f78066..16a13e6 100644
--- a/manager.hpp
+++ b/manager.hpp
@@ -143,6 +143,9 @@
using InterfaceComposite = std::map<std::string, HolderPtr>;
using ObjectReferences = std::map<std::string, InterfaceComposite>;
using Events = std::map<const char *, Event>;
+ using MakerType = HolderPtr(*)(
+ sdbusplus::bus::bus &, const char *);
+ using Makers = std::map<std::string, MakerType>;
/** @brief Provided for testing only. */
bool _shutdown;
@@ -167,6 +170,9 @@
/** @brief A container of pimgen generated events and responses. */
static const Events _events;
+
+ /** @brief A container of pimgen generated factory methods. */
+ static const Makers _makers;
};
} // namespace manager
diff --git a/test/test.cpp b/test/test.cpp
index 350684b..6b8e7e1 100644
--- a/test/test.cpp
+++ b/test/test.cpp
@@ -43,8 +43,8 @@
using inner = std::map<std::string, var>;
using outer = std::map<std::string, inner>;
- inner i = {{"test.property", "a"}};
- outer o = {{"test.iface", i}};
+ inner i = {{"ExampleProperty1", "test"}};
+ outer o = {{"xyz.openbmc_project.Example.Iface1", i}};
m.append(o);
auto reply = b.call(m);