Line data Source code
1 : // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 : // for details. All rights reserved. Use of this source code is governed by a
3 : // BSD-style license that can be found in the LICENSE file.
4 :
5 : import 'dart:async';
6 :
7 : import '../result.dart';
8 : import 'value.dart';
9 :
10 : /// A result representing a thrown error.
11 : class ErrorResult<T> implements Result<T> {
12 : final error;
13 : final StackTrace stackTrace;
14 :
15 : bool get isValue => false;
16 : bool get isError => true;
17 : ValueResult<T> get asValue => null;
18 : ErrorResult<T> get asError => this;
19 :
20 0 : ErrorResult(this.error, this.stackTrace);
21 :
22 : void complete(Completer completer) {
23 0 : completer.completeError(error, stackTrace);
24 : }
25 :
26 : void addTo(EventSink sink) {
27 0 : sink.addError(error, stackTrace);
28 : }
29 :
30 0 : Future<T> get asFuture => new Future.error(error, stackTrace);
31 :
32 : /// Calls an error handler with the error and stacktrace.
33 : ///
34 : /// An async error handler function is either a function expecting two
35 : /// arguments, which will be called with the error and the stack trace, or it
36 : /// has to be a function expecting only one argument, which will be called
37 : /// with only the error.
38 : void handle(Function errorHandler) {
39 0 : if (errorHandler is ZoneBinaryCallback) {
40 0 : errorHandler(error, stackTrace);
41 : } else {
42 0 : errorHandler(error);
43 : }
44 : }
45 : }
|