///
/// JRequestPurchaseResult.cpp
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
/// https://github.com/mrousavy/nitro
/// Copyright © Marc Rousavy @ Margelo
///

#include "JRequestPurchaseResult.hpp"

namespace margelo::nitro::iap {
  /**
   * Converts JRequestPurchaseResult to std::variant<nitro::NullType, PurchaseAndroid, PurchaseIOS, std::vector<std::variant<PurchaseAndroid, PurchaseIOS>>>
   */
  std::variant<nitro::NullType, PurchaseAndroid, PurchaseIOS, std::vector<std::variant<PurchaseAndroid, PurchaseIOS>>> JRequestPurchaseResult::toCpp() const {
    if (isInstanceOf(JRequestPurchaseResult_impl::First::javaClassStatic())) {
      // It's a `nitro::NullType`
      auto jniValue = static_cast<const JRequestPurchaseResult_impl::First*>(this)->getValue();
      return nitro::null;
    } else if (isInstanceOf(JRequestPurchaseResult_impl::Second::javaClassStatic())) {
      // It's a `PurchaseAndroid`
      auto jniValue = static_cast<const JRequestPurchaseResult_impl::Second*>(this)->getValue();
      return jniValue->toCpp();
    } else if (isInstanceOf(JRequestPurchaseResult_impl::Third::javaClassStatic())) {
      // It's a `PurchaseIOS`
      auto jniValue = static_cast<const JRequestPurchaseResult_impl::Third*>(this)->getValue();
      return jniValue->toCpp();
    } else if (isInstanceOf(JRequestPurchaseResult_impl::Fourth::javaClassStatic())) {
      // It's a `std::vector<std::variant<PurchaseAndroid, PurchaseIOS>>`
      auto jniValue = static_cast<const JRequestPurchaseResult_impl::Fourth*>(this)->getValue();
      return [&]() {
        size_t __size = jniValue->size();
        std::vector<std::variant<PurchaseAndroid, PurchaseIOS>> __vector;
        __vector.reserve(__size);
        for (size_t __i = 0; __i < __size; __i++) {
          auto __element = jniValue->getElement(__i);
          __vector.push_back(__element->toCpp());
        }
        return __vector;
      }();
    }
    throw std::invalid_argument("Variant is unknown Kotlin instance!");
  }
} // namespace margelo::nitro::iap
