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

import NitroModules

/**
 * A class implementation that bridges HybridMunimBluetoothSpec over to C++.
 * In C++, we cannot use Swift protocols - so we need to wrap it in a class to make it strongly defined.
 *
 * Also, some Swift types need to be bridged with special handling:
 * - Enums need to be wrapped in Structs, otherwise they cannot be accessed bi-directionally (Swift bug: https://github.com/swiftlang/swift/issues/75330)
 * - Other HybridObjects need to be wrapped/unwrapped from the Swift TCxx wrapper
 * - Throwing methods need to be wrapped with a Result<T, Error> type, as exceptions cannot be propagated to C++
 */
open class HybridMunimBluetoothSpec_cxx {
  /**
   * The Swift <> C++ bridge's namespace (`margelo::nitro::munimbluetooth::bridge::swift`)
   * from `MunimBluetooth-Swift-Cxx-Bridge.hpp`.
   * This contains specialized C++ templates, and C++ helper functions that can be accessed from Swift.
   */
  public typealias bridge = margelo.nitro.munimbluetooth.bridge.swift

  /**
   * Holds an instance of the `HybridMunimBluetoothSpec` Swift protocol.
   */
  private var __implementation: any HybridMunimBluetoothSpec

  /**
   * Holds a weak pointer to the C++ class that wraps the Swift class.
   */
  private var __cxxPart: bridge.std__weak_ptr_HybridMunimBluetoothSpec_

  /**
   * Create a new `HybridMunimBluetoothSpec_cxx` that wraps the given `HybridMunimBluetoothSpec`.
   * All properties and methods bridge to C++ types.
   */
  public init(_ implementation: any HybridMunimBluetoothSpec) {
    self.__implementation = implementation
    self.__cxxPart = .init()
    /* no base class */
  }

  /**
   * Get the actual `HybridMunimBluetoothSpec` instance this class wraps.
   */
  @inline(__always)
  public func getHybridMunimBluetoothSpec() -> any HybridMunimBluetoothSpec {
    return __implementation
  }

  /**
   * Casts this instance to a retained unsafe raw pointer.
   * This acquires one additional strong reference on the object!
   */
  public func toUnsafe() -> UnsafeMutableRawPointer {
    return Unmanaged.passRetained(self).toOpaque()
  }

  /**
   * Casts an unsafe pointer to a `HybridMunimBluetoothSpec_cxx`.
   * The pointer has to be a retained opaque `Unmanaged<HybridMunimBluetoothSpec_cxx>`.
   * This removes one strong reference from the object!
   */
  public class func fromUnsafe(_ pointer: UnsafeMutableRawPointer) -> HybridMunimBluetoothSpec_cxx {
    return Unmanaged<HybridMunimBluetoothSpec_cxx>.fromOpaque(pointer).takeRetainedValue()
  }

  /**
   * Gets (or creates) the C++ part of this Hybrid Object.
   * The C++ part is a `std::shared_ptr<HybridMunimBluetoothSpec>`.
   */
  public func getCxxPart() -> bridge.std__shared_ptr_HybridMunimBluetoothSpec_ {
    let cachedCxxPart = self.__cxxPart.lock()
    if Bool(fromCxx: cachedCxxPart) {
      return cachedCxxPart
    } else {
      let newCxxPart = bridge.create_std__shared_ptr_HybridMunimBluetoothSpec_(self.toUnsafe())
      __cxxPart = bridge.weakify_std__shared_ptr_HybridMunimBluetoothSpec_(newCxxPart)
      return newCxxPart
    }
  }

  

  /**
   * Get the memory size of the Swift class (plus size of any other allocations)
   * so the JS VM can properly track it and garbage-collect the JS object if needed.
   */
  @inline(__always)
  public var memorySize: Int {
    return MemoryHelper.getSizeOf(self.__implementation) + self.__implementation.memorySize
  }

  /**
   * Compares this object with the given [other] object for reference equality.
   */
  @inline(__always)
  public func equals(other: HybridMunimBluetoothSpec_cxx) -> Bool {
    return self.__implementation === other.__implementation
  }

  /**
   * Call dispose() on the Swift class.
   * This _may_ be called manually from JS.
   */
  @inline(__always)
  public func dispose() {
    self.__implementation.dispose()
  }

  /**
   * Call toString() on the Swift class.
   */
  @inline(__always)
  public func toString() -> String {
    return self.__implementation.toString()
  }

  // Properties
  

  // Methods
  @inline(__always)
  public final func startAdvertising(options: AdvertisingOptions) -> bridge.Result_void_ {
    do {
      try self.__implementation.startAdvertising(options: options)
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func updateAdvertisingData(advertisingData: AdvertisingDataTypes) -> bridge.Result_void_ {
    do {
      try self.__implementation.updateAdvertisingData(advertisingData: advertisingData)
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func getAdvertisingData() -> bridge.Result_std__shared_ptr_Promise_AdvertisingDataTypes___ {
    do {
      let __result = try self.__implementation.getAdvertisingData()
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_AdvertisingDataTypes__ in
        let __promise = bridge.create_std__shared_ptr_Promise_AdvertisingDataTypes__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_AdvertisingDataTypes__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_AdvertisingDataTypes___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_AdvertisingDataTypes___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func stopAdvertising() -> bridge.Result_void_ {
    do {
      try self.__implementation.stopAdvertising()
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func setServices(services: bridge.std__vector_GATTService_) -> bridge.Result_void_ {
    do {
      try self.__implementation.setServices(services: services.map({ __item in __item }))
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func updateCharacteristicValue(serviceUUID: std.string, characteristicUUID: std.string, value: std.string, notify: bridge.std__optional_bool_) -> bridge.Result_std__shared_ptr_Promise_void___ {
    do {
      let __result = try self.__implementation.updateCharacteristicValue(serviceUUID: String(serviceUUID), characteristicUUID: String(characteristicUUID), value: String(value), notify: { () -> Bool? in
        if bridge.has_value_std__optional_bool_(notify) {
          let __unwrapped = bridge.get_std__optional_bool_(notify)
          return __unwrapped
        } else {
          return nil
        }
      }())
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
        let __promise = bridge.create_std__shared_ptr_Promise_void__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve() })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func isBluetoothEnabled() -> bridge.Result_std__shared_ptr_Promise_bool___ {
    do {
      let __result = try self.__implementation.isBluetoothEnabled()
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_bool__ in
        let __promise = bridge.create_std__shared_ptr_Promise_bool__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_bool__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_bool___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_bool___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func requestBluetoothPermission() -> bridge.Result_std__shared_ptr_Promise_bool___ {
    do {
      let __result = try self.__implementation.requestBluetoothPermission()
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_bool__ in
        let __promise = bridge.create_std__shared_ptr_Promise_bool__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_bool__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_bool___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_bool___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func getCapabilities() -> bridge.Result_std__shared_ptr_Promise_BluetoothCapabilities___ {
    do {
      let __result = try self.__implementation.getCapabilities()
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_BluetoothCapabilities__ in
        let __promise = bridge.create_std__shared_ptr_Promise_BluetoothCapabilities__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_BluetoothCapabilities__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_BluetoothCapabilities___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_BluetoothCapabilities___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func startScan(options: bridge.std__optional_ScanOptions_) -> bridge.Result_void_ {
    do {
      try self.__implementation.startScan(options: options.value)
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func stopScan() -> bridge.Result_void_ {
    do {
      try self.__implementation.stopScan()
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func connect(deviceId: std.string) -> bridge.Result_std__shared_ptr_Promise_void___ {
    do {
      let __result = try self.__implementation.connect(deviceId: String(deviceId))
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
        let __promise = bridge.create_std__shared_ptr_Promise_void__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve() })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func disconnect(deviceId: std.string) -> bridge.Result_void_ {
    do {
      try self.__implementation.disconnect(deviceId: String(deviceId))
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func discoverServices(deviceId: std.string) -> bridge.Result_std__shared_ptr_Promise_std__vector_GATTService____ {
    do {
      let __result = try self.__implementation.discoverServices(deviceId: String(deviceId))
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_std__vector_GATTService___ in
        let __promise = bridge.create_std__shared_ptr_Promise_std__vector_GATTService___()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_std__vector_GATTService___(__promise)
        __result
          .then({ __result in __promiseHolder.resolve({ () -> bridge.std__vector_GATTService_ in
              var __vector = bridge.create_std__vector_GATTService_(__result.count)
              for __item in __result {
                __vector.push_back(__item)
              }
              return __vector
            }()) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_std__vector_GATTService____(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_std__vector_GATTService____(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func readCharacteristic(deviceId: std.string, serviceUUID: std.string, characteristicUUID: std.string) -> bridge.Result_std__shared_ptr_Promise_CharacteristicValue___ {
    do {
      let __result = try self.__implementation.readCharacteristic(deviceId: String(deviceId), serviceUUID: String(serviceUUID), characteristicUUID: String(characteristicUUID))
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_CharacteristicValue__ in
        let __promise = bridge.create_std__shared_ptr_Promise_CharacteristicValue__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_CharacteristicValue__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_CharacteristicValue___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_CharacteristicValue___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func readDescriptor(deviceId: std.string, serviceUUID: std.string, characteristicUUID: std.string, descriptorUUID: std.string) -> bridge.Result_std__shared_ptr_Promise_DescriptorValue___ {
    do {
      let __result = try self.__implementation.readDescriptor(deviceId: String(deviceId), serviceUUID: String(serviceUUID), characteristicUUID: String(characteristicUUID), descriptorUUID: String(descriptorUUID))
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_DescriptorValue__ in
        let __promise = bridge.create_std__shared_ptr_Promise_DescriptorValue__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_DescriptorValue__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_DescriptorValue___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_DescriptorValue___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func writeCharacteristic(deviceId: std.string, serviceUUID: std.string, characteristicUUID: std.string, value: std.string, writeType: bridge.std__optional_WriteType_) -> bridge.Result_std__shared_ptr_Promise_void___ {
    do {
      let __result = try self.__implementation.writeCharacteristic(deviceId: String(deviceId), serviceUUID: String(serviceUUID), characteristicUUID: String(characteristicUUID), value: String(value), writeType: writeType.value)
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
        let __promise = bridge.create_std__shared_ptr_Promise_void__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve() })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func writeDescriptor(deviceId: std.string, serviceUUID: std.string, characteristicUUID: std.string, descriptorUUID: std.string, value: std.string) -> bridge.Result_std__shared_ptr_Promise_void___ {
    do {
      let __result = try self.__implementation.writeDescriptor(deviceId: String(deviceId), serviceUUID: String(serviceUUID), characteristicUUID: String(characteristicUUID), descriptorUUID: String(descriptorUUID), value: String(value))
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
        let __promise = bridge.create_std__shared_ptr_Promise_void__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve() })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func subscribeToCharacteristic(deviceId: std.string, serviceUUID: std.string, characteristicUUID: std.string) -> bridge.Result_void_ {
    do {
      try self.__implementation.subscribeToCharacteristic(deviceId: String(deviceId), serviceUUID: String(serviceUUID), characteristicUUID: String(characteristicUUID))
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func unsubscribeFromCharacteristic(deviceId: std.string, serviceUUID: std.string, characteristicUUID: std.string) -> bridge.Result_void_ {
    do {
      try self.__implementation.unsubscribeFromCharacteristic(deviceId: String(deviceId), serviceUUID: String(serviceUUID), characteristicUUID: String(characteristicUUID))
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func getConnectedDevices() -> bridge.Result_std__shared_ptr_Promise_std__vector_std__string____ {
    do {
      let __result = try self.__implementation.getConnectedDevices()
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_std__vector_std__string___ in
        let __promise = bridge.create_std__shared_ptr_Promise_std__vector_std__string___()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_std__vector_std__string___(__promise)
        __result
          .then({ __result in __promiseHolder.resolve({ () -> bridge.std__vector_std__string_ in
              var __vector = bridge.create_std__vector_std__string_(__result.count)
              for __item in __result {
                __vector.push_back(std.string(__item))
              }
              return __vector
            }()) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_std__vector_std__string____(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_std__vector_std__string____(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func readRSSI(deviceId: std.string) -> bridge.Result_std__shared_ptr_Promise_double___ {
    do {
      let __result = try self.__implementation.readRSSI(deviceId: String(deviceId))
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_double__ in
        let __promise = bridge.create_std__shared_ptr_Promise_double__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_double__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_double___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_double___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func requestMTU(deviceId: std.string, mtu: Double) -> bridge.Result_std__shared_ptr_Promise_double___ {
    do {
      let __result = try self.__implementation.requestMTU(deviceId: String(deviceId), mtu: mtu)
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_double__ in
        let __promise = bridge.create_std__shared_ptr_Promise_double__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_double__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_double___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_double___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func setPreferredPhy(deviceId: std.string, txPhy: Int32, rxPhy: Int32, phyOption: bridge.std__optional_BluetoothPhyOption_) -> bridge.Result_std__shared_ptr_Promise_void___ {
    do {
      let __result = try self.__implementation.setPreferredPhy(deviceId: String(deviceId), txPhy: margelo.nitro.munimbluetooth.BluetoothPhy(rawValue: txPhy)!, rxPhy: margelo.nitro.munimbluetooth.BluetoothPhy(rawValue: rxPhy)!, phyOption: phyOption.value)
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
        let __promise = bridge.create_std__shared_ptr_Promise_void__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve() })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func readPhy(deviceId: std.string) -> bridge.Result_std__shared_ptr_Promise_PhyStatus___ {
    do {
      let __result = try self.__implementation.readPhy(deviceId: String(deviceId))
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_PhyStatus__ in
        let __promise = bridge.create_std__shared_ptr_Promise_PhyStatus__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_PhyStatus__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_PhyStatus___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_PhyStatus___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func getBondState(deviceId: std.string) -> bridge.Result_std__shared_ptr_Promise_BondState___ {
    do {
      let __result = try self.__implementation.getBondState(deviceId: String(deviceId))
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_BondState__ in
        let __promise = bridge.create_std__shared_ptr_Promise_BondState__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_BondState__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_BondState___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_BondState___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func createBond(deviceId: std.string) -> bridge.Result_std__shared_ptr_Promise_BondState___ {
    do {
      let __result = try self.__implementation.createBond(deviceId: String(deviceId))
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_BondState__ in
        let __promise = bridge.create_std__shared_ptr_Promise_BondState__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_BondState__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_BondState___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_BondState___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func removeBond(deviceId: std.string) -> bridge.Result_std__shared_ptr_Promise_BondState___ {
    do {
      let __result = try self.__implementation.removeBond(deviceId: String(deviceId))
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_BondState__ in
        let __promise = bridge.create_std__shared_ptr_Promise_BondState__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_BondState__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_BondState___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_BondState___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func startExtendedAdvertising(options: ExtendedAdvertisingOptions) -> bridge.Result_std__shared_ptr_Promise_std__string___ {
    do {
      let __result = try self.__implementation.startExtendedAdvertising(options: options)
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_std__string__ in
        let __promise = bridge.create_std__shared_ptr_Promise_std__string__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_std__string__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(std.string(__result)) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_std__string___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_std__string___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func stopExtendedAdvertising(advertisingId: std.string) -> bridge.Result_void_ {
    do {
      try self.__implementation.stopExtendedAdvertising(advertisingId: String(advertisingId))
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func publishL2CAPChannel(encryptionRequired: bridge.std__optional_bool_) -> bridge.Result_std__shared_ptr_Promise_L2CAPChannel___ {
    do {
      let __result = try self.__implementation.publishL2CAPChannel(encryptionRequired: { () -> Bool? in
        if bridge.has_value_std__optional_bool_(encryptionRequired) {
          let __unwrapped = bridge.get_std__optional_bool_(encryptionRequired)
          return __unwrapped
        } else {
          return nil
        }
      }())
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_L2CAPChannel__ in
        let __promise = bridge.create_std__shared_ptr_Promise_L2CAPChannel__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_L2CAPChannel__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_L2CAPChannel___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_L2CAPChannel___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func unpublishL2CAPChannel(psm: Double) -> bridge.Result_void_ {
    do {
      try self.__implementation.unpublishL2CAPChannel(psm: psm)
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func openL2CAPChannel(deviceId: std.string, psm: Double) -> bridge.Result_std__shared_ptr_Promise_L2CAPChannel___ {
    do {
      let __result = try self.__implementation.openL2CAPChannel(deviceId: String(deviceId), psm: psm)
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_L2CAPChannel__ in
        let __promise = bridge.create_std__shared_ptr_Promise_L2CAPChannel__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_L2CAPChannel__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve(__result) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_L2CAPChannel___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_L2CAPChannel___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func closeL2CAPChannel(channelId: std.string) -> bridge.Result_void_ {
    do {
      try self.__implementation.closeL2CAPChannel(channelId: String(channelId))
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func sendL2CAPData(channelId: std.string, value: std.string) -> bridge.Result_std__shared_ptr_Promise_void___ {
    do {
      let __result = try self.__implementation.sendL2CAPData(channelId: String(channelId), value: String(value))
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
        let __promise = bridge.create_std__shared_ptr_Promise_void__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve() })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func startClassicScan() -> bridge.Result_void_ {
    do {
      try self.__implementation.startClassicScan()
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func stopClassicScan() -> bridge.Result_void_ {
    do {
      try self.__implementation.stopClassicScan()
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func connectClassic(deviceId: std.string, serviceUUID: bridge.std__optional_std__string_) -> bridge.Result_std__shared_ptr_Promise_void___ {
    do {
      let __result = try self.__implementation.connectClassic(deviceId: String(deviceId), serviceUUID: { () -> String? in
        if bridge.has_value_std__optional_std__string_(serviceUUID) {
          let __unwrapped = bridge.get_std__optional_std__string_(serviceUUID)
          return String(__unwrapped)
        } else {
          return nil
        }
      }())
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
        let __promise = bridge.create_std__shared_ptr_Promise_void__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve() })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func startClassicServer(serviceUUID: bridge.std__optional_std__string_, serviceName: bridge.std__optional_std__string_) -> bridge.Result_std__shared_ptr_Promise_void___ {
    do {
      let __result = try self.__implementation.startClassicServer(serviceUUID: { () -> String? in
        if bridge.has_value_std__optional_std__string_(serviceUUID) {
          let __unwrapped = bridge.get_std__optional_std__string_(serviceUUID)
          return String(__unwrapped)
        } else {
          return nil
        }
      }(), serviceName: { () -> String? in
        if bridge.has_value_std__optional_std__string_(serviceName) {
          let __unwrapped = bridge.get_std__optional_std__string_(serviceName)
          return String(__unwrapped)
        } else {
          return nil
        }
      }())
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
        let __promise = bridge.create_std__shared_ptr_Promise_void__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve() })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func stopClassicServer(serviceUUID: bridge.std__optional_std__string_) -> bridge.Result_void_ {
    do {
      try self.__implementation.stopClassicServer(serviceUUID: { () -> String? in
        if bridge.has_value_std__optional_std__string_(serviceUUID) {
          let __unwrapped = bridge.get_std__optional_std__string_(serviceUUID)
          return String(__unwrapped)
        } else {
          return nil
        }
      }())
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func disconnectClassic(deviceId: std.string) -> bridge.Result_void_ {
    do {
      try self.__implementation.disconnectClassic(deviceId: String(deviceId))
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func writeClassic(deviceId: std.string, value: std.string) -> bridge.Result_std__shared_ptr_Promise_void___ {
    do {
      let __result = try self.__implementation.writeClassic(deviceId: String(deviceId), value: String(value))
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
        let __promise = bridge.create_std__shared_ptr_Promise_void__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve() })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func startBackgroundSession(options: BackgroundSessionOptions) -> bridge.Result_void_ {
    do {
      try self.__implementation.startBackgroundSession(options: options)
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func stopBackgroundSession() -> bridge.Result_void_ {
    do {
      try self.__implementation.stopBackgroundSession()
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func startMultipeerSession(options: MultipeerSessionOptions) -> bridge.Result_void_ {
    do {
      try self.__implementation.startMultipeerSession(options: options)
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func stopMultipeerSession() -> bridge.Result_void_ {
    do {
      try self.__implementation.stopMultipeerSession()
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func inviteMultipeerPeer(peerId: std.string) -> bridge.Result_void_ {
    do {
      try self.__implementation.inviteMultipeerPeer(peerId: String(peerId))
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func getMultipeerPeers() -> bridge.Result_std__shared_ptr_Promise_std__vector_MultipeerPeer____ {
    do {
      let __result = try self.__implementation.getMultipeerPeers()
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_std__vector_MultipeerPeer___ in
        let __promise = bridge.create_std__shared_ptr_Promise_std__vector_MultipeerPeer___()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_std__vector_MultipeerPeer___(__promise)
        __result
          .then({ __result in __promiseHolder.resolve({ () -> bridge.std__vector_MultipeerPeer_ in
              var __vector = bridge.create_std__vector_MultipeerPeer_(__result.count)
              for __item in __result {
                __vector.push_back(__item)
              }
              return __vector
            }()) })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_std__vector_MultipeerPeer____(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_std__vector_MultipeerPeer____(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func sendMultipeerMessage(value: std.string, peerIds: bridge.std__optional_std__vector_std__string__, reliable: bridge.std__optional_bool_) -> bridge.Result_std__shared_ptr_Promise_void___ {
    do {
      let __result = try self.__implementation.sendMultipeerMessage(value: String(value), peerIds: { () -> [String]? in
        if bridge.has_value_std__optional_std__vector_std__string__(peerIds) {
          let __unwrapped = bridge.get_std__optional_std__vector_std__string__(peerIds)
          return __unwrapped.map({ __item in String(__item) })
        } else {
          return nil
        }
      }(), reliable: { () -> Bool? in
        if bridge.has_value_std__optional_bool_(reliable) {
          let __unwrapped = bridge.get_std__optional_bool_(reliable)
          return __unwrapped
        } else {
          return nil
        }
      }())
      let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
        let __promise = bridge.create_std__shared_ptr_Promise_void__()
        let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
        __result
          .then({ __result in __promiseHolder.resolve() })
          .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
        return __promise
      }()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func addListener(eventName: std.string) -> bridge.Result_void_ {
    do {
      try self.__implementation.addListener(eventName: String(eventName))
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
  
  @inline(__always)
  public final func removeListeners(count: Double) -> bridge.Result_void_ {
    do {
      try self.__implementation.removeListeners(count: count)
      return bridge.create_Result_void_()
    } catch (let __error) {
      let __exceptionPtr = __error.toCpp()
      return bridge.create_Result_void_(__exceptionPtr)
    }
  }
}
