#if swift(>=4.0)
@objcMembers public class TrustDefenderRequests: TrustDefenderAPIRequests {

    public override func registerDoTrustDefenderProfilingRequestHandler(handler:  @escaping ElectrodeBridgeRequestCompletionHandler) -> UUID?{
        let requestHandlerProcessor = ElectrodeRequestHandlerProcessor(requestName: TrustDefenderAPI.kRequestDoTrustDefenderProfiling,
    reqClass: TrustDefenderArgs.self, 
    respClass: TrustDefenderProfileResult.self,
    requestCompletionHandler: handler)
        return requestHandlerProcessor.execute()
    }

    public override func registerGetTrustDefenderMetaHeaderRequestHandler(handler:  @escaping ElectrodeBridgeRequestCompletionHandler) -> UUID?{
        let requestHandlerProcessor = ElectrodeRequestHandlerProcessor(requestName: TrustDefenderAPI.kRequestGetTrustDefenderMetaHeader,
    reqClass: TrustDefenderArgs.self, 
    respClass: TrustDefenderMetaHeader.self,
    requestCompletionHandler: handler)
        return requestHandlerProcessor.execute()
    }


    public override func unregisterDoTrustDefenderProfilingRequestHandler(uuid: UUID) -> ElectrodeBridgeRequestCompletionHandler? {
        return ElectrodeBridgeHolder.unregisterRequestHandler(with: uuid)
    }

    public override func unregisterGetTrustDefenderMetaHeaderRequestHandler(uuid: UUID) -> ElectrodeBridgeRequestCompletionHandler? {
        return ElectrodeBridgeHolder.unregisterRequestHandler(with: uuid)
    }

    //------------------------------------------------------------------------------------------------------------------------------------


    public override func doTrustDefenderProfiling(trustDefenderArgs: TrustDefenderArgs, responseCompletionHandler: @escaping (TrustDefenderProfileResult?, ElectrodeFailureMessage?) -> ()) {
        let requestProcessor = ElectrodeRequestProcessor<TrustDefenderArgs, TrustDefenderProfileResult, Any>(
            requestName: TrustDefenderAPI.kRequestDoTrustDefenderProfiling,
            requestPayload: trustDefenderArgs,
            respClass: TrustDefenderProfileResult.self,
            responseItemType: nil,
            responseCompletionHandler: { data, errorMessage in responseCompletionHandler(data as? TrustDefenderProfileResult, errorMessage) })

        requestProcessor.execute()
    }

    public override func getTrustDefenderMetaHeader(trustDefenderArgs: TrustDefenderArgs, responseCompletionHandler: @escaping (TrustDefenderMetaHeader?, ElectrodeFailureMessage?) -> ()) {
        let requestProcessor = ElectrodeRequestProcessor<TrustDefenderArgs, TrustDefenderMetaHeader, Any>(
            requestName: TrustDefenderAPI.kRequestGetTrustDefenderMetaHeader,
            requestPayload: trustDefenderArgs,
            respClass: TrustDefenderMetaHeader.self,
            responseItemType: nil,
            responseCompletionHandler: { data, errorMessage in responseCompletionHandler(data as? TrustDefenderMetaHeader, errorMessage) })

        requestProcessor.execute()
    }
}
#else
public class TrustDefenderRequests: TrustDefenderAPIRequests {

    public override func registerDoTrustDefenderProfilingRequestHandler(handler:  @escaping ElectrodeBridgeRequestCompletionHandler) -> UUID?{
        let requestHandlerProcessor = ElectrodeRequestHandlerProcessor(requestName: TrustDefenderAPI.kRequestDoTrustDefenderProfiling,
    reqClass: TrustDefenderArgs.self, 
    respClass: TrustDefenderProfileResult.self,
    requestCompletionHandler: handler)
        return requestHandlerProcessor.execute()
    }

    public override func registerGetTrustDefenderMetaHeaderRequestHandler(handler:  @escaping ElectrodeBridgeRequestCompletionHandler) -> UUID?{
        let requestHandlerProcessor = ElectrodeRequestHandlerProcessor(requestName: TrustDefenderAPI.kRequestGetTrustDefenderMetaHeader,
    reqClass: TrustDefenderArgs.self, 
    respClass: TrustDefenderMetaHeader.self,
    requestCompletionHandler: handler)
        return requestHandlerProcessor.execute()
    }

    //------------------------------------------------------------------------------------------------------------------------------------



    public override func unregisterDoTrustDefenderProfilingRequestHandler(uuid: UUID) -> ElectrodeBridgeRequestCompletionHandler? {
      return ElectrodeBridgeHolder.unregisterRequestHandler(with: uuid)
    }

    public override func unregisterGetTrustDefenderMetaHeaderRequestHandler(uuid: UUID) -> ElectrodeBridgeRequestCompletionHandler? {
      return ElectrodeBridgeHolder.unregisterRequestHandler(with: uuid)
    }

    public override func doTrustDefenderProfiling(trustDefenderArgs: TrustDefenderArgs, responseCompletionHandler: @escaping (TrustDefenderProfileResult?, ElectrodeFailureMessage?) -> ()) {
        let requestProcessor = ElectrodeRequestProcessor<TrustDefenderArgs, TrustDefenderProfileResult, Any>(
            requestName: TrustDefenderAPI.kRequestDoTrustDefenderProfiling,
            requestPayload: trustDefenderArgs,
            respClass: TrustDefenderProfileResult.self,
            responseItemType: nil,
            responseCompletionHandler: { data, errorMessage in responseCompletionHandler(data as? TrustDefenderProfileResult, errorMessage) })

        requestProcessor.execute()
    }


    public override func unregisterDoTrustDefenderProfilingRequestHandler(uuid: UUID) -> ElectrodeBridgeRequestCompletionHandler? {
      return ElectrodeBridgeHolder.unregisterRequestHandler(with: uuid)
    }

    public override func unregisterGetTrustDefenderMetaHeaderRequestHandler(uuid: UUID) -> ElectrodeBridgeRequestCompletionHandler? {
      return ElectrodeBridgeHolder.unregisterRequestHandler(with: uuid)
    }

    public override func getTrustDefenderMetaHeader(trustDefenderArgs: TrustDefenderArgs, responseCompletionHandler: @escaping (TrustDefenderMetaHeader?, ElectrodeFailureMessage?) -> ()) {
        let requestProcessor = ElectrodeRequestProcessor<TrustDefenderArgs, TrustDefenderMetaHeader, Any>(
            requestName: TrustDefenderAPI.kRequestGetTrustDefenderMetaHeader,
            requestPayload: trustDefenderArgs,
            respClass: TrustDefenderMetaHeader.self,
            responseItemType: nil,
            responseCompletionHandler: { data, errorMessage in responseCompletionHandler(data as? TrustDefenderMetaHeader, errorMessage) })

        requestProcessor.execute()
    }
}
#endif
