| Index: mojo/dart/mojom/lib/src/utils.dart
|
| diff --git a/mojo/dart/mojom/lib/src/utils.dart b/mojo/dart/mojom/lib/src/utils.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..65ba2485a7a3f7e9446b07ca21cd34165b42adea
|
| --- /dev/null
|
| +++ b/mojo/dart/mojom/lib/src/utils.dart
|
| @@ -0,0 +1,100 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +part of generate;
|
| +
|
| +bool isMojomDart(String path) => path.endsWith('.mojom.dart');
|
| +bool isMojom(String path) => path.endsWith('.mojom');
|
| +
|
| +/// An Error for problems on the command line.
|
| +class CommandLineError extends Error {
|
| + final _msg;
|
| + CommandLineError(this._msg);
|
| + toString() => _msg;
|
| +}
|
| +
|
| +/// An Error for failures of the bindings generation script.
|
| +class GenerationError extends Error {
|
| + final _msg;
|
| + GenerationError(this._msg);
|
| + toString() => _msg;
|
| +}
|
| +
|
| +/// An Error for failing to download a .mojom file.
|
| +class DownloadError extends Error {
|
| + final _msg;
|
| + DownloadError(this._msg);
|
| + toString() => _msg;
|
| +}
|
| +
|
| +/// The base type of data passed to actions for [mojomDirIter].
|
| +class PackageIterData {
|
| + final Directory _mojomPackage;
|
| + PackageIterData(this._mojomPackage);
|
| + Directory get mojomPackage => _mojomPackage;
|
| +}
|
| +
|
| +/// Data for [mojomDirIter] that includes the path to the Mojo SDK for bindings
|
| +/// generation.
|
| +class GenerateIterData extends PackageIterData {
|
| + final Directory _mojoSdk;
|
| + GenerateIterData(this._mojoSdk, Directory mojomPackage)
|
| + : super(mojomPackage);
|
| + Directory get mojoSdk => _mojoSdk;
|
| +}
|
| +
|
| +/// The type of action performed by [mojomDirIter].
|
| +typedef Future MojomAction(PackageIterData data, Directory mojomDirectory);
|
| +
|
| +packageDirIter(
|
| + Directory packages, PackageIterData data, MojomAction action) async {
|
| + await for (var package in packages.list()) {
|
| + if (package is Directory) {
|
| + await action(data, package);
|
| + }
|
| + }
|
| +}
|
| +
|
| +/// Iterates over mojom directories of Dart packages, taking some action for
|
| +/// each.
|
| +///
|
| +/// For each 'mojom' subdirectory of each subdirectory in [packages], runs
|
| +/// [action] on the subdirectory passing along [data] to [action].
|
| +mojomDirIter(
|
| + Directory packages, PackageIterData data, MojomAction action) async {
|
| + await packageDirIter(packages, data, (d, p) async {
|
| + if (p.path == d.mojomPackage.path) return;
|
| + if (verbose) print("package = $p");
|
| + final mojomDirectory = new Directory(path.join(p.path, 'mojom'));
|
| + if (verbose) print("looking for = $mojomDirectory");
|
| + if (await mojomDirectory.exists()) {
|
| + await action(d, mojomDirectory);
|
| + } else if (verbose) {
|
| + print("$mojomDirectory not found");
|
| + }
|
| + });
|
| +}
|
| +
|
| +/// Download file at [url] using [httpClient]. Throw a [DownloadError] if
|
| +/// the file is not successfully downloaded.
|
| +Future<String> getUrl(HttpClient httpClient, String url) async {
|
| + try {
|
| + var request = await httpClient.getUrl(Uri.parse(url));
|
| + var response = await request.close();
|
| + if (response.statusCode >= 400) {
|
| + var msg = "Failed to download $url\nCode ${response.statusCode}";
|
| + if (response.reasonPhrase != null) {
|
| + msg = "$msg: ${response.reasonPhrase}";
|
| + }
|
| + throw new DownloadError(msg);
|
| + }
|
| + var fileString = new StringBuffer();
|
| + await for (String contents in response.transform(UTF8.decoder)) {
|
| + fileString.write(contents);
|
| + }
|
| + return fileString.toString();
|
| + } catch(e) {
|
| + throw new DownloadError("$e");
|
| + }
|
| +}
|
|
|