platform/packages/route/lib/src/middleware_pipeline.dart

51 lines
1.3 KiB
Dart
Raw Normal View History

2016-11-25 23:22:33 +00:00
import 'router.dart';
2016-12-19 04:43:55 +00:00
/// A chain of arbitrary handlers obtained by routing a path.
2018-08-20 18:59:51 +00:00
class MiddlewarePipeline<T> {
2016-12-19 04:43:55 +00:00
/// All the possible routes that matched the given path.
2018-08-20 18:59:51 +00:00
final Iterable<RoutingResult<T>> routingResults;
2022-02-13 16:48:37 +00:00
final List<T> _handlers = [];
2016-11-25 23:22:33 +00:00
2016-12-19 04:43:55 +00:00
/// An ordered list of every handler delegated to handle this request.
2022-02-13 16:48:37 +00:00
List<T> get handlers {
2021-05-07 05:21:13 +00:00
/*
2017-11-25 00:26:06 +00:00
if (_handlers != null) return _handlers;
2018-08-20 18:59:51 +00:00
final handlers = <T>[];
2016-11-25 23:22:33 +00:00
2018-08-20 18:59:51 +00:00
for (var result in routingResults) {
2016-11-25 23:22:33 +00:00
handlers.addAll(result.allHandlers);
}
2017-11-25 00:26:06 +00:00
return _handlers = handlers;
2021-05-07 05:21:13 +00:00
*/
2021-05-09 11:16:15 +00:00
if (_handlers.isNotEmpty) {
2021-05-07 05:21:13 +00:00
return _handlers;
}
for (var result in routingResults) {
_handlers.addAll(result.allHandlers);
}
return _handlers;
2016-11-25 23:22:33 +00:00
}
2018-08-20 19:34:00 +00:00
MiddlewarePipeline(Iterable<RoutingResult<T>> routingResults)
2021-06-26 13:13:43 +00:00
: routingResults = routingResults.toList();
2016-11-25 23:22:33 +00:00
}
2019-02-03 18:28:25 +00:00
/// Iterates through a [MiddlewarePipeline].
class MiddlewarePipelineIterator<T> extends Iterator<RoutingResult<T>> {
final MiddlewarePipeline<T> pipeline;
final Iterator<RoutingResult<T>> _inner;
MiddlewarePipelineIterator(this.pipeline)
: _inner = pipeline.routingResults.iterator;
@override
RoutingResult<T> get current => _inner.current;
@override
bool moveNext() => _inner.moveNext();
}