import 'router.dart'; /// A chain of arbitrary handlers obtained by routing a path. class MiddlewarePipeline { /// All the possible routes that matched the given path. final Iterable> routingResults; List? _handlers; /// An ordered list of every handler delegated to handle this request. List? get handlers { if (_handlers != null) return _handlers; final handlers = []; for (var result in routingResults) { handlers.addAll(result.allHandlers); } return _handlers = handlers; } MiddlewarePipeline(Iterable> routingResults) : this.routingResults = routingResults.toList(); } /// Iterates through a [MiddlewarePipeline]. class MiddlewarePipelineIterator extends Iterator> { final MiddlewarePipeline pipeline; final Iterator> _inner; MiddlewarePipelineIterator(this.pipeline) : _inner = pipeline.routingResults.iterator; @override RoutingResult get current => _inner.current; @override bool moveNext() => _inner.moveNext(); }