#if swift(>=4.0)
@objcMembers public class {{{requestsImplClassName}}}: {{{classname}}}Requests {
    {{#operations}}
    {{#operation}}
    {{^isEvent}}

    public override func register{{{camelizedNickName}}}RequestHandler(handler:  @escaping ElectrodeBridgeRequestCompletionHandler) -> UUID?{
        let requestHandlerProcessor = ElectrodeRequestHandlerProcessor(requestName: {{{classname}}}.kRequest{{{camelizedNickName}}},
    reqClass: {{#requestParam}}{{^isList}}{{{dataType}}}{{/isList}}{{#isList}}Array<Any>{{/isList}}{{/requestParam}}.self, {{#requestParam}}{{#isList}}reqItemType: {{{baseType}}}.self,{{/isList}}{{/requestParam}}
    respClass: {{#responseParam}}{{{dataType}}}{{/responseParam}}.self,
    requestCompletionHandler: handler)
        return requestHandlerProcessor.execute()
    }
    {{/isEvent}}
    {{/operation}}
    {{/operations}}

    {{#operations}}
    {{#operation}}
    {{^isEvent}}

    public override func unregister{{{camelizedNickName}}}RequestHandler(uuid: UUID) -> ElectrodeBridgeRequestCompletionHandler? {
        return ElectrodeBridgeHolder.unregisterRequestHandler(with: uuid)
    }
    {{/isEvent}}
    {{/operation}}
    {{/operations}}

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

    {{#operations}}
    {{#operation}}
    {{^isEvent}}

    public override func {{nickname}}({{#hasRequestParam}}{{#requestParam}}{{{paramName}}}: {{dataType}},{{/requestParam}}{{/hasRequestParam}} responseCompletionHandler: @escaping ElectrodeBridgeResponseCompletionHandler) {
        let requestProcessor = ElectrodeRequestProcessor<{{#requestParam}}{{{dataType}}}{{/requestParam}}, {{#responseParam}}{{{dataType}}}{{/responseParam}}, Any>(
            requestName: {{{classname}}}.kRequest{{{camelizedNickName}}},
            requestPayload: {{#hasRequestParam}}{{#requestParam}}{{{paramName}}},{{/requestParam}}{{/hasRequestParam}}{{^hasRequestParam}}nil, {{/hasRequestParam}}
            respClass: {{#responseParam}}{{{dataType}}}{{/responseParam}}.self,
            responseItemType: {{#responseParam}}{{#isList}}{{{baseType}}}.self{{/isList}}{{^isList}}nil{{/isList}}{{/responseParam}},
            responseCompletionHandler: responseCompletionHandler)

        requestProcessor.execute()
    }
    {{/isEvent}}
    {{/operation}}
    {{/operations}}
}
#else
public class {{{requestsImplClassName}}}: {{{classname}}}Requests {
    {{#operations}}
    {{#operation}}
    {{^isEvent}}

    public override func register{{{camelizedNickName}}}RequestHandler(handler:  @escaping ElectrodeBridgeRequestCompletionHandler) -> UUID?{
        let requestHandlerProcessor = ElectrodeRequestHandlerProcessor(requestName: {{{classname}}}.kRequest{{{camelizedNickName}}},
    reqClass: {{#requestParam}}{{^isList}}{{{dataType}}}{{/isList}}{{#isList}}Array<Any>{{/isList}}{{/requestParam}}.self, {{#requestParam}}{{#isList}}reqItemType: {{{baseType}}}.self,{{/isList}}{{/requestParam}}
    respClass: {{#responseParam}}{{{dataType}}}{{/responseParam}}.self,
    requestCompletionHandler: handler)
        return requestHandlerProcessor.execute()
    }
    {{/isEvent}}
    {{/operation}}
    {{/operations}}

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

    {{#operations}}
    {{#operation}}
    {{^isEvent}}

    {{#operations}}
    {{#operation}}
    {{^isEvent}}

    public override func unregister{{{camelizedNickName}}}RequestHandler(uuid: UUID) -> ElectrodeBridgeRequestCompletionHandler? {
      return ElectrodeBridgeHolder.unregisterRequestHandler(with: uuid)
    }
    {{/isEvent}}
    {{/operation}}
    {{/operations}}

    public override func {{nickname}}({{#hasRequestParam}}{{#requestParam}}{{{paramName}}}: {{dataType}},{{/requestParam}}{{/hasRequestParam}} responseCompletionHandler: @escaping ElectrodeBridgeResponseCompletionHandler) {
        let requestProcessor = ElectrodeRequestProcessor<{{#requestParam}}{{{dataType}}}{{/requestParam}}, {{#responseParam}}{{{dataType}}}{{/responseParam}}, Any>(
            requestName: {{{classname}}}.kRequest{{{camelizedNickName}}},
            requestPayload: {{#hasRequestParam}}{{#requestParam}}{{{paramName}}},{{/requestParam}}{{/hasRequestParam}}{{^hasRequestParam}}nil, {{/hasRequestParam}}
            respClass: {{#responseParam}}{{{dataType}}}{{/responseParam}}.self,
            responseItemType: {{#responseParam}}{{#isList}}{{{baseType}}}.self{{/isList}}{{^isList}}nil{{/isList}}{{/responseParam}},
            responseCompletionHandler: responseCompletionHandler)

        requestProcessor.execute()
    }
    {{/isEvent}}
    {{/operation}}
    {{/operations}}
}
#endif
