OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 part of generate; |
| 6 |
| 7 bool isMojomDart(String path) => path.endsWith('.mojom.dart'); |
| 8 bool isMojom(String path) => path.endsWith('.mojom'); |
| 9 |
| 10 /// An Error for problems on the command line. |
| 11 class CommandLineError extends Error { |
| 12 final _msg; |
| 13 CommandLineError(this._msg); |
| 14 toString() => _msg; |
| 15 } |
| 16 |
| 17 /// An Error for failures of the bindings generation script. |
| 18 class GenerationError extends Error { |
| 19 final _msg; |
| 20 GenerationError(this._msg); |
| 21 toString() => _msg; |
| 22 } |
| 23 |
| 24 /// An Error for failing to download a .mojom file. |
| 25 class DownloadError extends Error { |
| 26 final _msg; |
| 27 DownloadError(this._msg); |
| 28 toString() => _msg; |
| 29 } |
| 30 |
| 31 /// The base type of data passed to actions for [mojomDirIter]. |
| 32 class PackageIterData { |
| 33 final Directory _mojomPackage; |
| 34 PackageIterData(this._mojomPackage); |
| 35 Directory get mojomPackage => _mojomPackage; |
| 36 } |
| 37 |
| 38 /// Data for [mojomDirIter] that includes the path to the Mojo SDK for bindings |
| 39 /// generation. |
| 40 class GenerateIterData extends PackageIterData { |
| 41 final Directory _mojoSdk; |
| 42 GenerateIterData(this._mojoSdk, Directory mojomPackage) |
| 43 : super(mojomPackage); |
| 44 Directory get mojoSdk => _mojoSdk; |
| 45 } |
| 46 |
| 47 /// The type of action performed by [mojomDirIter]. |
| 48 typedef Future MojomAction(PackageIterData data, Directory mojomDirectory); |
| 49 |
| 50 packageDirIter( |
| 51 Directory packages, PackageIterData data, MojomAction action) async { |
| 52 await for (var package in packages.list()) { |
| 53 if (package is Directory) { |
| 54 await action(data, package); |
| 55 } |
| 56 } |
| 57 } |
| 58 |
| 59 /// Iterates over mojom directories of Dart packages, taking some action for |
| 60 /// each. |
| 61 /// |
| 62 /// For each 'mojom' subdirectory of each subdirectory in [packages], runs |
| 63 /// [action] on the subdirectory passing along [data] to [action]. |
| 64 mojomDirIter( |
| 65 Directory packages, PackageIterData data, MojomAction action) async { |
| 66 await packageDirIter(packages, data, (d, p) async { |
| 67 if (p.path == d.mojomPackage.path) return; |
| 68 if (verbose) print("package = $p"); |
| 69 final mojomDirectory = new Directory(path.join(p.path, 'mojom')); |
| 70 if (verbose) print("looking for = $mojomDirectory"); |
| 71 if (await mojomDirectory.exists()) { |
| 72 await action(d, mojomDirectory); |
| 73 } else if (verbose) { |
| 74 print("$mojomDirectory not found"); |
| 75 } |
| 76 }); |
| 77 } |
| 78 |
| 79 /// Download file at [url] using [httpClient]. Throw a [DownloadError] if |
| 80 /// the file is not successfully downloaded. |
| 81 Future<String> getUrl(HttpClient httpClient, String url) async { |
| 82 try { |
| 83 var request = await httpClient.getUrl(Uri.parse(url)); |
| 84 var response = await request.close(); |
| 85 if (response.statusCode >= 400) { |
| 86 var msg = "Failed to download $url\nCode ${response.statusCode}"; |
| 87 if (response.reasonPhrase != null) { |
| 88 msg = "$msg: ${response.reasonPhrase}"; |
| 89 } |
| 90 throw new DownloadError(msg); |
| 91 } |
| 92 var fileString = new StringBuffer(); |
| 93 await for (String contents in response.transform(UTF8.decoder)) { |
| 94 fileString.write(contents); |
| 95 } |
| 96 return fileString.toString(); |
| 97 } catch(e) { |
| 98 throw new DownloadError("$e"); |
| 99 } |
| 100 } |
OLD | NEW |