summaryrefslogtreecommitdiff
path: root/src/proxyutils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/proxyutils.h')
-rw-r--r--src/proxyutils.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/proxyutils.h b/src/proxyutils.h
new file mode 100644
index 00000000..4c1717d8
--- /dev/null
+++ b/src/proxyutils.h
@@ -0,0 +1,26 @@
+#ifndef PROXYUTILS_H
+#define PROXYUTILS_H
+
+#include <type_traits>
+
+#include "organizerproxy.h"
+
+namespace MOShared {
+
+ template <class Fn, class T = int>
+ auto callIfPluginActive(OrganizerProxy* proxy, Fn&& callback, T defaultReturn = T{}) {
+ return [fn = std::forward<Fn>(callback), proxy, defaultReturn](auto&& ...args) {
+ if (proxy->plugin()->isActive()) {
+ return fn(std::forward<decltype(args)>(args)...);
+ }
+ else {
+ if constexpr (!std::is_same_v<std::invoke_result_t<std::decay_t<Fn>, decltype(args)... >, void>) {
+ return defaultReturn;
+ }
+ }
+ };
+ }
+
+}
+
+#endif