@Override public DuplexConnection apply(Type type, DuplexConnection connection) { return new DuplexConnection() { Counter cancelCounter = registry.counter(FrameType.CANCEL.name(), type.name()); Counter requestChannelCounter = registry.counter(FrameType.REQUEST_CHANNEL.name(), type.name()); Counter completeCounter = registry.counter(FrameType.COMPLETE.name(), type.name()); Counter errorCounter = registry.counter(FrameType.ERROR.name(), type.name()); Counter extCounter = registry.counter(FrameType.EXT.name(), type.name()); Counter fireAndForgetCounter = registry.counter(FrameType.FIRE_AND_FORGET.name(), type.name()); Counter keepAliveCounter = registry.counter(FrameType.KEEPALIVE.name(), type.name()); Counter leaseCounter = registry.counter(FrameType.LEASE.name(), type.name()); Counter metadataPushCounter = registry.counter(FrameType.METADATA_PUSH.name(), type.name()); Counter nextCounter = registry.counter(FrameType.NEXT.name(), type.name()); Counter nextCompleteCounter = registry.counter(FrameType.NEXT_COMPLETE.name(), type.name()); Counter payloadCounter = registry.counter(FrameType.PAYLOAD.name(), type.name()); Counter requestNCounter = registry.counter(FrameType.REQUEST_N.name(), type.name()); Counter requestResponseCounter = registry.counter(FrameType.REQUEST_RESPONSE.name(), type.name()); Counter requestStreamCounter = registry.counter(FrameType.REQUEST_STREAM.name(), type.name()); Counter resumeCounter = registry.counter(FrameType.RESUME.name(), type.name()); Counter resumeOkCounter = registry.counter(FrameType.RESUME_OK.name(), type.name()); Counter setupCounter = registry.counter(FrameType.SETUP.name(), type.name()); Counter undefinedCounter = registry.counter(FrameType.UNDEFINED.name(), type.name());