#ifndef PROXYUTILS_H #define PROXYUTILS_H #include #include "organizerproxy.h" namespace MOShared { template auto callIfPluginActive(OrganizerProxy* proxy, Fn&& callback, T defaultReturn = T{}) { return [fn = std::forward(callback), proxy, defaultReturn](auto&&... args) { if (proxy->isPluginEnabled(proxy->plugin())) { return fn(std::forward(args)...); } else { if constexpr (!std::is_same_v< std::invoke_result_t, decltype(args)...>, void>) { return defaultReturn; } } }; } // We need to connect to the organizer. template auto callSignalIfPluginActive(OrganizerProxy* proxy, const Signal& signal, T defaultReturn = T{}) { return callIfPluginActive( proxy, [&signal](auto&&... args) { return signal(std::forward(args)...); }, defaultReturn); } template auto callSignalAlways(const Signal& signal) { return [&signal](auto&&... args) { return signal(std::forward(args)...); }; } } // namespace MOShared #endif