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

#include "JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.hpp"

namespace margelo::nitro::rive {
  /**
   * Converts JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName to std::variant<std::shared_ptr<HybridViewModelInstanceSpec>, DataBindMode, DataBindByName>
   */
  std::variant<std::shared_ptr<HybridViewModelInstanceSpec>, DataBindMode, DataBindByName> JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName::toCpp() const {
    if (isInstanceOf(JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName_impl::First::javaClassStatic())) {
      // It's a `std::shared_ptr<HybridViewModelInstanceSpec>`
      auto jniValue = static_cast<const JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName_impl::First*>(this)->getValue();
      return jniValue->getJHybridViewModelInstanceSpec();
    } else if (isInstanceOf(JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName_impl::Second::javaClassStatic())) {
      // It's a `DataBindMode`
      auto jniValue = static_cast<const JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName_impl::Second*>(this)->getValue();
      return jniValue->toCpp();
    } else if (isInstanceOf(JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName_impl::Third::javaClassStatic())) {
      // It's a `DataBindByName`
      auto jniValue = static_cast<const JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName_impl::Third*>(this)->getValue();
      return jniValue->toCpp();
    }
    throw std::invalid_argument("Variant is unknown Kotlin instance!");
  }
} // namespace margelo::nitro::rive
