Index: mojo/public/dart/third_party/shelf/lib/src/pipeline.dart |
diff --git a/mojo/public/dart/third_party/shelf/lib/src/pipeline.dart b/mojo/public/dart/third_party/shelf/lib/src/pipeline.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..016e5fc3696c297395f6b1f51f4032103db52584 |
--- /dev/null |
+++ b/mojo/public/dart/third_party/shelf/lib/src/pipeline.dart |
@@ -0,0 +1,45 @@ |
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library shelf.pipeline; |
+ |
+import 'handler.dart'; |
+import 'middleware.dart'; |
+ |
+/// A helper that makes it easy to compose a set of [Middleware] and a |
+/// [Handler]. |
+/// |
+/// var handler = const Pipeline() |
+/// .addMiddleware(loggingMiddleware) |
+/// .addMiddleware(cachingMiddleware) |
+/// .addHandler(application); |
+class Pipeline { |
+ final Pipeline _parent; |
+ final Middleware _middleware; |
+ |
+ const Pipeline() |
+ : _middleware = null, |
+ _parent = null; |
+ |
+ Pipeline._(this._middleware, this._parent); |
+ |
+ /// Returns a new [Pipeline] with [middleware] added to the existing set of |
+ /// [Middleware]. |
+ /// |
+ /// [middleware] will be the last [Middleware] to process a request and |
+ /// the first to process a response. |
+ Pipeline addMiddleware(Middleware middleware) => |
+ new Pipeline._(middleware, this); |
+ |
+ /// Returns a new [Handler] with [handler] as the final processor of a |
+ /// [Request] if all of the middleware in the pipeline have passed the request |
+ /// through. |
+ Handler addHandler(Handler handler) { |
+ if (_middleware == null) return handler; |
+ return _parent.addHandler(_middleware(handler)); |
+ } |
+ |
+ /// Exposes this pipeline of [Middleware] as a single middleware instance. |
+ Middleware get middleware => addHandler; |
+} |