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

#pragma once

#if __has_include(<NitroModules/JSIConverter.hpp>)
#include <NitroModules/JSIConverter.hpp>
#else
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
#endif
#if __has_include(<NitroModules/NitroDefines.hpp>)
#include <NitroModules/NitroDefines.hpp>
#else
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
#endif
#if __has_include(<NitroModules/JSIHelpers.hpp>)
#include <NitroModules/JSIHelpers.hpp>
#else
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
#endif
#if __has_include(<NitroModules/PropNameIDCache.hpp>)
#include <NitroModules/PropNameIDCache.hpp>
#else
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
#endif

// Forward declaration of `IapPlatform` to properly resolve imports.
namespace margelo::nitro::iap { enum class IapPlatform; }
// Forward declaration of `PaymentModeIOS` to properly resolve imports.
namespace margelo::nitro::iap { enum class PaymentModeIOS; }
// Forward declaration of `NitroOneTimePurchaseOfferDetail` to properly resolve imports.
namespace margelo::nitro::iap { struct NitroOneTimePurchaseOfferDetail; }

#include <string>
#include <NitroModules/Null.hpp>
#include <variant>
#include <optional>
#include "IapPlatform.hpp"
#include "PaymentModeIOS.hpp"
#include "NitroOneTimePurchaseOfferDetail.hpp"
#include <vector>

namespace margelo::nitro::iap {

  /**
   * A struct which can be represented as a JavaScript object (NitroProduct).
   */
  struct NitroProduct final {
  public:
    std::string id     SWIFT_PRIVATE;
    std::string title     SWIFT_PRIVATE;
    std::string description     SWIFT_PRIVATE;
    std::string type     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> displayName     SWIFT_PRIVATE;
    std::optional<std::string> displayPrice     SWIFT_PRIVATE;
    std::optional<std::string> currency     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, double>> price     SWIFT_PRIVATE;
    IapPlatform platform     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> typeIOS     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, bool>> isFamilyShareableIOS     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> jsonRepresentationIOS     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> discountsIOS     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> introductoryPriceIOS     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, double>> introductoryPriceAsAmountIOS     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, double>> introductoryPriceNumberOfPeriodsIOS     SWIFT_PRIVATE;
    PaymentModeIOS introductoryPricePaymentModeIOS     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> introductoryPriceSubscriptionPeriodIOS     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, double>> subscriptionPeriodNumberIOS     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> subscriptionPeriodUnitIOS     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> subscriptionOffers     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> discountOffers     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> nameAndroid     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> originalPriceAndroid     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, double>> originalPriceAmountMicrosAndroid     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, double>> introductoryPriceCyclesAndroid     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> introductoryPricePeriodAndroid     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, double>> introductoryPriceValueAndroid     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> subscriptionPeriodAndroid     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> freeTrialPeriodAndroid     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> subscriptionOfferDetailsAndroid     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::vector<NitroOneTimePurchaseOfferDetail>>> oneTimePurchaseOfferDetailsAndroid     SWIFT_PRIVATE;
    std::optional<std::variant<nitro::NullType, std::string>> productStatusAndroid     SWIFT_PRIVATE;

  public:
    NitroProduct() = default;
    explicit NitroProduct(std::string id, std::string title, std::string description, std::string type, std::optional<std::variant<nitro::NullType, std::string>> displayName, std::optional<std::string> displayPrice, std::optional<std::string> currency, std::optional<std::variant<nitro::NullType, double>> price, IapPlatform platform, std::optional<std::variant<nitro::NullType, std::string>> typeIOS, std::optional<std::variant<nitro::NullType, bool>> isFamilyShareableIOS, std::optional<std::variant<nitro::NullType, std::string>> jsonRepresentationIOS, std::optional<std::variant<nitro::NullType, std::string>> discountsIOS, std::optional<std::variant<nitro::NullType, std::string>> introductoryPriceIOS, std::optional<std::variant<nitro::NullType, double>> introductoryPriceAsAmountIOS, std::optional<std::variant<nitro::NullType, double>> introductoryPriceNumberOfPeriodsIOS, PaymentModeIOS introductoryPricePaymentModeIOS, std::optional<std::variant<nitro::NullType, std::string>> introductoryPriceSubscriptionPeriodIOS, std::optional<std::variant<nitro::NullType, double>> subscriptionPeriodNumberIOS, std::optional<std::variant<nitro::NullType, std::string>> subscriptionPeriodUnitIOS, std::optional<std::variant<nitro::NullType, std::string>> subscriptionOffers, std::optional<std::variant<nitro::NullType, std::string>> discountOffers, std::optional<std::variant<nitro::NullType, std::string>> nameAndroid, std::optional<std::variant<nitro::NullType, std::string>> originalPriceAndroid, std::optional<std::variant<nitro::NullType, double>> originalPriceAmountMicrosAndroid, std::optional<std::variant<nitro::NullType, double>> introductoryPriceCyclesAndroid, std::optional<std::variant<nitro::NullType, std::string>> introductoryPricePeriodAndroid, std::optional<std::variant<nitro::NullType, double>> introductoryPriceValueAndroid, std::optional<std::variant<nitro::NullType, std::string>> subscriptionPeriodAndroid, std::optional<std::variant<nitro::NullType, std::string>> freeTrialPeriodAndroid, std::optional<std::variant<nitro::NullType, std::string>> subscriptionOfferDetailsAndroid, std::optional<std::variant<nitro::NullType, std::vector<NitroOneTimePurchaseOfferDetail>>> oneTimePurchaseOfferDetailsAndroid, std::optional<std::variant<nitro::NullType, std::string>> productStatusAndroid): id(id), title(title), description(description), type(type), displayName(displayName), displayPrice(displayPrice), currency(currency), price(price), platform(platform), typeIOS(typeIOS), isFamilyShareableIOS(isFamilyShareableIOS), jsonRepresentationIOS(jsonRepresentationIOS), discountsIOS(discountsIOS), introductoryPriceIOS(introductoryPriceIOS), introductoryPriceAsAmountIOS(introductoryPriceAsAmountIOS), introductoryPriceNumberOfPeriodsIOS(introductoryPriceNumberOfPeriodsIOS), introductoryPricePaymentModeIOS(introductoryPricePaymentModeIOS), introductoryPriceSubscriptionPeriodIOS(introductoryPriceSubscriptionPeriodIOS), subscriptionPeriodNumberIOS(subscriptionPeriodNumberIOS), subscriptionPeriodUnitIOS(subscriptionPeriodUnitIOS), subscriptionOffers(subscriptionOffers), discountOffers(discountOffers), nameAndroid(nameAndroid), originalPriceAndroid(originalPriceAndroid), originalPriceAmountMicrosAndroid(originalPriceAmountMicrosAndroid), introductoryPriceCyclesAndroid(introductoryPriceCyclesAndroid), introductoryPricePeriodAndroid(introductoryPricePeriodAndroid), introductoryPriceValueAndroid(introductoryPriceValueAndroid), subscriptionPeriodAndroid(subscriptionPeriodAndroid), freeTrialPeriodAndroid(freeTrialPeriodAndroid), subscriptionOfferDetailsAndroid(subscriptionOfferDetailsAndroid), oneTimePurchaseOfferDetailsAndroid(oneTimePurchaseOfferDetailsAndroid), productStatusAndroid(productStatusAndroid) {}

  public:
    friend bool operator==(const NitroProduct& lhs, const NitroProduct& rhs) = default;
  };

} // namespace margelo::nitro::iap

namespace margelo::nitro {

  // C++ NitroProduct <> JS NitroProduct (object)
  template <>
  struct JSIConverter<margelo::nitro::iap::NitroProduct> final {
    static inline margelo::nitro::iap::NitroProduct fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
      jsi::Object obj = arg.asObject(runtime);
      return margelo::nitro::iap::NitroProduct(
        JSIConverter<std::string>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "id"))),
        JSIConverter<std::string>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "title"))),
        JSIConverter<std::string>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "description"))),
        JSIConverter<std::string>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "type"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "displayName"))),
        JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "displayPrice"))),
        JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "currency"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "price"))),
        JSIConverter<margelo::nitro::iap::IapPlatform>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "platform"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "typeIOS"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, bool>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "isFamilyShareableIOS"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "jsonRepresentationIOS"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "discountsIOS"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceIOS"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceAsAmountIOS"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceNumberOfPeriodsIOS"))),
        JSIConverter<margelo::nitro::iap::PaymentModeIOS>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPricePaymentModeIOS"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceSubscriptionPeriodIOS"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "subscriptionPeriodNumberIOS"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "subscriptionPeriodUnitIOS"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "subscriptionOffers"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "discountOffers"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "nameAndroid"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "originalPriceAndroid"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "originalPriceAmountMicrosAndroid"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceCyclesAndroid"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPricePeriodAndroid"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceValueAndroid"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "subscriptionPeriodAndroid"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "freeTrialPeriodAndroid"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "subscriptionOfferDetailsAndroid"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::vector<margelo::nitro::iap::NitroOneTimePurchaseOfferDetail>>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "oneTimePurchaseOfferDetailsAndroid"))),
        JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "productStatusAndroid")))
      );
    }
    static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::iap::NitroProduct& arg) {
      jsi::Object obj(runtime);
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "id"), JSIConverter<std::string>::toJSI(runtime, arg.id));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "title"), JSIConverter<std::string>::toJSI(runtime, arg.title));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "description"), JSIConverter<std::string>::toJSI(runtime, arg.description));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "type"), JSIConverter<std::string>::toJSI(runtime, arg.type));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "displayName"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.displayName));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "displayPrice"), JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.displayPrice));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "currency"), JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.currency));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "price"), JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::toJSI(runtime, arg.price));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "platform"), JSIConverter<margelo::nitro::iap::IapPlatform>::toJSI(runtime, arg.platform));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "typeIOS"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.typeIOS));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "isFamilyShareableIOS"), JSIConverter<std::optional<std::variant<nitro::NullType, bool>>>::toJSI(runtime, arg.isFamilyShareableIOS));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "jsonRepresentationIOS"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.jsonRepresentationIOS));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "discountsIOS"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.discountsIOS));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceIOS"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.introductoryPriceIOS));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceAsAmountIOS"), JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::toJSI(runtime, arg.introductoryPriceAsAmountIOS));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceNumberOfPeriodsIOS"), JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::toJSI(runtime, arg.introductoryPriceNumberOfPeriodsIOS));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "introductoryPricePaymentModeIOS"), JSIConverter<margelo::nitro::iap::PaymentModeIOS>::toJSI(runtime, arg.introductoryPricePaymentModeIOS));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceSubscriptionPeriodIOS"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.introductoryPriceSubscriptionPeriodIOS));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "subscriptionPeriodNumberIOS"), JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::toJSI(runtime, arg.subscriptionPeriodNumberIOS));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "subscriptionPeriodUnitIOS"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.subscriptionPeriodUnitIOS));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "subscriptionOffers"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.subscriptionOffers));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "discountOffers"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.discountOffers));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "nameAndroid"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.nameAndroid));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "originalPriceAndroid"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.originalPriceAndroid));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "originalPriceAmountMicrosAndroid"), JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::toJSI(runtime, arg.originalPriceAmountMicrosAndroid));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceCyclesAndroid"), JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::toJSI(runtime, arg.introductoryPriceCyclesAndroid));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "introductoryPricePeriodAndroid"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.introductoryPricePeriodAndroid));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceValueAndroid"), JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::toJSI(runtime, arg.introductoryPriceValueAndroid));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "subscriptionPeriodAndroid"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.subscriptionPeriodAndroid));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "freeTrialPeriodAndroid"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.freeTrialPeriodAndroid));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "subscriptionOfferDetailsAndroid"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.subscriptionOfferDetailsAndroid));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "oneTimePurchaseOfferDetailsAndroid"), JSIConverter<std::optional<std::variant<nitro::NullType, std::vector<margelo::nitro::iap::NitroOneTimePurchaseOfferDetail>>>>::toJSI(runtime, arg.oneTimePurchaseOfferDetailsAndroid));
      obj.setProperty(runtime, PropNameIDCache::get(runtime, "productStatusAndroid"), JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.productStatusAndroid));
      return obj;
    }
    static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
      if (!value.isObject()) {
        return false;
      }
      jsi::Object obj = value.getObject(runtime);
      if (!nitro::isPlainObject(runtime, obj)) {
        return false;
      }
      if (!JSIConverter<std::string>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "id")))) return false;
      if (!JSIConverter<std::string>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "title")))) return false;
      if (!JSIConverter<std::string>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "description")))) return false;
      if (!JSIConverter<std::string>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "type")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "displayName")))) return false;
      if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "displayPrice")))) return false;
      if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "currency")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "price")))) return false;
      if (!JSIConverter<margelo::nitro::iap::IapPlatform>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "platform")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "typeIOS")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, bool>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "isFamilyShareableIOS")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "jsonRepresentationIOS")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "discountsIOS")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceIOS")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceAsAmountIOS")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceNumberOfPeriodsIOS")))) return false;
      if (!JSIConverter<margelo::nitro::iap::PaymentModeIOS>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPricePaymentModeIOS")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceSubscriptionPeriodIOS")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "subscriptionPeriodNumberIOS")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "subscriptionPeriodUnitIOS")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "subscriptionOffers")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "discountOffers")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "nameAndroid")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "originalPriceAndroid")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "originalPriceAmountMicrosAndroid")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceCyclesAndroid")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPricePeriodAndroid")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "introductoryPriceValueAndroid")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "subscriptionPeriodAndroid")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "freeTrialPeriodAndroid")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "subscriptionOfferDetailsAndroid")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::vector<margelo::nitro::iap::NitroOneTimePurchaseOfferDetail>>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "oneTimePurchaseOfferDetailsAndroid")))) return false;
      if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "productStatusAndroid")))) return false;
      return true;
    }
  };

} // namespace margelo::nitro
