#pragma once #include "config/WUPSConfigAPI.h" #include #include #include class PluginConfigData { public: PluginConfigData(std::string_view name, WUPSConfigAPI_MenuOpenedCallback openedCallback, WUPSConfigAPI_MenuClosedCallback closedCallback) : mName(name), mOpenedCallback(openedCallback), mClosedCallback(closedCallback) { } [[nodiscard]] std::optional createConfig() const{ WUPSConfigHandle handle; if (WUPSConfigAPIBackend::Intern::CreateConfig(mName.c_str(), &handle) == WUPSCONFIG_API_RESULT_SUCCESS) { return handle; } return std::nullopt; } [[nodiscard]] WUPSConfigAPIStatus CallMenuOpenendCallback(WUPSConfigHandle config) const { if (mOpenedCallback == nullptr) { return WUPSCONFIG_API_RESULT_MISSING_CALLBACK; } if (mOpenedCallback(WUPSConfigCategoryHandle(config.handle)) != WUPSCONFIG_API_CALLBACK_RESULT_SUCCESS) { return WUPSCONFIG_API_RESULT_UNKNOWN_ERROR; } return WUPSCONFIG_API_RESULT_SUCCESS; } [[nodiscard]] WUPSConfigAPIStatus CallMenuClosedCallback() const { if (mClosedCallback == nullptr) { return WUPSCONFIG_API_RESULT_MISSING_CALLBACK; } mClosedCallback(); return WUPSCONFIG_API_RESULT_SUCCESS; } static std::optional create(WUPSConfigAPIOptions options, WUPSConfigAPI_MenuOpenedCallback openedCallback, WUPSConfigAPI_MenuClosedCallback closedCallback) { if (options.version != 1) { return std::nullopt; } PluginConfigData result(options.data.v1.name, openedCallback, closedCallback); return result; } private: std::string mName; WUPSConfigAPI_MenuOpenedCallback mOpenedCallback; WUPSConfigAPI_MenuClosedCallback mClosedCallback; };