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; final 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; */ if (_handlers.isNotEmpty) { return _handlers; } for (var result in routingResults) { _handlers.addAll(result.allHandlers); } return _handlers; } MiddlewarePipeline(Iterable> routingResults) : 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(); }