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

import NitroModules

/// See ``HybridCharacteristicTypeModuleSpec``
public protocol HybridCharacteristicTypeModuleSpec_protocol: HybridObject {
  // Properties
  

  // Methods
  func getBloodType() throws -> BloodType
  func getDateOfBirth() throws -> Date?
  func getBiologicalSex() throws -> BiologicalSex
  func getFitzpatrickSkinType() throws -> FitzpatrickSkinType
  func getWheelchairUse() throws -> WheelchairUse
  func getBloodTypeAsync() throws -> Promise<BloodType>
  func getDateOfBirthAsync() throws -> Promise<Date?>
  func getBiologicalSexAsync() throws -> Promise<BiologicalSex>
  func getFitzpatrickSkinTypeAsync() throws -> Promise<FitzpatrickSkinType>
  func getWheelchairUseAsync() throws -> Promise<WheelchairUse>
}

public extension HybridCharacteristicTypeModuleSpec_protocol {
  /// Default implementation of ``HybridObject.toString``
  func toString() -> String {
    return "[HybridObject CharacteristicTypeModule]"
  }
}

/// See ``HybridCharacteristicTypeModuleSpec``
open class HybridCharacteristicTypeModuleSpec_base {
  private weak var cxxWrapper: HybridCharacteristicTypeModuleSpec_cxx? = nil
  public init() { }
  public func getCxxWrapper() -> HybridCharacteristicTypeModuleSpec_cxx {
  #if DEBUG
    guard self is any HybridCharacteristicTypeModuleSpec else {
      fatalError("`self` is not a `HybridCharacteristicTypeModuleSpec`! Did you accidentally inherit from `HybridCharacteristicTypeModuleSpec_base` instead of `HybridCharacteristicTypeModuleSpec`?")
    }
  #endif
    if let cxxWrapper = self.cxxWrapper {
      return cxxWrapper
    } else {
      let cxxWrapper = HybridCharacteristicTypeModuleSpec_cxx(self as! any HybridCharacteristicTypeModuleSpec)
      self.cxxWrapper = cxxWrapper
      return cxxWrapper
    }
  }
}

/**
 * A Swift base-protocol representing the CharacteristicTypeModule HybridObject.
 * Implement this protocol to create Swift-based instances of CharacteristicTypeModule.
 * ```swift
 * class HybridCharacteristicTypeModule : HybridCharacteristicTypeModuleSpec {
 *   // ...
 * }
 * ```
 */
public typealias HybridCharacteristicTypeModuleSpec = HybridCharacteristicTypeModuleSpec_protocol & HybridCharacteristicTypeModuleSpec_base
