#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
