#if swift(>=4.0)
@objcMembers public class {{{eventsImplClassName}}}:  {{{classname}}}Events {
    {{#operations}}
    {{#operation}}
    {{#isEvent}}
    public override func add{{{camelizedNickName}}}EventListener(eventListener: @escaping ElectrodeBridgeEventListener) -> UUID?{
        let listenerProcessor = EventListenerProcessor(
                                eventName: {{{classname}}}.kEvent{{{camelizedNickName}}},
                                eventPayloadClass: {{#requestParam}}{{{dataType}}}{{/requestParam}}.self,
                                eventListener: eventListener)

        return listenerProcessor.execute()
    }
    {{/isEvent}}
    {{/operation}}
    {{/operations}}


    {{#operations}}
    {{#operation}}
    {{#isEvent}}
    public override func remove{{{camelizedNickName}}}EventListener(uuid: UUID) -> ElectrodeBridgeEventListener? {
        return ElectrodeBridgeHolder.removeEventListener(uuid)
    }
    {{/isEvent}}
    {{/operation}}
    {{/operations}}


    {{#operations}}
    {{#operation}}
    {{#isEvent}}
    public override func emitEvent{{{camelizedNickName}}}({{#hasRequestParam}}{{#requestParam}}{{{paramName}}}: {{{dataType}}}{{/requestParam}}{{/hasRequestParam}}) {
        let eventProcessor = EventProcessor{{^hasRequestParam}}<None>{{/hasRequestParam}}(
                                eventName: {{{classname}}}.kEvent{{{camelizedNickName}}},
                                eventPayload: {{#hasRequestParam}}{{#requestParam}}{{{paramName}}}{{/requestParam}}{{/hasRequestParam}}{{^hasRequestParam}}nil{{/hasRequestParam}})

        eventProcessor.execute()
    }
    {{/isEvent}}
    {{/operation}}

    {{/operations}}
}
#else
public class {{{eventsImplClassName}}}:  {{{classname}}}Events {
    {{#operations}}
    {{#operation}}
    {{#isEvent}}
    public override func add{{{camelizedNickName}}}EventListener(eventListener: @escaping ElectrodeBridgeEventListener) -> UUID?{
        let listenerProcessor = EventListenerProcessor(
                                eventName: {{{classname}}}.kEvent{{{camelizedNickName}}},
                                eventPayloadClass: {{#requestParam}}{{{dataType}}}{{/requestParam}}.self,
                                eventListener: eventListener)

        return listenerProcessor.execute()
    }
    {{/isEvent}}
    {{/operation}}
    {{/operations}}

    {{#operations}}
    {{#operation}}
    {{#isEvent}}
    public override func remove{{{camelizedNickName}}}EventListener(uuid: UUID) -> ElectrodeBridgeEventListener? {
        return ElectrodeBridgeHolder.removeEventListener(uuid)
    }
    {{/isEvent}}
    {{/operation}}
    {{/operations}}

    {{#operations}}
    {{#operation}}
    {{#isEvent}}
    public override func emitEvent{{{camelizedNickName}}}({{#hasRequestParam}}{{#requestParam}}{{{paramName}}}: {{{dataType}}}{{/requestParam}}{{/hasRequestParam}}) {
        let eventProcessor = EventProcessor{{^hasRequestParam}}<None>{{/hasRequestParam}}(
                                eventName: {{{classname}}}.kEvent{{{camelizedNickName}}},
                                eventPayload: {{#hasRequestParam}}{{#requestParam}}{{{paramName}}}{{/requestParam}}{{/hasRequestParam}}{{^hasRequestParam}}nil{{/hasRequestParam}})

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