Index: pkg/json_rpc_2/lib/src/utils.dart |
diff --git a/pkg/json_rpc_2/lib/src/utils.dart b/pkg/json_rpc_2/lib/src/utils.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1eff004f1fb1407d31ac175e4843c99a73f338cd |
--- /dev/null |
+++ b/pkg/json_rpc_2/lib/src/utils.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 json_rpc_2.utils; |
+ |
+import 'dart:async'; |
+ |
+import 'package:stack_trace/stack_trace.dart'; |
+ |
+typedef ZeroArgumentFunction(); |
+ |
+/// Like [new Future.sync], but automatically wraps the future in a |
+/// [Chain.track] call. |
+Future syncFuture(callback()) => Chain.track(new Future.sync(callback)); |
+ |
+/// Returns a sentence fragment listing the elements of [iter]. |
+/// |
+/// This converts each element of [iter] to a string and separates them with |
+/// commas and/or "and" where appropriate. |
+String toSentence(Iterable iter) { |
+ if (iter.length == 1) return iter.first.toString(); |
+ return iter.take(iter.length - 1).join(", ") + " and ${iter.last}"; |
+} |
+ |
+/// Returns [name] if [number] is 1, or the plural of [name] otherwise. |
+/// |
+/// By default, this just adds "s" to the end of [name] to get the plural. If |
+/// [plural] is passed, that's used instead. |
+String pluralize(String name, int number, {String plural}) { |
+ if (number == 1) return name; |
+ if (plural != null) return plural; |
+ return '${name}s'; |
+} |
+ |
+/// A regular expression to match the exception prefix that some exceptions' |
+/// [Object.toString] values contain. |
+final _exceptionPrefix = new RegExp(r'^([A-Z][a-zA-Z]*)?(Exception|Error): '); |
+ |
+/// Get a string description of an exception. |
+/// |
+/// Many exceptions include the exception class name at the beginning of their |
+/// [toString], so we remove that if it exists. |
+String getErrorMessage(error) => |
+ error.toString().replaceFirst(_exceptionPrefix, ''); |