Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Side by Side Diff: mojo/dart/mojom/lib/src/utils.dart

Issue 1210253006: Dart: Allows the mojom package's generate script to download .mojoms. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698