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

import NitroModules

/// Represents an instance of `TradeAssetQuoteRequest`, backed by a C++ struct.
public typealias TradeAssetQuoteRequest = margelo.nitro.rncandle.TradeAssetQuoteRequest

extension TradeAssetQuoteRequest {
  private typealias bridge = margelo.nitro.rncandle.bridge.swift

  /**
   * Create a new instance of `TradeAssetQuoteRequest`.
   */
  public init(
    fiatAssetQuoteRequest: FiatAssetQuoteRequest?,
    marketAssetQuoteRequest: MarketAssetQuoteRequest?,
    transportAssetQuoteRequest: TransportAssetQuoteRequest?,
    nothingAssetQuoteRequest: NothingAssetQuoteRequest?,
    otherAssetQuoteRequest: OtherAssetQuoteRequest?
  ) {
    self.init(
      { () -> bridge.std__optional_FiatAssetQuoteRequest_ in
        if let __unwrappedValue = fiatAssetQuoteRequest {
          return bridge.create_std__optional_FiatAssetQuoteRequest_(__unwrappedValue)
        } else {
          return .init()
        }
      }(),
      { () -> bridge.std__optional_MarketAssetQuoteRequest_ in
        if let __unwrappedValue = marketAssetQuoteRequest {
          return bridge.create_std__optional_MarketAssetQuoteRequest_(__unwrappedValue)
        } else {
          return .init()
        }
      }(),
      { () -> bridge.std__optional_TransportAssetQuoteRequest_ in
        if let __unwrappedValue = transportAssetQuoteRequest {
          return bridge.create_std__optional_TransportAssetQuoteRequest_(__unwrappedValue)
        } else {
          return .init()
        }
      }(),
      { () -> bridge.std__optional_NothingAssetQuoteRequest_ in
        if let __unwrappedValue = nothingAssetQuoteRequest {
          return bridge.create_std__optional_NothingAssetQuoteRequest_(__unwrappedValue)
        } else {
          return .init()
        }
      }(),
      { () -> bridge.std__optional_OtherAssetQuoteRequest_ in
        if let __unwrappedValue = otherAssetQuoteRequest {
          return bridge.create_std__optional_OtherAssetQuoteRequest_(__unwrappedValue)
        } else {
          return .init()
        }
      }())
  }

  public var fiatAssetQuoteRequest: FiatAssetQuoteRequest? {
    @inline(__always)
    get {
      return { () -> FiatAssetQuoteRequest? in
        if bridge.has_value_std__optional_FiatAssetQuoteRequest_(self.__fiatAssetQuoteRequest) {
          let __unwrapped = bridge.get_std__optional_FiatAssetQuoteRequest_(
            self.__fiatAssetQuoteRequest)
          return __unwrapped
        } else {
          return nil
        }
      }()
    }
    @inline(__always)
    set {
      self.__fiatAssetQuoteRequest = { () -> bridge.std__optional_FiatAssetQuoteRequest_ in
        if let __unwrappedValue = newValue {
          return bridge.create_std__optional_FiatAssetQuoteRequest_(__unwrappedValue)
        } else {
          return .init()
        }
      }()
    }
  }

  public var marketAssetQuoteRequest: MarketAssetQuoteRequest? {
    @inline(__always)
    get {
      return { () -> MarketAssetQuoteRequest? in
        if bridge.has_value_std__optional_MarketAssetQuoteRequest_(self.__marketAssetQuoteRequest) {
          let __unwrapped = bridge.get_std__optional_MarketAssetQuoteRequest_(
            self.__marketAssetQuoteRequest)
          return __unwrapped
        } else {
          return nil
        }
      }()
    }
    @inline(__always)
    set {
      self.__marketAssetQuoteRequest = { () -> bridge.std__optional_MarketAssetQuoteRequest_ in
        if let __unwrappedValue = newValue {
          return bridge.create_std__optional_MarketAssetQuoteRequest_(__unwrappedValue)
        } else {
          return .init()
        }
      }()
    }
  }

  public var transportAssetQuoteRequest: TransportAssetQuoteRequest? {
    @inline(__always)
    get {
      return { () -> TransportAssetQuoteRequest? in
        if bridge.has_value_std__optional_TransportAssetQuoteRequest_(
          self.__transportAssetQuoteRequest)
        {
          let __unwrapped = bridge.get_std__optional_TransportAssetQuoteRequest_(
            self.__transportAssetQuoteRequest)
          return __unwrapped
        } else {
          return nil
        }
      }()
    }
    @inline(__always)
    set {
      self.__transportAssetQuoteRequest = {
        () -> bridge.std__optional_TransportAssetQuoteRequest_ in
        if let __unwrappedValue = newValue {
          return bridge.create_std__optional_TransportAssetQuoteRequest_(__unwrappedValue)
        } else {
          return .init()
        }
      }()
    }
  }

  public var nothingAssetQuoteRequest: NothingAssetQuoteRequest? {
    @inline(__always)
    get {
      return { () -> NothingAssetQuoteRequest? in
        if bridge.has_value_std__optional_NothingAssetQuoteRequest_(self.__nothingAssetQuoteRequest)
        {
          let __unwrapped = bridge.get_std__optional_NothingAssetQuoteRequest_(
            self.__nothingAssetQuoteRequest)
          return __unwrapped
        } else {
          return nil
        }
      }()
    }
    @inline(__always)
    set {
      self.__nothingAssetQuoteRequest = { () -> bridge.std__optional_NothingAssetQuoteRequest_ in
        if let __unwrappedValue = newValue {
          return bridge.create_std__optional_NothingAssetQuoteRequest_(__unwrappedValue)
        } else {
          return .init()
        }
      }()
    }
  }

  public var otherAssetQuoteRequest: OtherAssetQuoteRequest? {
    @inline(__always)
    get {
      return { () -> OtherAssetQuoteRequest? in
        if bridge.has_value_std__optional_OtherAssetQuoteRequest_(self.__otherAssetQuoteRequest) {
          let __unwrapped = bridge.get_std__optional_OtherAssetQuoteRequest_(
            self.__otherAssetQuoteRequest)
          return __unwrapped
        } else {
          return nil
        }
      }()
    }
    @inline(__always)
    set {
      self.__otherAssetQuoteRequest = { () -> bridge.std__optional_OtherAssetQuoteRequest_ in
        if let __unwrappedValue = newValue {
          return bridge.create_std__optional_OtherAssetQuoteRequest_(__unwrappedValue)
        } else {
          return .init()
        }
      }()
    }
  }
}
