///
/// PurchaseAndroid.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 `PurchaseAndroid`, backed by a C++ struct.
 */
public typealias PurchaseAndroid = margelo.nitro.iap.PurchaseAndroid

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

  /**
   * Create a new instance of `PurchaseAndroid`.
   */
  init(autoRenewingAndroid: Variant_NullType_Bool?, currentPlanId: Variant_NullType_String?, dataAndroid: Variant_NullType_String?, developerPayloadAndroid: Variant_NullType_String?, id: String, ids: Variant_NullType__String_?, isAcknowledgedAndroid: Variant_NullType_Bool?, isAutoRenewing: Bool, isSuspendedAndroid: Variant_NullType_Bool?, obfuscatedAccountIdAndroid: Variant_NullType_String?, obfuscatedProfileIdAndroid: Variant_NullType_String?, packageNameAndroid: Variant_NullType_String?, pendingPurchaseUpdateAndroid: Variant_NullType_PendingPurchaseUpdateAndroid?, platform: IapPlatform, productId: String, purchaseState: PurchaseState, purchaseToken: Variant_NullType_String?, quantity: Double, signatureAndroid: Variant_NullType_String?, store: IapStore, transactionDate: Double, transactionId: Variant_NullType_String?) {
    self.init({ () -> bridge.std__optional_std__variant_nitro__NullType__bool__ in
      if let __unwrappedValue = autoRenewingAndroid {
        return bridge.create_std__optional_std__variant_nitro__NullType__bool__({ () -> bridge.std__variant_nitro__NullType__bool_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__bool_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__bool_(__value)
          }
        }().variant)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__variant_nitro__NullType__std__string__ in
      if let __unwrappedValue = currentPlanId {
        return bridge.create_std__optional_std__variant_nitro__NullType__std__string__({ () -> bridge.std__variant_nitro__NullType__std__string_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(std.string(__value))
          }
        }().variant)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__variant_nitro__NullType__std__string__ in
      if let __unwrappedValue = dataAndroid {
        return bridge.create_std__optional_std__variant_nitro__NullType__std__string__({ () -> bridge.std__variant_nitro__NullType__std__string_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(std.string(__value))
          }
        }().variant)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__variant_nitro__NullType__std__string__ in
      if let __unwrappedValue = developerPayloadAndroid {
        return bridge.create_std__optional_std__variant_nitro__NullType__std__string__({ () -> bridge.std__variant_nitro__NullType__std__string_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(std.string(__value))
          }
        }().variant)
      } else {
        return .init()
      }
    }(), std.string(id), { () -> bridge.std__optional_std__variant_nitro__NullType__std__vector_std__string___ in
      if let __unwrappedValue = ids {
        return bridge.create_std__optional_std__variant_nitro__NullType__std__vector_std__string___({ () -> bridge.std__variant_nitro__NullType__std__vector_std__string__ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__std__vector_std__string__(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__std__vector_std__string__({ () -> bridge.std__vector_std__string_ in
                var __vector = bridge.create_std__vector_std__string_(__value.count)
                for __item in __value {
                  __vector.push_back(std.string(__item))
                }
                return __vector
              }())
          }
        }().variant)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__variant_nitro__NullType__bool__ in
      if let __unwrappedValue = isAcknowledgedAndroid {
        return bridge.create_std__optional_std__variant_nitro__NullType__bool__({ () -> bridge.std__variant_nitro__NullType__bool_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__bool_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__bool_(__value)
          }
        }().variant)
      } else {
        return .init()
      }
    }(), isAutoRenewing, { () -> bridge.std__optional_std__variant_nitro__NullType__bool__ in
      if let __unwrappedValue = isSuspendedAndroid {
        return bridge.create_std__optional_std__variant_nitro__NullType__bool__({ () -> bridge.std__variant_nitro__NullType__bool_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__bool_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__bool_(__value)
          }
        }().variant)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__variant_nitro__NullType__std__string__ in
      if let __unwrappedValue = obfuscatedAccountIdAndroid {
        return bridge.create_std__optional_std__variant_nitro__NullType__std__string__({ () -> bridge.std__variant_nitro__NullType__std__string_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(std.string(__value))
          }
        }().variant)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__variant_nitro__NullType__std__string__ in
      if let __unwrappedValue = obfuscatedProfileIdAndroid {
        return bridge.create_std__optional_std__variant_nitro__NullType__std__string__({ () -> bridge.std__variant_nitro__NullType__std__string_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(std.string(__value))
          }
        }().variant)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__variant_nitro__NullType__std__string__ in
      if let __unwrappedValue = packageNameAndroid {
        return bridge.create_std__optional_std__variant_nitro__NullType__std__string__({ () -> bridge.std__variant_nitro__NullType__std__string_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(std.string(__value))
          }
        }().variant)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__variant_nitro__NullType__PendingPurchaseUpdateAndroid__ in
      if let __unwrappedValue = pendingPurchaseUpdateAndroid {
        return bridge.create_std__optional_std__variant_nitro__NullType__PendingPurchaseUpdateAndroid__({ () -> bridge.std__variant_nitro__NullType__PendingPurchaseUpdateAndroid_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__PendingPurchaseUpdateAndroid_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__PendingPurchaseUpdateAndroid_(__value)
          }
        }().variant)
      } else {
        return .init()
      }
    }(), platform, std.string(productId), purchaseState, { () -> bridge.std__optional_std__variant_nitro__NullType__std__string__ in
      if let __unwrappedValue = purchaseToken {
        return bridge.create_std__optional_std__variant_nitro__NullType__std__string__({ () -> bridge.std__variant_nitro__NullType__std__string_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(std.string(__value))
          }
        }().variant)
      } else {
        return .init()
      }
    }(), quantity, { () -> bridge.std__optional_std__variant_nitro__NullType__std__string__ in
      if let __unwrappedValue = signatureAndroid {
        return bridge.create_std__optional_std__variant_nitro__NullType__std__string__({ () -> bridge.std__variant_nitro__NullType__std__string_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(std.string(__value))
          }
        }().variant)
      } else {
        return .init()
      }
    }(), store, transactionDate, { () -> bridge.std__optional_std__variant_nitro__NullType__std__string__ in
      if let __unwrappedValue = transactionId {
        return bridge.create_std__optional_std__variant_nitro__NullType__std__string__({ () -> bridge.std__variant_nitro__NullType__std__string_ in
          switch __unwrappedValue {
            case .first(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(margelo.nitro.NullType.null)
            case .second(let __value):
              return bridge.create_std__variant_nitro__NullType__std__string_(std.string(__value))
          }
        }().variant)
      } else {
        return .init()
      }
    }())
  }

  @inline(__always)
  var autoRenewingAndroid: Variant_NullType_Bool? {
    return { () -> Variant_NullType_Bool? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__bool__(self.__autoRenewingAndroid) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__bool__(self.__autoRenewingAndroid)
        return { () -> Variant_NullType_Bool in
          let __variant = bridge.std__variant_nitro__NullType__bool_(__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 currentPlanId: Variant_NullType_String? {
    return { () -> Variant_NullType_String? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__std__string__(self.__currentPlanId) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__std__string__(self.__currentPlanId)
        return { () -> Variant_NullType_String in
          let __variant = bridge.std__variant_nitro__NullType__std__string_(__unwrapped)
          switch __variant.index() {
            case 0:
              let __actual = __variant.get_0()
              return .first(NullType.null)
            case 1:
              let __actual = __variant.get_1()
              return .second(String(__actual))
            default:
              fatalError("Variant can never have index \(__variant.index())!")
          }
        }()
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var dataAndroid: Variant_NullType_String? {
    return { () -> Variant_NullType_String? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__std__string__(self.__dataAndroid) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__std__string__(self.__dataAndroid)
        return { () -> Variant_NullType_String in
          let __variant = bridge.std__variant_nitro__NullType__std__string_(__unwrapped)
          switch __variant.index() {
            case 0:
              let __actual = __variant.get_0()
              return .first(NullType.null)
            case 1:
              let __actual = __variant.get_1()
              return .second(String(__actual))
            default:
              fatalError("Variant can never have index \(__variant.index())!")
          }
        }()
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var developerPayloadAndroid: Variant_NullType_String? {
    return { () -> Variant_NullType_String? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__std__string__(self.__developerPayloadAndroid) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__std__string__(self.__developerPayloadAndroid)
        return { () -> Variant_NullType_String in
          let __variant = bridge.std__variant_nitro__NullType__std__string_(__unwrapped)
          switch __variant.index() {
            case 0:
              let __actual = __variant.get_0()
              return .first(NullType.null)
            case 1:
              let __actual = __variant.get_1()
              return .second(String(__actual))
            default:
              fatalError("Variant can never have index \(__variant.index())!")
          }
        }()
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var id: String {
    return String(self.__id)
  }
  
  @inline(__always)
  var ids: Variant_NullType__String_? {
    return { () -> Variant_NullType__String_? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__std__vector_std__string___(self.__ids) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__std__vector_std__string___(self.__ids)
        return { () -> Variant_NullType__String_ in
          let __variant = bridge.std__variant_nitro__NullType__std__vector_std__string__(__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.map({ __item in String(__item) }))
            default:
              fatalError("Variant can never have index \(__variant.index())!")
          }
        }()
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var isAcknowledgedAndroid: Variant_NullType_Bool? {
    return { () -> Variant_NullType_Bool? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__bool__(self.__isAcknowledgedAndroid) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__bool__(self.__isAcknowledgedAndroid)
        return { () -> Variant_NullType_Bool in
          let __variant = bridge.std__variant_nitro__NullType__bool_(__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 isAutoRenewing: Bool {
    return self.__isAutoRenewing
  }
  
  @inline(__always)
  var isSuspendedAndroid: Variant_NullType_Bool? {
    return { () -> Variant_NullType_Bool? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__bool__(self.__isSuspendedAndroid) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__bool__(self.__isSuspendedAndroid)
        return { () -> Variant_NullType_Bool in
          let __variant = bridge.std__variant_nitro__NullType__bool_(__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 obfuscatedAccountIdAndroid: Variant_NullType_String? {
    return { () -> Variant_NullType_String? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__std__string__(self.__obfuscatedAccountIdAndroid) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__std__string__(self.__obfuscatedAccountIdAndroid)
        return { () -> Variant_NullType_String in
          let __variant = bridge.std__variant_nitro__NullType__std__string_(__unwrapped)
          switch __variant.index() {
            case 0:
              let __actual = __variant.get_0()
              return .first(NullType.null)
            case 1:
              let __actual = __variant.get_1()
              return .second(String(__actual))
            default:
              fatalError("Variant can never have index \(__variant.index())!")
          }
        }()
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var obfuscatedProfileIdAndroid: Variant_NullType_String? {
    return { () -> Variant_NullType_String? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__std__string__(self.__obfuscatedProfileIdAndroid) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__std__string__(self.__obfuscatedProfileIdAndroid)
        return { () -> Variant_NullType_String in
          let __variant = bridge.std__variant_nitro__NullType__std__string_(__unwrapped)
          switch __variant.index() {
            case 0:
              let __actual = __variant.get_0()
              return .first(NullType.null)
            case 1:
              let __actual = __variant.get_1()
              return .second(String(__actual))
            default:
              fatalError("Variant can never have index \(__variant.index())!")
          }
        }()
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var packageNameAndroid: Variant_NullType_String? {
    return { () -> Variant_NullType_String? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__std__string__(self.__packageNameAndroid) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__std__string__(self.__packageNameAndroid)
        return { () -> Variant_NullType_String in
          let __variant = bridge.std__variant_nitro__NullType__std__string_(__unwrapped)
          switch __variant.index() {
            case 0:
              let __actual = __variant.get_0()
              return .first(NullType.null)
            case 1:
              let __actual = __variant.get_1()
              return .second(String(__actual))
            default:
              fatalError("Variant can never have index \(__variant.index())!")
          }
        }()
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var pendingPurchaseUpdateAndroid: Variant_NullType_PendingPurchaseUpdateAndroid? {
    return { () -> Variant_NullType_PendingPurchaseUpdateAndroid? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__PendingPurchaseUpdateAndroid__(self.__pendingPurchaseUpdateAndroid) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__PendingPurchaseUpdateAndroid__(self.__pendingPurchaseUpdateAndroid)
        return { () -> Variant_NullType_PendingPurchaseUpdateAndroid in
          let __variant = bridge.std__variant_nitro__NullType__PendingPurchaseUpdateAndroid_(__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 platform: IapPlatform {
    return self.__platform
  }
  
  @inline(__always)
  var productId: String {
    return String(self.__productId)
  }
  
  @inline(__always)
  var purchaseState: PurchaseState {
    return self.__purchaseState
  }
  
  @inline(__always)
  var purchaseToken: Variant_NullType_String? {
    return { () -> Variant_NullType_String? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__std__string__(self.__purchaseToken) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__std__string__(self.__purchaseToken)
        return { () -> Variant_NullType_String in
          let __variant = bridge.std__variant_nitro__NullType__std__string_(__unwrapped)
          switch __variant.index() {
            case 0:
              let __actual = __variant.get_0()
              return .first(NullType.null)
            case 1:
              let __actual = __variant.get_1()
              return .second(String(__actual))
            default:
              fatalError("Variant can never have index \(__variant.index())!")
          }
        }()
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var quantity: Double {
    return self.__quantity
  }
  
  @inline(__always)
  var signatureAndroid: Variant_NullType_String? {
    return { () -> Variant_NullType_String? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__std__string__(self.__signatureAndroid) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__std__string__(self.__signatureAndroid)
        return { () -> Variant_NullType_String in
          let __variant = bridge.std__variant_nitro__NullType__std__string_(__unwrapped)
          switch __variant.index() {
            case 0:
              let __actual = __variant.get_0()
              return .first(NullType.null)
            case 1:
              let __actual = __variant.get_1()
              return .second(String(__actual))
            default:
              fatalError("Variant can never have index \(__variant.index())!")
          }
        }()
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var store: IapStore {
    return self.__store
  }
  
  @inline(__always)
  var transactionDate: Double {
    return self.__transactionDate
  }
  
  @inline(__always)
  var transactionId: Variant_NullType_String? {
    return { () -> Variant_NullType_String? in
      if bridge.has_value_std__optional_std__variant_nitro__NullType__std__string__(self.__transactionId) {
        let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__std__string__(self.__transactionId)
        return { () -> Variant_NullType_String in
          let __variant = bridge.std__variant_nitro__NullType__std__string_(__unwrapped)
          switch __variant.index() {
            case 0:
              let __actual = __variant.get_0()
              return .first(NullType.null)
            case 1:
              let __actual = __variant.get_1()
              return .second(String(__actual))
            default:
              fatalError("Variant can never have index \(__variant.index())!")
          }
        }()
      } else {
        return nil
      }
    }()
  }
}
