Rewrite pimgen in the image of sdbus++
Almost complete rewrite of pimgen and the mako template.
Adopt the sdbus++ application structure. The hope is that
this will encourage additional sdbusplus features deemed
general purpose enough for reuse with other applications.
Change-Id: I007ff9f5fc9a64f0465159bd1301475ada139d55
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/generated.mako.cpp b/generated.mako.cpp
index 8534674..a024d19 100644
--- a/generated.mako.cpp
+++ b/generated.mako.cpp
@@ -1,16 +1,10 @@
## This file is a template. The comment below is emitted
## into the rendered file; feel free to edit this file.
// This file was auto generated. Do not edit.
-<%
- def interface_type(interface):
- lst = interface.split('.')
- lst.insert(-1, 'server')
- return '::'.join(lst)
-%>
#include "manager.hpp"
#include "utils.hpp"
% for i in interfaces:
-#include <${'/'.join(i.split('.') + ['server.hpp'])}>
+#include <${i.header()}>
% endfor
namespace phosphor
@@ -23,10 +17,10 @@
const Manager::Makers Manager::_makers{
% for i in interfaces:
{
- "${i}",
+ "${str(i)}",
details::MakeInterface<
details::ServerObject<
- sdbusplus::${interface_type(i)}>>::make,
+ ${i.namespace()}>>::make,
},
% endfor
};
@@ -34,47 +28,71 @@
const Manager::Events Manager::_events{
% for e in events:
{
- % if e.get('description'):
- // ${e['description']}
+ % if e.description:
+ // ${e.description.strip()}
% endif
std::make_tuple(
- std::vector<details::EventBasePtr>({
- std::make_shared<details::DbusSignal>(
- % for i, s in enumerate(e['signature'].items()):
- % if i + 1 == len(e['signature']):
- ${'"{0}=\'{1}\'"'.format(*s)},
+ std::vector<details::EventBasePtr>(
+ {
+ % if e.cls == 'match':
+ std::make_shared<details::DbusSignal>(
+ % for i, s in enumerate(e.signatures[0].sig.items()):
+ % if i == 0:
+ ${'"{0}=\'{1}\',"'.format(*s)}
+ % elif i + 1 == len(e.signatures[0].sig):
+ ${'"{0}=\'{1}\'"'.format(*s)},
% else:
- ${'"{0}=\'{1}\',"'.format(*s)}
+ ${'"{0}=\'{1}\',"'.format(*s)}
% endif
% endfor
- % if e['filter'].get('args'):
- details::make_filter(filters::${e['filter']['type']}(
- % for i, a in enumerate(e['filter']['args']):
- % if i + 1 == len(e['filter']['args']):
- "${a['value']}")))}),
+ % if e.filters[0].pointer:
+ details::make_filter(${e.filters[0].bare_method()})),
+ % else:
+ % if e.filters[0].args:
+ details::make_filter(
+ ${e.filters[0].bare_method()}(
+ % for i, arg in enumerate(e.filters[0].args):
+ % if i + 1 != len(e.filters[0].args):
+ ${arg.cppArg()},
% else:
- "${a['value']}",
+ ${arg.cppArg()}))),
% endif
% endfor
% else:
- details::make_filter(filters::${e['filter']['type']}))}),
+ details::make_filter(
+ ${e.filters[0].bare_method()}()),
% endif
- % if e['action'].get('args'):
- std::vector<details::ActionBasePtr>({details::make_action(actions::${e['action']['type']}(
- % for i, a in enumerate(e['action']['args']):
- % if i + 1 == len(e['action']['args']):
- "${a['value']}"))})
- % else:
- "${a['value']}",
- % endif
- % endfor
- % else:
+ % endif
+ % endif
+ }
+ ),
std::vector<details::ActionBasePtr>(
- {details::make_action(actions::${e['action']['type']})})
+ {
+ % for action in e.actions:
+ % if action.pointer:
+ details::make_action(${action.bare_method()}),
+ % else:
+ % if action.args:
+ details::make_action(
+ ${action.bare_method()}(
+ % for i, arg in enumerate(action.args):
+ % if i + 1 != len(action.args):
+ ${arg.cppArg()},
+ % else:
+ ${arg.cppArg()})),
+ % endif
+ % endfor
+ % else:
+ details::make_action(
+ ${action.bare_method()}()),
% endif
- ),
+ % endif
+ % endfor
+ }
+ )
+ )
},
-% endfor
+%endfor
};
} // namespace manager