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

import NitroModules

/**
 * Represents an instance of `NitroFinishTransactionParams`, backed by a C++ struct.
 */
public typealias NitroFinishTransactionParams = margelo.nitro.iap.NitroFinishTransactionParams

public extension NitroFinishTransactionParams {
  private typealias bridge = margelo.nitro.iap.bridge.swift

  /**
   * Create a new instance of `NitroFinishTransactionParams`.
   */
  init(ios: Variant_NullType_NitroFinishTransactionIosParams?, android: Variant_NullType_NitroFinishTransactionAndroidParams?) {
    self.init({ () -> bridge.std__optional_std__variant_nitro__NullType__NitroFinishTransactionIosParams__ in
      if let __unwrappedValue = ios {
        return bridge.create_std__optional_std__variant_nitro__NullType__NitroFinishTransactionIosParams__({ () -> bridge.std__variant_nitro__NullType__NitroFinishTransactionIosParams_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__NitroFinishTransactionIosParams_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__NitroFinishTransactionIosParams_(__value)
          }
        }().variant)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__variant_nitro__NullType__NitroFinishTransactionAndroidParams__ in
      if let __unwrappedValue = android {
        return bridge.create_std__optional_std__variant_nitro__NullType__NitroFinishTransactionAndroidParams__({ () -> bridge.std__variant_nitro__NullType__NitroFinishTransactionAndroidParams_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__NitroFinishTransactionAndroidParams_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__NitroFinishTransactionAndroidParams_(__value)
          }
        }().variant)
      } else {
        return .init()
      }
    }())
  }

  @inline(__always)
  var ios: Variant_NullType_NitroFinishTransactionIosParams? {
    return { () -> Variant_NullType_NitroFinishTransactionIosParams? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__NitroFinishTransactionIosParams__(self.__ios) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__NitroFinishTransactionIosParams__(self.__ios)
        return { () -> Variant_NullType_NitroFinishTransactionIosParams in
          let __variant = bridge.std__variant_nitro__NullType__NitroFinishTransactionIosParams_(__unwrapped)
          switch __variant.index() {
            case 0:
              let __actual = __variant.get_0()
              return .first(NullType.null)
            case 1:
              let __actual = __variant.get_1()
              return .second(__actual)
            default:
              fatalError("Variant can never have index \(__variant.index())!")
          }
        }()
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var android: Variant_NullType_NitroFinishTransactionAndroidParams? {
    return { () -> Variant_NullType_NitroFinishTransactionAndroidParams? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__NitroFinishTransactionAndroidParams__(self.__android) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__NitroFinishTransactionAndroidParams__(self.__android)
        return { () -> Variant_NullType_NitroFinishTransactionAndroidParams in
          let __variant = bridge.std__variant_nitro__NullType__NitroFinishTransactionAndroidParams_(__unwrapped)
          switch __variant.index() {
            case 0:
              let __actual = __variant.get_0()
              return .first(NullType.null)
            case 1:
              let __actual = __variant.get_1()
              return .second(__actual)
            default:
              fatalError("Variant can never have index \(__variant.index())!")
          }
        }()
      } else {
        return nil
      }
    }()
  }
}
