public RunResponseHandler(IResultStreamBuilder streamBuilder, SummaryBuilder summaryBuilder)
        {
            _streamBuilder  = streamBuilder ?? throw new ArgumentNullException(nameof(streamBuilder));
            _summaryBuilder = summaryBuilder ?? throw new ArgumentNullException(nameof(summaryBuilder));

            AddMetadata <FieldsCollector, string[]>();
            AddMetadata <ResultAvailableAfterCollector, long>();
        }
        public PullResponseHandler(IResultStreamBuilder streamBuilder, SummaryBuilder summaryBuilder)
        {
            _streamBuilder  = streamBuilder ?? throw new ArgumentNullException(nameof(streamBuilder));
            _summaryBuilder = summaryBuilder ?? throw new ArgumentNullException(nameof(summaryBuilder));

            AddMetadata <ResultConsumedAfterCollector, long>();
            AddMetadata <TypeCollector, StatementType>();
            AddMetadata <CountersCollector, ICounters>();
            AddMetadata <PlanCollector, IPlan>();
            AddMetadata <ProfiledPlanCollector, IProfiledPlan>();
            AddMetadata <NotificationsCollector, IList <INotification> >();
        }
        public PullResponseHandler(IResultStreamBuilder streamBuilder, SummaryBuilder summaryBuilder,
                                   IBookmarkTracker bookmarkTracker)
        {
            _streamBuilder   = streamBuilder ?? throw new ArgumentNullException(nameof(streamBuilder));
            _summaryBuilder  = summaryBuilder ?? throw new ArgumentNullException(nameof(summaryBuilder));
            _bookmarkTracker = bookmarkTracker;

            AddMetadata <BookmarkCollector, Bookmark>();
            AddMetadata <TimeToLastCollector, long>();
            AddMetadata <TypeCollector, QueryType>();
            AddMetadata <CountersCollector, ICounters>();
            AddMetadata <PlanCollector, IPlan>();
            AddMetadata <ProfiledPlanCollector, IProfiledPlan>();
            AddMetadata <NotificationsCollector, IList <INotification> >();
        }