From 664d3cff16ceeb2d7136583d5331e9146de40643 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 25 Nov 2024 22:42:13 +0100 Subject: feat: prettify model event handling logic --- include/GFModuleCommonUtils.hpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'include/GFModuleCommonUtils.hpp') diff --git a/include/GFModuleCommonUtils.hpp b/include/GFModuleCommonUtils.hpp index d64f203..1811ffc 100644 --- a/include/GFModuleCommonUtils.hpp +++ b/include/GFModuleCommonUtils.hpp @@ -94,6 +94,23 @@ return ret; \ } +#define DEFINE_EXECUTE_API_USING_STANDARD_EVEN_HANDLE_MODEL \ + EXECUTE_MODULE() { \ + auto event_id = event["event_id"]; \ + auto it = _gr_module_event_handlers.find(event_id); \ + if (it != _gr_module_event_handlers.end()) { \ + return it.value()(event); \ + } \ + CB_ERR(event, -1, QString("unsupported event id: %1").arg(event_id)); \ + } \ + END_EXECUTE_MODULE() + +#define REGISTER_EVENT_HANDLER(event_id, handler) \ + static const bool _gv_register_event_handler_by_id_##event_id = [] { \ + _gr_module_event_handlers[#event_id] = handler; \ + return true; \ + }(); + inline void MLogDebug(const QString& s) { GFModuleLogDebug(s.toUtf8()); } inline void MLogInfo(const QString& s) { GFModuleLogInfo(s.toUtf8()); } inline void MLogWarn(const QString& s) { GFModuleLogWarn(s.toUtf8()); } @@ -121,11 +138,22 @@ inline auto UnStrDup(const char* s) -> QString { return q_s; } +inline auto FormatStringHelper(const QString& format, + const std::string& arg) -> QString { + return format.arg(QString::fromStdString(arg)); +} + template auto FormatStringHelper(const QString& format, T arg) -> QString { return format.arg(arg); } +template +auto FormatStringHelper(const QString& format, const std::string& arg, + Args... args) -> QString { + return FormatStringHelper(format.arg(QString::fromStdString(arg)), args...); +} + template auto FormatStringHelper(const QString& format, T arg, Args... args) -> QString { return FormatStringHelper(format.arg(arg), args...); @@ -135,6 +163,13 @@ inline auto FormatStringHelper(const QString& format) -> QString { return format; } +template +inline auto FormatStringHelper(const T& format) -> + typename std::enable_if::value, + QString>::type { + return FormatStringHelper(QString::fromStdString(format)); +} + template auto FormatString(const QString& format, Args... args) -> QString { return FormatStringHelper(format, args...); -- cgit v1.2.3