#ifndef FLUTTER_INAPPWEBVIEW_PLUGIN_UTIL_H_ #define FLUTTER_INAPPWEBVIEW_PLUGIN_UTIL_H_ #include #include #include #include #include "strconv.h" namespace flutter_inappwebview_plugin { static inline void debugLog(const std::string& msg) { #ifndef NDEBUG std::cout << msg << std::endl; OutputDebugString(ansi_to_wide(msg + "\n").c_str()); #endif } template static inline std::optional make_pointer_optional(const T* value) { return value == nullptr ? std::nullopt : std::make_optional(*value); } template static inline T get_fl_map_value(const flutter::EncodableMap map, const char* string) { return std::get(map.at(flutter::EncodableValue(string))); } template static inline std::optional get_optional_fl_map_value(const flutter::EncodableMap map, const char* string) { return make_pointer_optional(std::get_if(&map.at(flutter::EncodableValue(string)))); } static inline std::optional> get_optional_fl_map_value(const flutter::EncodableMap map, const char* string) { auto mapValue = std::map{}; auto flMap = std::get_if(&map.at(flutter::EncodableValue(string))); if (flMap) { for (auto itr = flMap->begin(); itr != flMap->end(); itr++) { mapValue.insert({ std::get(itr->first), std::get(itr->second) }); } } return make_pointer_optional>(&mapValue); } template static inline flutter::EncodableValue optional_to_fl_value(const std::optional optional) { return optional.has_value() ? flutter::EncodableValue(optional.value()) : flutter::EncodableValue(); } static inline flutter::EncodableValue optional_to_fl_value(const std::optional> optional) { if (!optional.has_value()) { return flutter::EncodableValue(); } auto& mapValue = optional.value(); auto encodableMap = flutter::EncodableMap{}; for (auto const& [key, val] : mapValue) { encodableMap.insert({ flutter::EncodableValue(key), flutter::EncodableValue(val) }); } return encodableMap; } static inline std::string variant_to_string(std::variant var) { return std::visit([](auto&& arg) { using T = std::decay_t; if constexpr (std::is_same_v) return arg; else if constexpr (std::is_arithmetic_v) return std::to_string(arg); else static_assert(always_false_v, "non-exhaustive visitor!"); }, var); } } #endif //FLUTTER_INAPPWEBVIEW_PLUGIN_UTIL_H_