diff options
Diffstat (limited to 'src/dbus/server/session-common.h')
-rw-r--r-- | src/dbus/server/session-common.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/dbus/server/session-common.h b/src/dbus/server/session-common.h index ce8bb1c4..83fe246c 100644 --- a/src/dbus/server/session-common.h +++ b/src/dbus/server/session-common.h @@ -195,6 +195,83 @@ namespace GDBusCXX { base::append(builder, array); } }; + + template <> struct dbus_traits<SyncReport> : + public dbus_traits< std::string > + { + typedef dbus_traits< std::string > base; + + typedef SyncReport host_type; + typedef const SyncReport &arg_type; + +#ifdef GDBUS_CXX_GIO + static void get(GDBusCXX::ExtractArgs &context, + GDBusCXX::reader_type &iter, host_type &report) + { + std::string dump; + base::get(context, iter, dump); + report = SyncReport(dump); + } +#else + static void get(GDBusCXX::connection_type *conn, GDBusCXX::message_type *msg, + GDBusCXX::reader_type &iter, host_type &report) + { + std::string dump; + base::get(conn, msg, iter, dump); + report = SyncReport(dump); + } +#endif + + static void append(GDBusCXX::builder_type &builder, arg_type report) + { + base::append(builder, report.toString()); + } + }; + + template <> struct dbus_traits<SyncSourceReport> : + public dbus_traits< std::string > + { + typedef dbus_traits< std::string > base; + + typedef SyncSourceReport host_type; + typedef const SyncSourceReport &arg_type; + +#ifdef GDBUS_CXX_GIO + static void get(GDBusCXX::ExtractArgs &context, + GDBusCXX::reader_type &iter, host_type &source) + { + std::string dump; + base::get(context, iter, dump); + SyncReport report = SyncReport(dump); + const SyncSourceReport *foo = report.findSyncSourceReport("foo"); + if (!foo) { + SE_THROW("incomplete SyncReport"); + } + source = *foo; + } +#else + static void get(GDBusCXX::connection_type *conn, GDBusCXX::message_type *msg, + GDBusCXX::reader_type &iter, host_type &source) + { + std::string dump; + base::get(conn, msg, iter, dump); + SyncReport report = SyncReport(dump); + const SyncSourceReport *foo = report.findSyncSourceReport("foo"); + if (!foo) { + SE_THROW("incomplete SyncReport"); + } + source = *foo; + } +#endif + + static void append(GDBusCXX::builder_type &builder, arg_type source) + { + SyncReport report; + report.addSyncSourceReport("foo", source); + base::append(builder, report.toString()); + } + }; + } #endif // SESSION_COMMON_H |