on master help sign in
Merge pull request #113 from ldesgoui/std-futures

Port to std::future

commitad0ded5fb0a433587b1306f8fb0570712e0d7dba authorNick Fitzgerald <fitzgen@gmail.com> dateTue 3 Dec 2019, 10:01 (7 years ago) parent83d5581aa84b6c
27 files changed+793−850
Cargo.lock+448−487 Cargo.toml+10−10 benches/benches.rs+5−18 crates/js-api/Cargo.toml+2−3 crates/js-api/src/lib.rs+9−6 examples/counter/Cargo.toml+1−1 examples/game-of-life/Cargo.toml+2−3 examples/game-of-life/src/lib.rs+15−10 examples/hello-world/Cargo.toml+1−1 examples/input-form/Cargo.toml+1−1 examples/moire/Cargo.toml+2−3 examples/moire/src/lib.rs+2−2 examples/sierpinski-triangle/Cargo.toml+2−3 examples/sierpinski-triangle/src/lib.rs+2−2 examples/todomvc/Cargo.toml+3−4 examples/todomvc/src/router.rs+22−19 src/change_list/traversal.rs+1−1 src/events.rs+2−2 src/lib.rs+1−1 src/render.rs+4−4 src/vdom.rs+82−77 tests/web/cached.rs+69−61 tests/web/events.rs+52−69 tests/web/js_api.rs+28−35 tests/web/keyed.rs+14−15 tests/web/main.rs+13−11 tests/web/render.rs−1
Cargo.lock+448−487
@@ -1,104 +1,71 @@
11# This file is automatically @generated by Cargo.
22# It is not intended for manual editing.
33[[package]]
4−name = "aho-corasick"
5−version = "0.7.3"
4+name = "anyhow"
5+version = "1.0.25"
66source = "registry+https://github.com/rust-lang/crates.io-index"
7−dependencies = [
8− "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
9−]
10−
11−[[package]]
12−name = "arrayvec"
13−version = "0.4.10"
14−source = "registry+https://github.com/rust-lang/crates.io-index"
15−dependencies = [
16− "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
17−]
187
198[[package]]
209name = "atty"
21−version = "0.2.11"
10+version = "0.2.13"
2211source = "registry+https://github.com/rust-lang/crates.io-index"
2312dependencies = [
24− "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
25− "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
26− "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
13+ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
14+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
2715]
2816
2917[[package]]
3018name = "autocfg"
31−version = "0.1.2"
19+version = "0.1.7"
3220source = "registry+https://github.com/rust-lang/crates.io-index"
3321
3422[[package]]
35−name = "backtrace"
36−version = "0.3.15"
23+name = "bitflags"
24+version = "1.2.1"
3725source = "registry+https://github.com/rust-lang/crates.io-index"
38−dependencies = [
39− "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
40− "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
41− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
42− "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
43− "rustc-demangle 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
44− "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
45−]
4626
4727[[package]]
48−name = "backtrace-sys"
49−version = "0.1.28"
28+name = "bstr"
29+version = "0.2.8"
5030source = "registry+https://github.com/rust-lang/crates.io-index"
5131dependencies = [
52− "cc 1.0.34 (registry+https://github.com/rust-lang/crates.io-index)",
53− "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
32+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
33+ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
34+ "regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
35+ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
5436]
5537
56−[[package]]
57−name = "bitflags"
58−version = "1.1.0"
59−source = "registry+https://github.com/rust-lang/crates.io-index"
60−
6138[[package]]
6239name = "bumpalo"
63−version = "2.5.0"
40+version = "2.6.0"
6441source = "registry+https://github.com/rust-lang/crates.io-index"
6542
6643[[package]]
6744name = "byteorder"
68−version = "1.3.1"
45+version = "1.3.2"
6946source = "registry+https://github.com/rust-lang/crates.io-index"
7047
7148[[package]]
7249name = "cast"
73−version = "0.2.2"
74−source = "registry+https://github.com/rust-lang/crates.io-index"
75−
76−[[package]]
77−name = "cc"
78−version = "1.0.34"
50+version = "0.2.3"
7951source = "registry+https://github.com/rust-lang/crates.io-index"
52+dependencies = [
53+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
54+]
8055
8156[[package]]
8257name = "cfg-if"
83−version = "0.1.9"
58+version = "0.1.10"
8459source = "registry+https://github.com/rust-lang/crates.io-index"
8560
8661[[package]]
8762name = "clap"
88−version = "2.32.0"
89−source = "registry+https://github.com/rust-lang/crates.io-index"
90−dependencies = [
91− "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
92− "textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
93− "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
94−]
95−
96−[[package]]
97−name = "cloudabi"
98−version = "0.0.3"
63+version = "2.33.0"
9964source = "registry+https://github.com/rust-lang/crates.io-index"
10065dependencies = [
101− "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
66+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
67+ "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
68+ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
10269]
10370
10471[[package]]
@@ -106,8 +73,8 @@ name = "console_error_panic_hook"
10673version = "0.1.6"
10774source = "registry+https://github.com/rust-lang/crates.io-index"
10875dependencies = [
109− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
110− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
76+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
77+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
11178]
11279
11380[[package]]
@@ -116,112 +83,121 @@ version = "0.1.2"
11683source = "registry+https://github.com/rust-lang/crates.io-index"
11784dependencies = [
11885 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
119− "web-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
86+ "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
12087]
12188
12289[[package]]
12390name = "criterion"
124−version = "0.2.11"
125−source = "registry+https://github.com/rust-lang/crates.io-index"
126−dependencies = [
127− "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
128− "cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
129− "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
130− "criterion-plot 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
131− "csv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
132− "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
133− "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
134− "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
135− "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
136− "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
137− "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
138− "rand_xoshiro 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
139− "rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
140− "rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
141− "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)",
142− "serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
143− "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
144− "tinytemplate 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
145− "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
91+version = "0.3.0"
92+source = "registry+https://github.com/rust-lang/crates.io-index"
93+dependencies = [
94+ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
95+ "cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
96+ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
97+ "criterion-plot 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
98+ "csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
99+ "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
100+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
101+ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
102+ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
103+ "rand_os 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
104+ "rand_xoshiro 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
105+ "rayon 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
106+ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
107+ "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
108+ "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)",
109+ "tinytemplate 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
110+ "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
146111]
147112
148113[[package]]
149114name = "criterion-plot"
150−version = "0.3.1"
115+version = "0.4.0"
151116source = "registry+https://github.com/rust-lang/crates.io-index"
152117dependencies = [
153− "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
154− "cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
155− "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
118+ "cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
119+ "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
156120]
157121
158122[[package]]
159123name = "crossbeam-deque"
160−version = "0.2.0"
124+version = "0.7.2"
161125source = "registry+https://github.com/rust-lang/crates.io-index"
162126dependencies = [
163− "crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
164− "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
127+ "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
128+ "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
165129]
166130
167131[[package]]
168132name = "crossbeam-epoch"
169−version = "0.3.1"
133+version = "0.8.0"
170134source = "registry+https://github.com/rust-lang/crates.io-index"
171135dependencies = [
172− "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
173− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
174− "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
175− "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
176− "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
177− "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
178− "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
136+ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
137+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
138+ "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
139+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
140+ "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
141+ "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
142+]
143+
144+[[package]]
145+name = "crossbeam-queue"
146+version = "0.2.0"
147+source = "registry+https://github.com/rust-lang/crates.io-index"
148+dependencies = [
149+ "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
179150]
180151
181152[[package]]
182153name = "crossbeam-utils"
183−version = "0.2.2"
154+version = "0.7.0"
184155source = "registry+https://github.com/rust-lang/crates.io-index"
185156dependencies = [
186− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
157+ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
158+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
159+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
187160]
188161
189162[[package]]
190163name = "csv"
191−version = "1.0.5"
164+version = "1.1.1"
192165source = "registry+https://github.com/rust-lang/crates.io-index"
193166dependencies = [
194− "csv-core 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
195− "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)",
167+ "bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
168+ "csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
169+ "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
170+ "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
171+ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
196172]
197173
198174[[package]]
199175name = "csv-core"
200−version = "0.1.5"
176+version = "0.1.6"
201177source = "registry+https://github.com/rust-lang/crates.io-index"
202178dependencies = [
203− "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
179+ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
204180]
205181
206182[[package]]
207183name = "dodrio"
208184version = "0.1.0"
209185dependencies = [
210− "bumpalo 2.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
211− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
186+ "bumpalo 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
187+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
212188 "console_log 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
213− "criterion 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
189+ "criterion 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
214190 "dodrio-js-api 0.1.0",
215− "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
191+ "futures 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
216192 "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
217− "js-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
193+ "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
218194 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
219195 "longest-increasing-subsequence 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
220− "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)",
221− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
222− "wasm-bindgen-futures 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
223− "wasm-bindgen-test 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
224− "web-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
196+ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
197+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
198+ "wasm-bindgen-futures 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
199+ "wasm-bindgen-test 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
200+ "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
225201]
226202
227203[[package]]
@@ -232,9 +208,9 @@ dependencies = [
232208 "console_log 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
233209 "dodrio 0.1.0",
234210 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
235− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
236− "wasm-bindgen-test 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
237− "web-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
211+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
212+ "wasm-bindgen-test 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
213+ "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
238214]
239215
240216[[package]]
@@ -243,12 +219,11 @@ version = "0.1.0"
243219dependencies = [
244220 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
245221 "dodrio 0.1.0",
246− "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
247− "js-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
248− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
249− "wasm-bindgen-futures 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
250− "wasm-bindgen-test 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
251− "web-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
222+ "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
223+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
224+ "wasm-bindgen-futures 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
225+ "wasm-bindgen-test 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
226+ "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
252227]
253228
254229[[package]]
@@ -257,9 +232,9 @@ version = "0.1.0"
257232dependencies = [
258233 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
259234 "dodrio 0.1.0",
260− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
261− "wasm-bindgen-test 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
262− "web-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
235+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
236+ "wasm-bindgen-test 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
237+ "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
263238]
264239
265240[[package]]
@@ -268,9 +243,9 @@ version = "0.1.0"
268243dependencies = [
269244 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
270245 "dodrio 0.1.0",
271− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
272− "wasm-bindgen-test 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
273− "web-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
246+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
247+ "wasm-bindgen-test 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
248+ "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
274249]
275250
276251[[package]]
@@ -278,11 +253,10 @@ name = "dodrio-js-api"
278253version = "0.1.0"
279254dependencies = [
280255 "dodrio 0.1.0",
281− "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
282− "js-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
283− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
284− "wasm-bindgen-futures 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
285− "wasm-bindgen-test 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
256+ "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
257+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
258+ "wasm-bindgen-futures 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
259+ "wasm-bindgen-test 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
286260]
287261
288262[[package]]
@@ -292,26 +266,25 @@ dependencies = [
292266 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
293267 "dodrio 0.1.0",
294268 "dodrio-js-api 0.1.0",
295− "js-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
296− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
297− "web-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
269+ "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
270+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
271+ "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
298272]
299273
300274[[package]]
301275name = "dodrio-moire"
302276version = "0.1.0"
303277dependencies = [
304− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
278+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
305279 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
306280 "console_log 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
307281 "dodrio 0.1.0",
308− "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
309− "js-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
282+ "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
310283 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
311− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
312− "wasm-bindgen-futures 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
313− "wasm-bindgen-test 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
314− "web-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
284+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
285+ "wasm-bindgen-futures 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
286+ "wasm-bindgen-test 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
287+ "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
315288]
316289
317290[[package]]
@@ -320,86 +293,134 @@ version = "0.1.0"
320293dependencies = [
321294 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
322295 "dodrio 0.1.0",
323− "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
324− "js-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
325− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
326− "wasm-bindgen-futures 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
327− "wasm-bindgen-test 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
328− "web-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
296+ "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
297+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
298+ "wasm-bindgen-futures 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
299+ "wasm-bindgen-test 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
300+ "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
329301]
330302
331303[[package]]
332304name = "dodrio-todomvc"
333305version = "0.1.0"
334306dependencies = [
335− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
307+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
336308 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
337309 "console_log 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
338310 "dodrio 0.1.0",
339− "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
340− "js-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
311+ "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
341312 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
342− "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)",
343− "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
344− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
345− "wasm-bindgen-futures 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
346− "wasm-bindgen-test 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
347− "web-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
313+ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
314+ "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)",
315+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
316+ "wasm-bindgen-futures 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
317+ "wasm-bindgen-test 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
318+ "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
348319]
349320
350321[[package]]
351322name = "either"
352−version = "1.5.2"
323+version = "1.5.3"
353324source = "registry+https://github.com/rust-lang/crates.io-index"
354325
355326[[package]]
356−name = "env_logger"
357−version = "0.6.1"
327+name = "futures"
328+version = "0.3.1"
358329source = "registry+https://github.com/rust-lang/crates.io-index"
359330dependencies = [
360− "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
361− "humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
362− "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
363− "regex 1.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
364− "termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
331+ "futures-channel 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
332+ "futures-core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
333+ "futures-executor 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
334+ "futures-io 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
335+ "futures-sink 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
336+ "futures-task 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
337+ "futures-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
365338]
366339
367340[[package]]
368−name = "failure"
369−version = "0.1.5"
341+name = "futures-channel"
342+version = "0.3.1"
370343source = "registry+https://github.com/rust-lang/crates.io-index"
371344dependencies = [
372− "backtrace 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
373− "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
345+ "futures-core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
346+ "futures-sink 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
374347]
375348
376349[[package]]
377−name = "failure_derive"
378−version = "0.1.5"
350+name = "futures-core"
351+version = "0.3.1"
352+source = "registry+https://github.com/rust-lang/crates.io-index"
353+
354+[[package]]
355+name = "futures-executor"
356+version = "0.3.1"
379357source = "registry+https://github.com/rust-lang/crates.io-index"
380358dependencies = [
381− "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
382− "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)",
383− "syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
384− "synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
359+ "futures-core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
360+ "futures-task 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
361+ "futures-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
385362]
386363
387364[[package]]
388−name = "fuchsia-cprng"
389−version = "0.1.1"
365+name = "futures-io"
366+version = "0.3.1"
390367source = "registry+https://github.com/rust-lang/crates.io-index"
391368
392369[[package]]
393−name = "futures"
394−version = "0.1.28"
370+name = "futures-macro"
371+version = "0.3.1"
372+source = "registry+https://github.com/rust-lang/crates.io-index"
373+dependencies = [
374+ "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)",
375+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
376+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
377+ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
378+]
379+
380+[[package]]
381+name = "futures-sink"
382+version = "0.3.1"
395383source = "registry+https://github.com/rust-lang/crates.io-index"
396384
385+[[package]]
386+name = "futures-task"
387+version = "0.3.1"
388+source = "registry+https://github.com/rust-lang/crates.io-index"
389+
390+[[package]]
391+name = "futures-util"
392+version = "0.3.1"
393+source = "registry+https://github.com/rust-lang/crates.io-index"
394+dependencies = [
395+ "futures-channel 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
396+ "futures-core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
397+ "futures-io 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
398+ "futures-macro 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
399+ "futures-sink 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
400+ "futures-task 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
401+ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
402+ "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)",
403+ "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)",
404+ "proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
405+ "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
406+]
407+
397408[[package]]
398409name = "fxhash"
399410version = "0.2.1"
400411source = "registry+https://github.com/rust-lang/crates.io-index"
401412dependencies = [
402− "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
413+ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
414+]
415+
416+[[package]]
417+name = "getrandom"
418+version = "0.1.13"
419+source = "registry+https://github.com/rust-lang/crates.io-index"
420+dependencies = [
421+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
422+ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
423+ "wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
403424]
404425
405426[[package]]
@@ -407,46 +428,46 @@ name = "heck"
407428version = "0.3.1"
408429source = "registry+https://github.com/rust-lang/crates.io-index"
409430dependencies = [
410− "unicode-segmentation 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
431+ "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
411432]
412433
413434[[package]]
414−name = "humantime"
415−version = "1.2.0"
435+name = "hermit-abi"
436+version = "0.1.3"
416437source = "registry+https://github.com/rust-lang/crates.io-index"
417438dependencies = [
418− "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
439+ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
419440]
420441
421442[[package]]
422443name = "itertools"
423−version = "0.8.0"
444+version = "0.8.2"
424445source = "registry+https://github.com/rust-lang/crates.io-index"
425446dependencies = [
426− "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
447+ "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
427448]
428449
429450[[package]]
430451name = "itoa"
431−version = "0.4.3"
452+version = "0.4.4"
432453source = "registry+https://github.com/rust-lang/crates.io-index"
433454
434455[[package]]
435456name = "js-sys"
436−version = "0.3.19"
457+version = "0.3.32"
437458source = "registry+https://github.com/rust-lang/crates.io-index"
438459dependencies = [
439− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
460+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
440461]
441462
442463[[package]]
443464name = "lazy_static"
444−version = "1.3.0"
465+version = "1.4.0"
445466source = "registry+https://github.com/rust-lang/crates.io-index"
446467
447468[[package]]
448469name = "libc"
449−version = "0.2.51"
470+version = "0.2.66"
450471source = "registry+https://github.com/rust-lang/crates.io-index"
451472
452473[[package]]
@@ -454,7 +475,7 @@ name = "log"
454475version = "0.4.8"
455476source = "registry+https://github.com/rust-lang/crates.io-index"
456477dependencies = [
457− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
478+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
458479]
459480
460481[[package]]
@@ -464,175 +485,153 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
464485
465486[[package]]
466487name = "memchr"
467−version = "2.2.0"
488+version = "2.2.1"
468489source = "registry+https://github.com/rust-lang/crates.io-index"
469490dependencies = [
470− "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
491+ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
471492]
472493
473494[[package]]
474495name = "memoffset"
475−version = "0.2.1"
476−source = "registry+https://github.com/rust-lang/crates.io-index"
477−
478−[[package]]
479−name = "nodrop"
480−version = "0.1.13"
496+version = "0.5.3"
481497source = "registry+https://github.com/rust-lang/crates.io-index"
498+dependencies = [
499+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
500+]
482501
483502[[package]]
484503name = "nom"
485504version = "4.2.3"
486505source = "registry+https://github.com/rust-lang/crates.io-index"
487506dependencies = [
488− "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
507+ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
489508 "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
490509]
491510
492511[[package]]
493512name = "num-traits"
494−version = "0.2.6"
513+version = "0.2.10"
495514source = "registry+https://github.com/rust-lang/crates.io-index"
515+dependencies = [
516+ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
517+]
496518
497519[[package]]
498520name = "num_cpus"
499−version = "1.10.0"
521+version = "1.11.1"
500522source = "registry+https://github.com/rust-lang/crates.io-index"
501523dependencies = [
502− "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
524+ "hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
525+ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
503526]
504527
505528[[package]]
506−name = "proc-macro2"
507−version = "0.4.27"
529+name = "pin-utils"
530+version = "0.1.0-alpha.4"
531+source = "registry+https://github.com/rust-lang/crates.io-index"
532+
533+[[package]]
534+name = "proc-macro-hack"
535+version = "0.5.11"
508536source = "registry+https://github.com/rust-lang/crates.io-index"
509537dependencies = [
510− "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
538+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
539+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
540+ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
511541]
512542
513543[[package]]
514−name = "quick-error"
515−version = "1.2.2"
544+name = "proc-macro-nested"
545+version = "0.1.3"
516546source = "registry+https://github.com/rust-lang/crates.io-index"
517547
518548[[package]]
519−name = "quote"
520−version = "0.6.11"
549+name = "proc-macro2"
550+version = "1.0.6"
521551source = "registry+https://github.com/rust-lang/crates.io-index"
522552dependencies = [
523− "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
553+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
524554]
525555
526556[[package]]
527−name = "rand_core"
528−version = "0.3.1"
557+name = "quote"
558+version = "1.0.2"
529559source = "registry+https://github.com/rust-lang/crates.io-index"
530560dependencies = [
531− "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
561+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
532562]
533563
534564[[package]]
535565name = "rand_core"
536−version = "0.4.0"
566+version = "0.5.1"
537567source = "registry+https://github.com/rust-lang/crates.io-index"
568+dependencies = [
569+ "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
570+]
538571
539572[[package]]
540573name = "rand_os"
541−version = "0.1.3"
574+version = "0.2.2"
542575source = "registry+https://github.com/rust-lang/crates.io-index"
543576dependencies = [
544− "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
545− "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
546− "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
547− "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
548− "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
549− "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
577+ "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
578+ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
550579]
551580
552581[[package]]
553582name = "rand_xoshiro"
554−version = "0.1.0"
583+version = "0.3.1"
555584source = "registry+https://github.com/rust-lang/crates.io-index"
556585dependencies = [
557− "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
558− "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
586+ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
559587]
560588
561589[[package]]
562590name = "rayon"
563−version = "1.0.3"
591+version = "1.2.1"
564592source = "registry+https://github.com/rust-lang/crates.io-index"
565593dependencies = [
566− "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
567− "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
568− "rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
594+ "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
595+ "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
596+ "rayon-core 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
569597]
570598
571599[[package]]
572600name = "rayon-core"
573−version = "1.4.1"
601+version = "1.6.1"
574602source = "registry+https://github.com/rust-lang/crates.io-index"
575603dependencies = [
576− "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
577− "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
578− "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
579− "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
604+ "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
605+ "crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
606+ "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
607+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
608+ "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
580609]
581610
582611[[package]]
583−name = "rdrand"
584−version = "0.4.0"
612+name = "regex-automata"
613+version = "0.1.8"
585614source = "registry+https://github.com/rust-lang/crates.io-index"
586615dependencies = [
587− "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
616+ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
588617]
589618
590619[[package]]
591−name = "redox_syscall"
592−version = "0.1.52"
593−source = "registry+https://github.com/rust-lang/crates.io-index"
594−
595−[[package]]
596−name = "redox_termios"
597−version = "0.1.1"
620+name = "rustc_version"
621+version = "0.2.3"
598622source = "registry+https://github.com/rust-lang/crates.io-index"
599623dependencies = [
600− "redox_syscall 0.1.52 (registry+https://github.com/rust-lang/crates.io-index)",
624+ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
601625]
602626
603−[[package]]
604−name = "regex"
605−version = "1.1.5"
606−source = "registry+https://github.com/rust-lang/crates.io-index"
607−dependencies = [
608− "aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
609− "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
610− "regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
611− "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
612− "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
613−]
614−
615−[[package]]
616−name = "regex-syntax"
617−version = "0.6.6"
618−source = "registry+https://github.com/rust-lang/crates.io-index"
619−dependencies = [
620− "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
621−]
622−
623−[[package]]
624−name = "rustc-demangle"
625−version = "0.1.13"
626−source = "registry+https://github.com/rust-lang/crates.io-index"
627−
628627[[package]]
629628name = "ryu"
630−version = "1.0.0"
629+version = "1.0.2"
631630source = "registry+https://github.com/rust-lang/crates.io-index"
632631
633632[[package]]
634633name = "same-file"
635−version = "1.0.4"
634+version = "1.0.5"
636635source = "registry+https://github.com/rust-lang/crates.io-index"
637636dependencies = [
638637 "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -645,129 +644,100 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
645644
646645[[package]]
647646name = "scopeguard"
648−version = "0.3.3"
647+version = "1.0.0"
649648source = "registry+https://github.com/rust-lang/crates.io-index"
650649
651650[[package]]
652−name = "serde"
653−version = "1.0.98"
651+name = "semver"
652+version = "0.9.0"
654653source = "registry+https://github.com/rust-lang/crates.io-index"
655654dependencies = [
656− "serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
655+ "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
657656]
658657
659658[[package]]
660−name = "serde_derive"
661−version = "1.0.90"
659+name = "semver-parser"
660+version = "0.7.0"
662661source = "registry+https://github.com/rust-lang/crates.io-index"
663−dependencies = [
664− "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
665− "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)",
666− "syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
667−]
668662
669663[[package]]
670−name = "serde_json"
671−version = "1.0.40"
664+name = "serde"
665+version = "1.0.103"
672666source = "registry+https://github.com/rust-lang/crates.io-index"
673667dependencies = [
674− "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
675− "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
676− "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)",
668+ "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
677669]
678670
679671[[package]]
680−name = "sourcefile"
681−version = "0.1.4"
682−source = "registry+https://github.com/rust-lang/crates.io-index"
683−
684−[[package]]
685−name = "syn"
686−version = "0.15.30"
672+name = "serde_derive"
673+version = "1.0.103"
687674source = "registry+https://github.com/rust-lang/crates.io-index"
688675dependencies = [
689− "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
690− "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)",
691− "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
676+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
677+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
678+ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
692679]
693680
694681[[package]]
695−name = "synstructure"
696−version = "0.10.1"
682+name = "serde_json"
683+version = "1.0.42"
697684source = "registry+https://github.com/rust-lang/crates.io-index"
698685dependencies = [
699− "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
700− "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)",
701− "syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
702− "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
686+ "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
687+ "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
688+ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
703689]
704690
705691[[package]]
706−name = "termcolor"
707−version = "1.0.4"
692+name = "slab"
693+version = "0.4.2"
708694source = "registry+https://github.com/rust-lang/crates.io-index"
709−dependencies = [
710− "wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
711−]
712695
713696[[package]]
714−name = "termion"
715−version = "1.5.1"
697+name = "sourcefile"
698+version = "0.1.4"
716699source = "registry+https://github.com/rust-lang/crates.io-index"
717−dependencies = [
718− "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
719− "redox_syscall 0.1.52 (registry+https://github.com/rust-lang/crates.io-index)",
720− "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
721−]
722700
723701[[package]]
724−name = "textwrap"
725−version = "0.10.0"
702+name = "syn"
703+version = "1.0.11"
726704source = "registry+https://github.com/rust-lang/crates.io-index"
727705dependencies = [
728− "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
706+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
707+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
708+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
729709]
730710
731711[[package]]
732−name = "thread_local"
733−version = "0.3.6"
712+name = "textwrap"
713+version = "0.11.0"
734714source = "registry+https://github.com/rust-lang/crates.io-index"
735715dependencies = [
736− "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
716+ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
737717]
738718
739719[[package]]
740720name = "tinytemplate"
741−version = "1.0.1"
721+version = "1.0.2"
742722source = "registry+https://github.com/rust-lang/crates.io-index"
743723dependencies = [
744− "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)",
745− "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
724+ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
725+ "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)",
746726]
747727
748−[[package]]
749−name = "ucd-util"
750−version = "0.1.3"
751−source = "registry+https://github.com/rust-lang/crates.io-index"
752−
753728[[package]]
754729name = "unicode-segmentation"
755−version = "1.2.1"
730+version = "1.6.0"
756731source = "registry+https://github.com/rust-lang/crates.io-index"
757732
758733[[package]]
759734name = "unicode-width"
760−version = "0.1.5"
735+version = "0.1.6"
761736source = "registry+https://github.com/rust-lang/crates.io-index"
762737
763738[[package]]
764739name = "unicode-xid"
765−version = "0.1.0"
766−source = "registry+https://github.com/rust-lang/crates.io-index"
767−
768−[[package]]
769−name = "utf8-ranges"
770−version = "1.0.2"
740+version = "0.2.0"
771741source = "registry+https://github.com/rust-lang/crates.io-index"
772742
773743[[package]]
@@ -777,126 +747,131 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
777747
778748[[package]]
779749name = "walkdir"
780−version = "2.2.7"
750+version = "2.2.9"
781751source = "registry+https://github.com/rust-lang/crates.io-index"
782752dependencies = [
783− "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
784− "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
753+ "same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
754+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
785755 "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
786756]
787757
758+[[package]]
759+name = "wasi"
760+version = "0.7.0"
761+source = "registry+https://github.com/rust-lang/crates.io-index"
762+
788763[[package]]
789764name = "wasm-bindgen"
790−version = "0.2.42"
765+version = "0.2.55"
791766source = "registry+https://github.com/rust-lang/crates.io-index"
792767dependencies = [
793− "wasm-bindgen-macro 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
768+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
769+ "wasm-bindgen-macro 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
794770]
795771
796772[[package]]
797773name = "wasm-bindgen-backend"
798−version = "0.2.42"
774+version = "0.2.55"
799775source = "registry+https://github.com/rust-lang/crates.io-index"
800776dependencies = [
801− "bumpalo 2.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
802− "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
777+ "bumpalo 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
778+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
803779 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
804− "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
805− "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)",
806− "syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
807− "wasm-bindgen-shared 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
780+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
781+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
782+ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
783+ "wasm-bindgen-shared 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
808784]
809785
810786[[package]]
811787name = "wasm-bindgen-futures"
812−version = "0.3.19"
788+version = "0.4.5"
813789source = "registry+https://github.com/rust-lang/crates.io-index"
814790dependencies = [
815− "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
816− "js-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
817− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
791+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
792+ "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
793+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
794+ "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
818795]
819796
820797[[package]]
821798name = "wasm-bindgen-macro"
822−version = "0.2.42"
799+version = "0.2.55"
823800source = "registry+https://github.com/rust-lang/crates.io-index"
824801dependencies = [
825− "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)",
826− "wasm-bindgen-macro-support 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
802+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
803+ "wasm-bindgen-macro-support 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
827804]
828805
829806[[package]]
830807name = "wasm-bindgen-macro-support"
831−version = "0.2.42"
808+version = "0.2.55"
832809source = "registry+https://github.com/rust-lang/crates.io-index"
833810dependencies = [
834− "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
835− "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)",
836− "syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
837− "wasm-bindgen-backend 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
838− "wasm-bindgen-shared 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
811+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
812+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
813+ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
814+ "wasm-bindgen-backend 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
815+ "wasm-bindgen-shared 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
839816]
840817
841818[[package]]
842819name = "wasm-bindgen-shared"
843−version = "0.2.42"
820+version = "0.2.55"
844821source = "registry+https://github.com/rust-lang/crates.io-index"
845822
846823[[package]]
847824name = "wasm-bindgen-test"
848−version = "0.2.42"
825+version = "0.3.5"
849826source = "registry+https://github.com/rust-lang/crates.io-index"
850827dependencies = [
851828 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
852− "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
853− "js-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
829+ "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
854830 "scoped-tls 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
855− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
856− "wasm-bindgen-futures 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
857− "wasm-bindgen-test-macro 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
831+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
832+ "wasm-bindgen-futures 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
833+ "wasm-bindgen-test-macro 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
858834]
859835
860836[[package]]
861837name = "wasm-bindgen-test-macro"
862−version = "0.2.42"
838+version = "0.3.5"
863839source = "registry+https://github.com/rust-lang/crates.io-index"
864840dependencies = [
865− "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
866− "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)",
841+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
842+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
867843]
868844
869845[[package]]
870846name = "wasm-bindgen-webidl"
871−version = "0.2.42"
847+version = "0.2.55"
872848source = "registry+https://github.com/rust-lang/crates.io-index"
873849dependencies = [
874− "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
850+ "anyhow 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
875851 "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
876852 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
877− "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
878− "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)",
879− "syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
880− "wasm-bindgen-backend 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
881− "weedle 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
853+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
854+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
855+ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
856+ "wasm-bindgen-backend 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
857+ "weedle 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
882858]
883859
884860[[package]]
885861name = "web-sys"
886−version = "0.3.19"
862+version = "0.3.32"
887863source = "registry+https://github.com/rust-lang/crates.io-index"
888864dependencies = [
889− "env_logger 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
890− "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
891− "js-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
865+ "anyhow 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
866+ "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
892867 "sourcefile 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
893− "wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
894− "wasm-bindgen-webidl 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
868+ "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
869+ "wasm-bindgen-webidl 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
895870]
896871
897872[[package]]
898873name = "weedle"
899−version = "0.8.0"
874+version = "0.10.0"
900875source = "registry+https://github.com/rust-lang/crates.io-index"
901876dependencies = [
902877 "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -904,7 +879,7 @@ dependencies = [
904879
905880[[package]]
906881name = "winapi"
907−version = "0.3.7"
882+version = "0.3.8"
908883source = "registry+https://github.com/rust-lang/crates.io-index"
909884dependencies = [
910885 "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -921,7 +896,7 @@ name = "winapi-util"
921896version = "0.1.2"
922897source = "registry+https://github.com/rust-lang/crates.io-index"
923898dependencies = [
924− "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
899+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
925900]
926901
927902[[package]]
@@ -929,111 +904,97 @@ name = "winapi-x86_64-pc-windows-gnu"
929904version = "0.4.0"
930905source = "registry+https://github.com/rust-lang/crates.io-index"
931906
932−[[package]]
933−name = "wincolor"
934−version = "1.0.1"
935−source = "registry+https://github.com/rust-lang/crates.io-index"
936−dependencies = [
937− "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
938− "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
939−]
940−
941907[metadata]
942−"checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c"
943−"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71"
944−"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652"
945−"checksum autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a6d640bee2da49f60a4068a7fae53acde8982514ab7bae8b8cea9e88cbcfd799"
946−"checksum backtrace 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "f106c02a3604afcdc0df5d36cc47b44b55917dbaf3d808f71c163a0ddba64637"
947−"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6"
948−"checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd"
949−"checksum bumpalo 2.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2cd43d82f27d68911e6ee11ee791fb248f138f5d69424dc02e098d4f152b0b05"
950−"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb"
951−"checksum cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "926013f2860c46252efceabb19f4a6b308197505082c609025aa6706c011d427"
952−"checksum cc 1.0.34 (registry+https://github.com/rust-lang/crates.io-index)" = "30f813bf45048a18eda9190fd3c6b78644146056740c43172a5a3699118588fd"
953−"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
954−"checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e"
955−"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
908+"checksum anyhow 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "9267dff192e68f3399525901e709a48c1d3982c9c072fa32f2127a0cb0babf14"
909+"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
910+"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
911+"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
912+"checksum bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8d6c2c5b58ab920a4f5aeaaca34b4488074e8cc7596af94e6f8c6ff247c60245"
913+"checksum bumpalo 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ad807f2fc2bf185eeb98ff3a901bd46dc5ad58163d0fa4577ba0d25674d71708"
914+"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
915+"checksum cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0"
916+"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
917+"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
956918"checksum console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211"
957919"checksum console_log 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1e7871d2947441b0fdd8e2bd1ce2a2f75304f896582c0d572162d48290683c48"
958−"checksum criterion 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0363053954f3e679645fc443321ca128b7b950a6fe288cf5f9335cc22ee58394"
959−"checksum criterion-plot 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76f9212ddf2f4a9eb2d401635190600656a1f88a932ef53d06e7fa4c7e02fb8e"
960−"checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3"
961−"checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150"
962−"checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9"
963−"checksum csv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "9fd1c44c58078cfbeaf11fbb3eac9ae5534c23004ed770cc4bfb48e658ae4f04"
964−"checksum csv-core 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5cdef62f37e6ffe7d1f07a381bc0db32b7a3ff1cac0de56cb0d81e71f53d65"
965−"checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b"
966−"checksum env_logger 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b61fa891024a945da30a9581546e8cfaf5602c7b3f4c137a2805cf388f92075a"
967−"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2"
968−"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1"
969−"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
970−"checksum futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "45dc39533a6cae6da2b56da48edae506bb767ec07370f86f70fc062e9d435869"
920+"checksum criterion 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "938703e165481c8d612ea3479ac8342e5615185db37765162e762ec3523e2fc6"
921+"checksum criterion-plot 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eccdc6ce8bbe352ca89025bee672aa6d24f4eb8c53e3a8b5d1bc58011da072a2"
922+"checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca"
923+"checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac"
924+"checksum crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfd6515864a82d2f877b42813d4553292c6659498c9a2aa31bab5a15243c2700"
925+"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4"
926+"checksum csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "37519ccdfd73a75821cac9319d4fce15a81b9fcf75f951df5b9988aa3a0af87d"
927+"checksum csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9b5cadb6b25c77aeff80ba701712494213f4a8418fcda2ee11b6560c3ad0bf4c"
928+"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
929+"checksum futures 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b6f16056ecbb57525ff698bb955162d0cd03bee84e6241c27ff75c08d8ca5987"
930+"checksum futures-channel 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fcae98ca17d102fd8a3603727b9259fcf7fa4239b603d2142926189bc8999b86"
931+"checksum futures-core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "79564c427afefab1dfb3298535b21eda083ef7935b4f0ecbfcb121f0aec10866"
932+"checksum futures-executor 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1e274736563f686a837a0568b478bdabfeaec2dca794b5649b04e2fe1627c231"
933+"checksum futures-io 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e676577d229e70952ab25f3945795ba5b16d63ca794ca9d2c860e5595d20b5ff"
934+"checksum futures-macro 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "52e7c56c15537adb4f76d0b7a76ad131cb4d2f4f32d3b0bcabcbe1c7c5e87764"
935+"checksum futures-sink 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "171be33efae63c2d59e6dbba34186fe0d6394fb378069a76dfd80fdcffd43c16"
936+"checksum futures-task 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0bae52d6b29cf440e298856fec3965ee6fa71b06aa7495178615953fd669e5f9"
937+"checksum futures-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c0d66274fb76985d3c62c886d1da7ac4c0903a8c9f754e8fe0f35a6a6cc39e76"
971938"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
939+"checksum getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e7db7ca94ed4cd01190ceee0d8a8052f08a247aa1b469a7f68c6a3b71afcf407"
972940"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
973−"checksum humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ca7e5f2e110db35f93b837c81797f3714500b81d517bf20c431b16d3ca4f114"
974−"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
975−"checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b"
976−"checksum js-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "3c994fd445b81741d77f6bcd227d6ed645b95b35a2ecfd2050767450ff1c0b6d"
977−"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14"
978−"checksum libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)" = "bedcc7a809076656486ffe045abeeac163da1b558e963a31e29fbfbeba916917"
941+"checksum hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "307c3c9f937f38e3534b1d6447ecf090cafcc9744e4a6360e8b037b2cf5af120"
942+"checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
943+"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
944+"checksum js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)" = "1c840fdb2167497b0bd0db43d6dfe61e91637fa72f9d061f8bd17ddc44ba6414"
945+"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
946+"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
979947"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
980948"checksum longest-increasing-subsequence 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86"
981−"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39"
982−"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3"
983−"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945"
949+"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
950+"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9"
984951"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6"
985−"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
986−"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba"
987−"checksum proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)" = "4d317f9caece796be1980837fd5cb3dfec5613ebdb04ad0956deea83ce168915"
988−"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0"
989−"checksum quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "cdd8e04bd9c52e0342b406469d494fcb033be4bdbe5c606016defbb1681411e1"
990−"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
991−"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0"
992−"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
993−"checksum rand_xoshiro 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "03b418169fb9c46533f326efd6eed2576699c44ca92d3052a066214a8d828929"
994−"checksum rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "373814f27745b2686b350dd261bfd24576a6fb0e2c5919b3a2b6005f820b0473"
995−"checksum rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b055d1e92aba6877574d8fe604a63c8b5df60f60e5982bf7ccbb1338ea527356"
996−"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
997−"checksum redox_syscall 0.1.52 (registry+https://github.com/rust-lang/crates.io-index)" = "d32b3053e5ced86e4bc0411fec997389532bf56b000e66cb4884eeeb41413d69"
998−"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
999−"checksum regex 1.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "559008764a17de49a3146b234641644ed37d118d1ef641a0bb573d146edc6ce0"
1000−"checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96"
1001−"checksum rustc-demangle 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "adacaae16d02b6ec37fdc7acfcddf365978de76d1983d3ee22afc260e1ca9619"
1002−"checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997"
1003−"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267"
952+"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4"
953+"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72"
954+"checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587"
955+"checksum proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5"
956+"checksum proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e"
957+"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27"
958+"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
959+"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
960+"checksum rand_os 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a788ae3edb696cfcba1c19bfd388cc4b8c21f8a408432b199c072825084da58a"
961+"checksum rand_xoshiro 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0e18c91676f670f6f0312764c759405f13afb98d5d73819840cf72a518487bff"
962+"checksum rayon 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "43739f8831493b276363637423d3622d4bd6394ab6f0a9c4a552e208aeb7fddd"
963+"checksum rayon-core 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f8bf17de6f23b05473c437eb958b9c850bfc8af0961fe17b4cc92d5a627b4791"
964+"checksum regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "92b73c2a1770c255c240eaa4ee600df1704a38dc3feaa6e949e7fcd4f8dc09f9"
965+"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
966+"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8"
967+"checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421"
1004968"checksum scoped-tls 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
1005−"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27"
1006−"checksum serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5626ac617da2f2d9c48af5515a21d5a480dbd151e01bb1c355e26a3e68113"
1007−"checksum serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)" = "58fc82bec244f168b23d1963b45c8bf5726e9a15a9d146a067f9081aeed2de79"
1008−"checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704"
969+"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
970+"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
971+"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
972+"checksum serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)" = "1217f97ab8e8904b57dd22eb61cde455fa7446a9c1cf43966066da047c1f3702"
973+"checksum serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)" = "a8c6faef9a2e64b0064f48570289b4bf8823b7581f1d6157c1b52152306651d0"
974+"checksum serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)" = "1a3351dcbc1f067e2c92ab7c3c1f288ad1a4cffc470b5aaddb4c2e0a3ae80043"
975+"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
1009976"checksum sourcefile 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4bf77cb82ba8453b42b6ae1d692e4cdc92f9a47beaf89a847c8be83f4e328ad3"
1010−"checksum syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)" = "66c8865bf5a7cbb662d8b011950060b3c8743dca141b054bf7195b20d314d8e2"
1011−"checksum synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73687139bf99285483c96ac0add482c3776528beac1d97d444f6e91f203a2015"
1012−"checksum termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4096add70612622289f2fdcdbd5086dc81c1e2675e6ae58d6c4f62a16c6d7f2f"
1013−"checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"
1014−"checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6"
1015−"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
1016−"checksum tinytemplate 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7655088894274afb52b807bd3c87072daa1fedd155068b8705cabfd628956115"
1017−"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86"
1018−"checksum unicode-segmentation 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "aa6024fc12ddfd1c6dbc14a80fa2324d4568849869b779f6bd37e5e4c03344d1"
1019−"checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526"
1020−"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
1021−"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737"
977+"checksum syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238"
978+"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
979+"checksum tinytemplate 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4574b75faccaacddb9b284faecdf0b544b80b6b294f3d062d325c5726a209c20"
980+"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
981+"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
982+"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
1022983"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
1023−"checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1"
1024−"checksum wasm-bindgen 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "ffde3534e5fa6fd936e3260cd62cd644b8656320e369388f9303c955895e35d4"
1025−"checksum wasm-bindgen-backend 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "40c0543374a7ae881cdc5d32d19de28d1d1929e92263ffa7e31712cc2d53f9f1"
1026−"checksum wasm-bindgen-futures 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "0ad171fc1f6e43f97d155d27f4ee5657bd8aa5cce7c497ef3a0a0c5b44618b2d"
1027−"checksum wasm-bindgen-macro 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "f914c94c2c5f4c9364510ca2429e59c92157ec89429243bcc245e983db990a71"
1028−"checksum wasm-bindgen-macro-support 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "9168c413491e4233db7b6884f09a43beb00c14d11d947ffd165242daa48a2385"
1029−"checksum wasm-bindgen-shared 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "326c32126e1a157b6ced7400061a84ac5b11182b2cda6edad7314eb3ae9ac9fe"
1030−"checksum wasm-bindgen-test 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "8aed4ef1aa56f2ef4aff593c516de6a3e48711c703b3f7415c9151a7c9babd17"
1031−"checksum wasm-bindgen-test-macro 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "eb477c50f3c9a9ecd99c78fb9bd3b6599d414b918d5f72165b12c53738011ae1"
1032−"checksum wasm-bindgen-webidl 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "613dbf4d7d3bf10aeb212b35de14a8ef07222c26526d4f931061a83fc9e2a851"
1033−"checksum web-sys 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "24129e4be2281109b3e15a328d3d7f233ee232a5405f75ba1e9bb59a25ebc4d4"
1034−"checksum weedle 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "26a4c67f132386d965390b8a734d5d10adbcd30eb5cc74bd9229af8b83f10044"
1035−"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770"
984+"checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e"
985+"checksum wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d"
986+"checksum wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)" = "29ae32af33bacd663a9a28241abecf01f2be64e6a185c6139b04f18b6385c5f2"
987+"checksum wasm-bindgen-backend 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)" = "1845584bd3593442dc0de6e6d9f84454a59a057722f36f005e44665d6ab19d85"
988+"checksum wasm-bindgen-futures 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1458706aa1b8fe6898d19433c9f110d93a05d1f22ae6adf55810409a94df34b4"
989+"checksum wasm-bindgen-macro 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)" = "87fcc747e6b73c93d22c947a6334644d22cfec5abd8b66238484dc2b0aeb9fe4"
990+"checksum wasm-bindgen-macro-support 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)" = "3dc4b3f2c4078c8c4a5f363b92fcf62604c5913cbd16c6ff5aaf0f74ec03f570"
991+"checksum wasm-bindgen-shared 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)" = "ca0b78d6d3be8589b95d1d49cdc0794728ca734adf36d7c9f07e6459508bb53d"
992+"checksum wasm-bindgen-test 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ed5833682054e941db0b7e2b4877b61bbaafd680608e40d268e070d34558b305"
993+"checksum wasm-bindgen-test-macro 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "9c5dcf70d21d0ff0ea5cdb97dba9a9b56ddad4a9bd10c8912eedc55618be022f"
994+"checksum wasm-bindgen-webidl 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)" = "3126356474ceb717c8fb5549ae387c9fbf4872818454f4d87708bee997214bb5"
995+"checksum web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)" = "98405c0a2e722ed3db341b4c5b70eb9fe0021621f7350bab76df93b09b649bbf"
996+"checksum weedle 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3bb43f70885151e629e2a19ce9e50bd730fd436cfd4b666894c9ce4de9141164"
997+"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
1036998"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
1037999"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9"
10381000"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1039−"checksum wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "561ed901ae465d6185fa7864d63fbd5720d0ef718366c9a4dc83cf6170d7e9ba"
Cargo.toml+10−10
@@ -42,19 +42,18 @@ xxx-unstable-strace = []
4242xxx-unstable-internal-use-only = []
4343
4444[dependencies]
45−bumpalo = "2.5.0"
46−cfg-if = "0.1.9"
47−futures = "0.1.28"
48−wasm-bindgen = "0.2.42"
49−wasm-bindgen-futures = "0.3.19"
50−js-sys = "0.3.19"
45+bumpalo = "2.6.0"
46+cfg-if = "0.1.10"
5147fxhash = "0.2.1"
48+js-sys = "0.3.32"
5249log = { version = "0.4.8", optional = true }
5350longest-increasing-subsequence = "0.1.0"
54−serde = { version = "1.0.98", optional = true }
51+serde = { version = "1.0.103", optional = true }
52+wasm-bindgen = "0.2.55"
53+wasm-bindgen-futures = "0.4.5"
5554
5655[dependencies.web-sys]
57−version = "0.3.19"
56+version = "0.3.32"
5857features = [
5958 "console",
6059 "Document",
@@ -67,8 +66,9 @@ features = [
6766[dev-dependencies]
6867console_log = "0.1.2"
6968dodrio-js-api = { version = "=0.1.0", path = "./crates/js-api" }
69+futures = "0.3.1"
7070log = "0.4.8"
71−wasm-bindgen-test = "0.2.42"
71+wasm-bindgen-test = "0.3.5"
7272
7373[dev-dependencies.web-sys]
7474version = "0.3.19"
@@ -81,7 +81,7 @@ features = [
8181]
8282
8383[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
84−criterion = "0.2.11"
84+criterion = "0.3.0"
8585
8686[profile.bench]
8787debug = true
benches/benches.rs+5−18
@@ -13,6 +13,7 @@ use dodrio::{
1313 CachedSet, Node, Render, RenderContext, Vdom,
1414};
1515use std::cell::RefCell;
16+use std::convert::TryInto;
1617
1718/// The simplest thing we can render: `<div/>`.
1819struct Empty;
@@ -73,16 +74,9 @@ fn criterion_benchmark(c: &mut Criterion) {
7374 })
7475 }
7576 },
76− vec![
77− // TODO: Only test one `n` value until
78− // https://github.com/bheisler/criterion.rs/issues/269 is fixed.
79− //
80− // 100,
81− // 1_000,
82− 10_000,
83− ],
77+ vec![100, 1_000, 10_000],
8478 )
85− .throughput(|n| Throughput::Elements(*n as u32)),
79+ .throughput(|n| Throughput::Elements((*n).try_into().unwrap())),
8680 );
8781
8882 c.bench(
@@ -96,14 +90,7 @@ fn criterion_benchmark(c: &mut Criterion) {
9690 black_box(&vdom);
9791 })
9892 },
99− vec![
100− // TODO: Only test one `n` value until
101− // https://github.com/bheisler/criterion.rs/issues/269 is fixed.
102− //
103− // 100,
104− // 1_000,
105− 10_000,
106− ],
93+ vec![100, 1_000, 10_000],
10794 )
10895 .with_function("empty-to-full-list-to-empty", |b, &n| {
10996 b.iter(|| {
@@ -123,7 +110,7 @@ fn criterion_benchmark(c: &mut Criterion) {
123110 black_box(&vdom);
124111 })
125112 })
126− .throughput(|n| Throughput::Elements(*n as u32)),
113+ .throughput(|n| Throughput::Elements((*n).try_into().unwrap())),
127114 );
128115}
129116
crates/js-api/Cargo.toml+2−3
@@ -16,8 +16,7 @@ travis-ci = { repository = "fitzgen/dodrio" }
1616dodrio = { version = "=0.1.0", path = "../.." }
1717wasm-bindgen = "0.2.42"
1818js-sys = "0.3.19"
19−wasm-bindgen-futures = "0.3.19"
20−futures = "0.1.28"
19+wasm-bindgen-futures = "0.4.5"
2120
2221[dev-dependencies]
23−wasm-bindgen-test = "0.2.42"
22+wasm-bindgen-test = "0.3.5"
crates/js-api/src/lib.rs+9−6
@@ -116,7 +116,6 @@ impl Render for GreetingViaJs {
116116#![deny(missing_docs, missing_debug_implementations)]
117117
118118use dodrio::{builder, bumpalo, Node, Render, RenderContext};
119−use futures::prelude::*;
120119use js_sys::{Object, Promise, Reflect};
121120use wasm_bindgen::prelude::*;
122121use wasm_bindgen::JsCast;
@@ -185,12 +184,16 @@ impl VdomWeak {
185184 /// Schedule re-rendering of the virtual DOM. A promise is returned that is
186185 /// resolved after the rendering has happened.
187186 pub fn render(&self) -> Promise {
188− wasm_bindgen_futures::future_to_promise(
189− self.inner.render().map(|_| JsValue::null()).map_err(|e| {
187+ let future = self.inner.render();
188+
189+ wasm_bindgen_futures::future_to_promise(async move {
190+ if let Err(e) = future.await {
190191 let msg = e.to_string();
191− js_sys::Error::new(&msg).into()
192− }),
193− )
192+ Err(js_sys::Error::new(&msg).into())
193+ } else {
194+ Ok(JsValue::null())
195+ }
196+ })
194197 }
195198}
196199
examples/counter/Cargo.toml+1−1
@@ -30,4 +30,4 @@ features = [
3030]
3131
3232[dev-dependencies]
33−wasm-bindgen-test = "0.2.42"
33+wasm-bindgen-test = "0.3.5"
examples/game-of-life/Cargo.toml+2−3
@@ -14,8 +14,7 @@ dodrio = { path = "../.." }
1414wasm-bindgen = "0.2.42"
1515console_error_panic_hook = "0.1.6"
1616js-sys = "0.3.19"
17−wasm-bindgen-futures = "0.3.19"
18−futures = "0.1.28"
17+wasm-bindgen-futures = "0.4.5"
1918
2019[dependencies.web-sys]
2120version = "0.3.19"
@@ -27,4 +26,4 @@ features = [
2726]
2827
2928[dev-dependencies]
30−wasm-bindgen-test = "0.2.42"
29+wasm-bindgen-test = "0.3.5"
examples/game-of-life/src/lib.rs+15−10
@@ -1,5 +1,4 @@
11use dodrio::{bumpalo, Node, Render, RenderContext, Vdom};
2−use futures::prelude::*;
32use std::cell::RefCell;
43use std::rc::Rc;
54use wasm_bindgen::{prelude::*, JsCast};
@@ -178,20 +177,26 @@ pub fn run() {
178177
179178 // Kick off a loop that keeps computing a tick of the universe and then
180179 // re-rendering on every animation frame.
181− let rc: Rc<RefCell<Option<Closure<FnMut()>>>> = Rc::new(RefCell::new(None));
180+ let rc = <Rc<RefCell<Option<Closure<dyn FnMut()>>>>>::default();
182181 let rc2 = rc.clone();
183182 let window2 = window.clone();
184183 let weak = vdom.weak();
185184 let f = Closure::wrap(Box::new(move || {
186185 weak.schedule_render();
187186
188− wasm_bindgen_futures::spawn_local(
189− weak.with_component(|root| {
190− let universe = root.unwrap_mut::<Universe>();
191− universe.tick();
192− })
193− .map_err(|_| wasm_bindgen::throw_str("impossible, we always keep the vdom alive")),
194− );
187+ wasm_bindgen_futures::spawn_local({
188+ let weak = weak.clone();
189+ async move {
190+ let fut = weak.with_component(|root| {
191+ let universe = root.unwrap_mut::<Universe>();
192+ universe.tick();
193+ });
194+
195+ if fut.await.is_err() {
196+ wasm_bindgen::throw_str("impossible, we always keep the vdom alive");
197+ }
198+ }
199+ });
195200
196201 window
197202 .request_animation_frame(
@@ -202,7 +207,7 @@ pub fn run() {
202207 .unchecked_ref::<js_sys::Function>(),
203208 )
204209 .unwrap_throw();
205− }) as Box<FnMut()>);
210+ }) as Box<dyn FnMut()>);
206211 window2
207212 .request_animation_frame(f.as_ref().unchecked_ref::<js_sys::Function>())
208213 .unwrap_throw();
examples/hello-world/Cargo.toml+1−1
@@ -24,4 +24,4 @@ features = [
2424]
2525
2626[dev-dependencies]
27−wasm-bindgen-test = "0.2.42"
27+wasm-bindgen-test = "0.3.5"
examples/input-form/Cargo.toml+1−1
@@ -29,4 +29,4 @@ features = [
2929]
3030
3131[dev-dependencies]
32−wasm-bindgen-test = "0.2.42"
32+wasm-bindgen-test = "0.3.5"
examples/moire/Cargo.toml+2−3
@@ -10,10 +10,9 @@ crate-type = ["cdylib"]
1010[dependencies]
1111cfg-if = "0.1.9"
1212dodrio = { path = "../.." }
13−futures = "0.1.28"
1413log = "0.4.8"
1514wasm-bindgen = "0.2.42"
16−wasm-bindgen-futures = "0.3.19"
15+wasm-bindgen-futures = "0.4.5"
1716
1817# Optional dependencies for logging.
1918console_error_panic_hook = { optional = true, version = "0.1.6" }
@@ -35,7 +34,7 @@ features = [
3534]
3635
3736[dev-dependencies]
38−wasm-bindgen-test = "0.2.42"
37+wasm-bindgen-test = "0.3.5"
3938
4039[features]
4140logging = [
examples/moire/src/lib.rs+2−2
@@ -27,7 +27,7 @@ pub fn run() {
2727 let vdom = Vdom::new(&scene, component);
2828
2929 // Kick off a loop that keeps re-rendering on every animation frame.
30− let rc: Rc<RefCell<Option<Closure<FnMut()>>>> = Rc::new(RefCell::new(None));
30+ let rc = <Rc<RefCell<Option<Closure<dyn FnMut()>>>>>::default();
3131 let rc2 = rc.clone();
3232 let window2 = window.clone();
3333 let weak = vdom.weak();
@@ -42,7 +42,7 @@ pub fn run() {
4242 .unchecked_ref::<js_sys::Function>(),
4343 )
4444 .unwrap_throw();
45− }) as Box<FnMut()>);
45+ }) as Box<dyn FnMut()>);
4646 window2
4747 .request_animation_frame(f.as_ref().unchecked_ref::<js_sys::Function>())
4848 .unwrap_throw();
examples/sierpinski-triangle/Cargo.toml+2−3
@@ -12,8 +12,7 @@ dodrio = { path = "../.." }
1212wasm-bindgen = "0.2.42"
1313console_error_panic_hook = "0.1.6"
1414js-sys = "0.3.19"
15−wasm-bindgen-futures = "0.3.19"
16−futures = "0.1.28"
15+wasm-bindgen-futures = "0.4.5"
1716
1817[dependencies.web-sys]
1918version = "0.3.19"
@@ -26,4 +25,4 @@ features = [
2625]
2726
2827[dev-dependencies]
29−wasm-bindgen-test = "0.2.42"
28+wasm-bindgen-test = "0.3.5"
examples/sierpinski-triangle/src/lib.rs+2−2
@@ -111,7 +111,7 @@ impl Render for Container {
111111
112112// Kick off a loop that keeps re-rendering on every animation frame.
113113fn animate(window: Window, vdom: Vdom) {
114− let rc: Rc<RefCell<Option<Closure<FnMut()>>>> = Rc::new(RefCell::new(None));
114+ let rc = <Rc<RefCell<Option<Closure<dyn FnMut()>>>>>::default();
115115 let rc2 = rc.clone();
116116 let window2 = window.clone();
117117 let weak = vdom.weak();
@@ -126,7 +126,7 @@ fn animate(window: Window, vdom: Vdom) {
126126 .unchecked_ref::<js_sys::Function>(),
127127 )
128128 .unwrap_throw();
129− }) as Box<FnMut()>);
129+ }) as Box<dyn FnMut()>);
130130 window2
131131 .request_animation_frame(f.as_ref().unchecked_ref::<js_sys::Function>())
132132 .unwrap_throw();
examples/todomvc/Cargo.toml+3−4
@@ -7,12 +7,11 @@ version = "0.1.0"
77[dependencies]
88cfg-if = "0.1.9"
99dodrio = { path = "../..", features = ["serde"] }
10−futures = "0.1.28"
1110js-sys = "0.3.19"
1211serde = { features = ["derive"], version = "1.0.98" }
13−serde_json = "1.0.40"
12+serde_json = "1.0.42"
1413wasm-bindgen = "0.2.42"
15−wasm-bindgen-futures = "0.3.19"
14+wasm-bindgen-futures = "0.4.5"
1615
1716# Optional dependencies for logging.
1817console_error_panic_hook = { optional = true, version = "0.1.6" }
@@ -35,7 +34,7 @@ features = [
3534]
3635
3736[dev-dependencies]
38−wasm-bindgen-test = "0.2.42"
37+wasm-bindgen-test = "0.3.5"
3938
4039[features]
4140logging = [
examples/todomvc/src/router.rs+22−19
@@ -4,7 +4,6 @@ use crate::todos::Todos;
44use crate::utils;
55use crate::visibility::Visibility;
66use dodrio::VdomWeak;
7−use futures::prelude::*;
87use std::str::FromStr;
98use wasm_bindgen::{prelude::*, JsCast};
109
@@ -29,23 +28,27 @@ pub fn start(vdom: VdomWeak) {
2928 v
3029 });
3130
32− wasm_bindgen_futures::spawn_local(
33− vdom.with_component({
34− let vdom = vdom.clone();
35− move |root| {
36− let todos = root.unwrap_mut::<Todos>();
37− // If the todos' visibility already matches the event's
38− // visibility, then there is nothing to do (ha). If they
39− // don't match, then we need to update the todos' visibility
40− // and re-render.
41− if todos.visibility() != new_vis {
42− todos.set_visibility(new_vis);
43− vdom.schedule_render();
44− }
45− }
46− })
47− .map_err(|_| ()),
48− );
31+ wasm_bindgen_futures::spawn_local({
32+ let vdom = vdom.clone();
33+ async move {
34+ let _ = vdom
35+ .with_component({
36+ let vdom = vdom.clone();
37+ move |root| {
38+ let todos = root.unwrap_mut::<Todos>();
39+ // If the todos' visibility already matches the event's
40+ // visibility, then there is nothing to do (ha). If they
41+ // don't match, then we need to update the todos' visibility
42+ // and re-render.
43+ if todos.visibility() != new_vis {
44+ todos.set_visibility(new_vis);
45+ vdom.schedule_render();
46+ }
47+ }
48+ })
49+ .await;
50+ }
51+ });
4952 };
5053
5154 // Call it once to handle the initial `#` fragment.
@@ -56,7 +59,7 @@ pub fn start(vdom: VdomWeak) {
5659 // Note that if we ever intended to unmount our todos app, we would want to
5760 // provide a method for removing this router's event listener and cleaning
5861 // up after ourselves.
59− let on_hash_change = Closure::wrap(Box::new(on_hash_change) as Box<FnMut()>);
62+ let on_hash_change = Closure::wrap(Box::new(on_hash_change) as Box<dyn FnMut()>);
6063 let window = utils::window();
6164 window
6265 .add_event_listener_with_callback("hashchange", on_hash_change.as_ref().unchecked_ref())
src/change_list/traversal.rs+1−1
@@ -167,7 +167,7 @@ mod tests {
167167
168168 #[test]
169169 fn test_traversal() {
170− fn t<F>(f: F) -> Box<FnMut(&mut Traversal)>
170+ fn t<F>(f: F) -> Box<dyn FnMut(&mut Traversal)>
171171 where
172172 F: 'static + FnMut(&mut Traversal),
173173 {
src/events.rs+2−2
@@ -86,7 +86,7 @@ cfg_if::cfg_if! {
8686 callback(component, vdom_weak, event);
8787 }
8888 }
89− }) as Box<Fn(web_sys::Event, u32, u32)>);
89+ }) as Box<dyn Fn(web_sys::Event, u32, u32)>);
9090
9191 (registry, closure)
9292 }
@@ -99,7 +99,7 @@ cfg_if::cfg_if! {
9999
100100 pub(crate) fn remove_subtree(&mut self, node: &Node) {
101101 match node.kind {
102− NodeKind::Cached(_) | NodeKind::Text(_) => return,
102+ NodeKind::Cached(_) | NodeKind::Text(_) => {},
103103 NodeKind::Element(&ElementNode {listeners, children, ..}) => {
104104 for l in listeners {
105105 self.remove(l);
src/lib.rs+1−1
@@ -123,7 +123,7 @@ cfg_if::cfg_if! {
123123 /// An element node in the physical DOM.
124124 pub type Element = web_sys::Element;
125125
126− pub(crate) type EventsTrampoline = wasm_bindgen::closure::Closure<Fn(web_sys::Event, u32, u32)>;
126+ pub(crate) type EventsTrampoline = wasm_bindgen::closure::Closure<dyn Fn(web_sys::Event, u32, u32)>;
127127 }
128128}
129129
src/render.rs+4−4
@@ -71,22 +71,22 @@ where
7171/// requirements.
7272pub trait RootRender: Any + Render {
7373 /// Get this `&RootRender` trait object as an `&Any` trait object reference.
74− fn as_any(&self) -> &Any;
74+ fn as_any(&self) -> &dyn Any;
7575
7676 /// Get this `&mut RootRender` trait object as an `&mut Any` trait object
7777 /// reference.
78− fn as_any_mut(&mut self) -> &mut Any;
78+ fn as_any_mut(&mut self) -> &mut dyn Any;
7979}
8080
8181impl<T> RootRender for T
8282where
8383 T: Any + Render,
8484{
85− fn as_any(&self) -> &Any {
85+ fn as_any(&self) -> &dyn Any {
8686 self
8787 }
8888
89− fn as_any_mut(&mut self) -> &mut Any {
89+ fn as_any_mut(&mut self) -> &mut dyn Any {
9090 self
9191 }
9292}
src/vdom.rs+82−77
@@ -6,11 +6,11 @@ use crate::events::EventsRegistry;
66use crate::node::{Node, NodeKey};
77use crate::RenderContext;
88use bumpalo::Bump;
9−use futures::future::Future;
109use fxhash::FxHashMap;
1110use std::cell::Cell;
1211use std::cell::RefCell;
1312use std::fmt;
13+use std::future::Future;
1414use std::mem;
1515use std::mem::ManuallyDrop;
1616use std::rc::{Rc, Weak};
@@ -55,7 +55,7 @@ pub(crate) struct VdomInnerExclusive {
5555 // Always `Some` except just before we drop. Just an option so that
5656 // `unmount` can take the component out but we can still have a Drop
5757 // implementation.
58− component: Option<Box<RootRender>>,
58+ component: Option<Box<dyn RootRender>>,
5959
6060 dom_buffers: Option<[Bump; 2]>,
6161 change_list: ManuallyDrop<ChangeListPersistentState>,
@@ -158,12 +158,15 @@ impl Vdom {
158158 where
159159 R: RootRender,
160160 {
161− Self::with_boxed_root_render(container, Box::new(component) as Box<RootRender>)
161+ Self::with_boxed_root_render(container, Box::new(component) as Box<dyn RootRender>)
162162 }
163163
164164 /// Construct a `Vdom` with the already-boxed-as-a-trait-object root
165165 /// rendering component.
166− pub fn with_boxed_root_render(container: &crate::Element, component: Box<RootRender>) -> Vdom {
166+ pub fn with_boxed_root_render(
167+ container: &crate::Element,
168+ component: Box<dyn RootRender>,
169+ ) -> Vdom {
167170 crate::strace::init_strace();
168171
169172 let dom_buffers = [Bump::new(), Bump::new()];
@@ -217,7 +220,7 @@ impl Vdom {
217220 R: RootRender,
218221 {
219222 let mut exclusive = self.inner.exclusive.borrow_mut();
220− let component = Box::new(component) as Box<RootRender>;
223+ let component = Box::new(component) as Box<dyn RootRender>;
221224 exclusive.component = Some(component);
222225 exclusive.render();
223226 }
@@ -237,7 +240,7 @@ impl Vdom {
237240 /// Unmount this virtual DOM, unregister its event listeners, and return its
238241 /// root render component.
239242 #[inline]
240− pub fn unmount(self) -> Box<RootRender> {
243+ pub fn unmount(self) -> Box<dyn RootRender> {
241244 Rc::try_unwrap(self.inner.clone())
242245 .map_err(|_| ())
243246 .unwrap_throw()
@@ -323,7 +326,7 @@ impl VdomInnerExclusive {
323326 }
324327}
325328
326−fn request_animation_frame(f: &Closure<FnMut()>) {
329+fn request_animation_frame(f: &Closure<dyn FnMut()>) {
327330 web_sys::window()
328331 .expect_throw("should have a window")
329332 .request_animation_frame(f.as_ref().unchecked_ref())
@@ -340,7 +343,7 @@ where
340343 let f = Closure::wrap(Box::new(move || {
341344 *g.borrow_mut() = None;
342345 f();
343− }) as Box<FnMut()>);
346+ }) as Box<dyn FnMut()>);
344347 request_animation_frame(&f);
345348
346349 *h.borrow_mut() = Some(f);
@@ -371,25 +374,23 @@ impl VdomWeak {
371374 /// Replace the root rendering component with the new `root`.
372375 ///
373376 /// Returns a future that resolves to the *old* root component.
374− pub fn set_component(
377+ pub async fn set_component(
375378 self,
376379 root: Box<dyn RootRender>,
377− ) -> impl Future<Item = Box<dyn RootRender + 'static>, Error = VdomDroppedError> {
378− futures::future::ok(self.inner.upgrade())
379− .and_then(|inner| inner.ok_or(()))
380− .map_err(|_| VdomDroppedError {})
381− .and_then(|inner| {
382− let promise = js_sys::Promise::resolve(&JsValue::null());
383− JsFuture::from(promise)
384− .map_err(|_| VdomDroppedError {})
385− .and_then(move |_| {
386− let old = {
387− let mut exclusive = inner.exclusive.borrow_mut();
388− mem::replace(&mut *exclusive.component.as_mut().unwrap_throw(), root)
389− };
390− VdomWeak::new(&inner).render().map(|_| old)
391− })
392− })
380+ ) -> Result<Box<dyn RootRender + 'static>, VdomDroppedError> {
381+ let inner = self.inner.upgrade().ok_or(VdomDroppedError {})?;
382+
383+ // Wait for a new tick of the micro-task queue
384+ let _ = JsFuture::from(js_sys::Promise::resolve(&JsValue::null())).await;
385+
386+ let old = {
387+ let mut exclusive = inner.exclusive.borrow_mut();
388+ mem::replace(&mut *exclusive.component.as_mut().unwrap_throw(), root)
389+ };
390+
391+ VdomWeak::new(&inner).render().await?;
392+
393+ Ok(old)
393394 }
394395
395396 /// Execute `f` with a reference to this virtual DOM's root rendering
@@ -397,24 +398,18 @@ impl VdomWeak {
397398 ///
398399 /// To ensure exclusive access to the root rendering component, the
399400 /// invocation takes place on a new tick of the micro-task queue.
400− pub fn with_component<F, T>(&self, f: F) -> impl Future<Item = T, Error = VdomDroppedError>
401+ pub async fn with_component<F, T>(&self, f: F) -> Result<T, VdomDroppedError>
401402 where
402403 F: 'static + FnOnce(&mut dyn RootRender) -> T,
403404 {
404− futures::future::ok(self.inner.upgrade())
405− .and_then(|inner| inner.ok_or(()))
406− .map_err(|_| VdomDroppedError {})
407− .and_then(|inner| {
408− let mut f = Some(f);
409− let promise = js_sys::Promise::resolve(&JsValue::null());
410− JsFuture::from(promise)
411− .map_err(|_| VdomDroppedError {})
412− .map(move |_| {
413− let f = f.take().unwrap_throw();
414− let mut exclusive = inner.exclusive.borrow_mut();
415− f(exclusive.component_raw_mut())
416− })
417− })
405+ let inner = self.inner.upgrade().ok_or(VdomDroppedError {})?;
406+
407+ // Wait for a new tick of the micro-task queue
408+ let _ = JsFuture::from(js_sys::Promise::resolve(&JsValue::null())).await;
409+
410+ let mut exclusive = inner.exclusive.borrow_mut();
411+
412+ Ok(f(exclusive.component_raw_mut()))
418413 }
419414
420415 /// Schedule a render to occur during the next animation frame.
@@ -423,7 +418,12 @@ impl VdomWeak {
423418 /// `render` instead.
424419 pub fn schedule_render(&self) {
425420 debug!("VdomWeak::schedule_render");
426− wasm_bindgen_futures::spawn_local(self.render().map_err(|_| ()));
421+
422+ let future = self.render();
423+
424+ wasm_bindgen_futures::spawn_local(async move {
425+ let _ = future.await;
426+ });
427427 }
428428
429429 /// Schedule a render to occur during the next animation frame and return a
@@ -431,41 +431,46 @@ impl VdomWeak {
431431 ///
432432 /// If you don't want to do more things after the render completes, then use
433433 /// `schedule_render` instead of `render`.
434− pub fn render(&self) -> impl Future<Item = (), Error = VdomDroppedError> {
435− futures::future::ok(self.inner.upgrade())
436− .and_then(|inner| inner.ok_or(()))
437− .map_err(|_| VdomDroppedError {})
438− .and_then(|inner| {
439− let promise = inner.shared.render_scheduled.take().unwrap_or_else(|| {
440− js_sys::Promise::new(&mut |resolve, reject| {
441− let vdom = VdomWeak {
442− inner: Rc::downgrade(&inner),
443− };
444− with_animation_frame(move || match vdom.inner.upgrade() {
445− None => {
446− warn!("VdomWeak::render: vdom unmounted before we could render");
447− let r = reject.call0(&JsValue::null());
448− debug_assert!(r.is_ok());
449− }
450− Some(inner) => {
451− let mut exclusive = inner.exclusive.borrow_mut();
452− exclusive.render();
453−
454− // We did the render, so take the promise away
455− // and let future `render` calls request new
456− // animation frames.
457− let _ = inner.shared.render_scheduled.take();
458−
459− let r = resolve.call0(&JsValue::null());
460− debug_assert!(r.is_ok());
461− }
462− });
463− })
464− });
465− inner.shared.render_scheduled.set(Some(promise.clone()));
466− JsFuture::from(promise)
467− .map(|_| ())
468− .map_err(|_| VdomDroppedError {})
469− })
434+ pub fn render(&self) -> impl Future<Output = Result<(), VdomDroppedError>> {
435+ let inner = self.inner.upgrade();
436+
437+ async move {
438+ let inner = inner.ok_or(VdomDroppedError {})?;
439+
440+ let promise = inner.shared.render_scheduled.take().unwrap_or_else(|| {
441+ js_sys::Promise::new(&mut |resolve, reject| {
442+ let vdom = VdomWeak {
443+ inner: Rc::downgrade(&inner),
444+ };
445+
446+ with_animation_frame(move || match vdom.inner.upgrade() {
447+ None => {
448+ warn!("VdomWeak::render: vdom unmounted before we could render");
449+ let r = reject.call0(&JsValue::null());
450+ debug_assert!(r.is_ok());
451+ }
452+ Some(inner) => {
453+ let mut exclusive = inner.exclusive.borrow_mut();
454+ exclusive.render();
455+
456+ // We did the render, so take the promise away
457+ // and let future `render` calls request new
458+ // animation frames.
459+ let _ = inner.shared.render_scheduled.take();
460+
461+ let r = resolve.call0(&JsValue::null());
462+ debug_assert!(r.is_ok());
463+ }
464+ });
465+ })
466+ });
467+
468+ inner.shared.render_scheduled.set(Some(promise.clone()));
469+
470+ JsFuture::from(promise)
471+ .await
472+ .map(drop)
473+ .map_err(|_| VdomDroppedError {})
474+ }
470475 }
471476}
tests/web/cached.rs+69−61
@@ -1,6 +1,5 @@
11use super::{assert_rendered, before_after, create_element, RenderFn};
22use dodrio::{builder::*, bumpalo, Cached, Node, Render, RenderContext, RootRender, Vdom};
3−use futures::prelude::*;
43use std::cell::Cell;
54use std::rc::Rc;
65use wasm_bindgen::prelude::*;
@@ -29,8 +28,8 @@ impl Render for CountRenders {
2928 }
3029}
3130
32−#[wasm_bindgen_test(async)]
33−fn uses_cached_render() -> impl Future<Item = (), Error = JsValue> {
31+#[wasm_bindgen_test]
32+async fn uses_cached_render() {
3433 use dodrio::builder::*;
3534
3635 let cached = Cached::new(CountRenders::new());
@@ -50,52 +49,61 @@ fn uses_cached_render() -> impl Future<Item = (), Error = JsValue> {
5049 let vdom6 = vdom0.clone();
5150 let vdom7 = vdom0.clone();
5251
52+ // We render, populate the cache, and get "1".
53+ vdom0.weak().render().await.unwrap();
5354 vdom0
5455 .weak()
55− // We render, populate the cache, and get "1".
56− .render()
57− .and_then(move |_| {
58− vdom0.weak().with_component(move |comp| {
59− let comp = comp.unwrap_mut::<Cached<CountRenders>>();
60− assert_eq!(comp.render_count.get(), 1);
61− assert_rendered(&container1, &RenderFn(|_| text("1")));
62− })
56+ .with_component(move |comp| {
57+ let comp = comp.unwrap_mut::<Cached<CountRenders>>();
58+ assert_eq!(comp.render_count.get(), 1);
59+ assert_rendered(&container1, &RenderFn(|_| text("1")));
6360 })
64− // We re-render, re-use the cached node, and get "1" again.
65− .and_then(move |_| vdom1.weak().render())
66− .and_then(move |_| {
67− vdom2.weak().with_component(move |comp| {
68− let comp = comp.unwrap_mut::<Cached<CountRenders>>();
69− assert_eq!(comp.render_count.get(), 1);
70− assert_rendered(&container2, &RenderFn(|_| text("1")));
71− })
61+ .await
62+ .unwrap();
63+
64+ // We re-render, re-use the cached node, and get "1" again.
65+ vdom1.weak().render().await.unwrap();
66+ vdom2
67+ .weak()
68+ .with_component(move |comp| {
69+ let comp = comp.unwrap_mut::<Cached<CountRenders>>();
70+ assert_eq!(comp.render_count.get(), 1);
71+ assert_rendered(&container2, &RenderFn(|_| text("1")));
7272 })
73− // We invalidate the cache, re-render, re-populate the cache, and should
74− // now have "2".
75− .and_then(move |_| {
76− vdom3.weak().with_component(move |comp| {
77− let comp = comp.unwrap_mut::<Cached<CountRenders>>();
78− Cached::invalidate(comp);
79− })
73+ .await
74+ .unwrap();
75+
76+ // We invalidate the cache, re-render, re-populate the cache, and should now have "2".
77+ vdom3
78+ .weak()
79+ .with_component(move |comp| {
80+ let comp = comp.unwrap_mut::<Cached<CountRenders>>();
81+ Cached::invalidate(comp);
8082 })
81− .and_then(move |_| vdom4.weak().render())
82− .and_then(move |_| {
83− vdom5.weak().with_component(move |comp| {
84− let comp = comp.unwrap_mut::<Cached<CountRenders>>();
85− assert_eq!(comp.render_count.get(), 2);
86− assert_rendered(&container3, &RenderFn(|_| text("2")));
87− })
83+ .await
84+ .unwrap();
85+ vdom4.weak().render().await.unwrap();
86+ vdom5
87+ .weak()
88+ .with_component(move |comp| {
89+ let comp = comp.unwrap_mut::<Cached<CountRenders>>();
90+ assert_eq!(comp.render_count.get(), 2);
91+ assert_rendered(&container3, &RenderFn(|_| text("2")));
8892 })
89− // We re-render, re-use the cached node, and get "2" again.
90− .and_then(move |_| vdom6.weak().render())
91− .and_then(move |_| {
92− vdom7.weak().with_component(move |comp| {
93− let comp = comp.unwrap_mut::<Cached<CountRenders>>();
94− assert_eq!(comp.render_count.get(), 2);
95− assert_rendered(&container4, &RenderFn(|_| text("2")));
96− })
93+ .await
94+ .unwrap();
95+
96+ // We re-render, re-use the cached node, and get "2" again.
97+ vdom6.weak().render().await.unwrap();
98+ vdom7
99+ .weak()
100+ .with_component(move |comp| {
101+ let comp = comp.unwrap_mut::<Cached<CountRenders>>();
102+ assert_eq!(comp.render_count.get(), 2);
103+ assert_rendered(&container4, &RenderFn(|_| text("2")));
97104 })
98− .map_err(|e| JsValue::from(e.to_string()))
105+ .await
106+ .unwrap();
99107}
100108
101109#[wasm_bindgen(module = "/tests/web/cached.js")]
@@ -104,8 +112,8 @@ extern "C" {
104112 fn get_clone_node_count() -> u32;
105113}
106114
107−#[wasm_bindgen_test(async)]
108−fn creating_cached_nodes_uses_clone_node() -> impl Future<Item = (), Error = JsValue> {
115+#[wasm_bindgen_test]
116+async fn creating_cached_nodes_uses_clone_node() {
109117 use dodrio::builder::*;
110118
111119 let container = create_element("div");
@@ -113,28 +121,28 @@ fn creating_cached_nodes_uses_clone_node() -> impl Future<Item = (), Error = JsV
113121 // The initial vdom render should populate the cache and save a template.
114122 let vdom0 = Rc::new(Vdom::new(&container, Cached::new(CountRenders::new())));
115123 let vdom1 = vdom0.clone();
116− let vdom2 = vdom0.clone();
124+ let _vdom2 = vdom0.clone();
117125
118126 let clone_node_count_before = get_clone_node_count();
119127
128+ // Render something entirely different...
120129 vdom0
121130 .weak()
122− // Render something entirely different...
123− .set_component(Box::new(RenderFn(|_| text("hi"))) as Box<RootRender>)
124− .and_then(move |_| {
125− // Re-render our cached node. Since we are creating it from scratch,
126− // and already have a template from the earlier render, we should
127− // call `cloneNode` here.
128− vdom1
129− .weak()
130− .set_component(Box::new(Cached::new(CountRenders::new())) as Box<RootRender>)
131− })
132− .map(move |_| {
133− let clone_node_count_after = get_clone_node_count();
134− assert_eq!(clone_node_count_after, clone_node_count_before + 1);
135− drop(vdom2);
136− })
137− .map_err(|e| JsValue::from(e.to_string()))
131+ .set_component(Box::new(RenderFn(|_| text("hi"))) as Box<dyn RootRender>)
132+ .await
133+ .unwrap();
134+
135+ // Re-render our cached node. Since we are creating it from scratch,
136+ // and already have a template from the earlier render, we should
137+ // call `cloneNode` here.
138+ vdom1
139+ .weak()
140+ .set_component(Box::new(Cached::new(CountRenders::new())) as Box<dyn RootRender>)
141+ .await
142+ .unwrap();
143+
144+ let clone_node_count_after = get_clone_node_count();
145+ assert_eq!(clone_node_count_after, clone_node_count_before + 1);
138146}
139147
140148struct Id(&'static str);
tests/web/events.rs+52−69
@@ -1,6 +1,6 @@
11use super::create_element;
22use dodrio::{Node, Render, RenderContext, Vdom};
3−use futures::Future;
3+use futures::future::{select, Either};
44use std::cell::{Cell, RefCell};
55use std::rc::Rc;
66use wasm_bindgen::prelude::*;
@@ -9,7 +9,7 @@ use wasm_bindgen_test::*;
99
1010struct EventContainer {
1111 event: &'static str,
12− on_event: Box<FnMut()>,
12+ on_event: Box<dyn FnMut()>,
1313}
1414
1515impl EventContainer {
@@ -44,14 +44,14 @@ fn target(container: &web_sys::Element) -> web_sys::HtmlElement {
4444 .unchecked_into()
4545}
4646
47−#[wasm_bindgen_test(async)]
48−fn click() -> impl Future<Item = (), Error = JsValue> {
47+#[wasm_bindgen_test]
48+async fn click() {
4949 let container = create_element("div");
5050
51− let (sender, receiver) = futures::sync::oneshot::channel();
51+ let (sender, receiver) = futures::channel::oneshot::channel();
5252 let mut sender = Some(sender);
5353
54− let vdom = Vdom::new(
54+ let _vdom = Vdom::new(
5555 &container,
5656 EventContainer::new("click", move || {
5757 sender
@@ -64,18 +64,14 @@ fn click() -> impl Future<Item = (), Error = JsValue> {
6464
6565 target(&container).click();
6666
67− receiver
68− .map(|_| {
69− drop(vdom);
70− })
71− .map_err(|e| JsValue::from(e.to_string()))
67+ receiver.await.unwrap();
7268}
7369
74−#[wasm_bindgen_test(async)]
75−fn updated_listener_is_called() -> impl Future<Item = (), Error = JsValue> {
70+#[wasm_bindgen_test]
71+async fn updated_listener_is_called() {
7672 let container = create_element("div");
7773
78− let (first_sender, first_receiver) = futures::sync::oneshot::channel();
74+ let (first_sender, first_receiver) = futures::channel::oneshot::channel();
7975 let mut first_sender = Some(first_sender);
8076
8177 let vdom = Vdom::new(
@@ -89,7 +85,7 @@ fn updated_listener_is_called() -> impl Future<Item = (), Error = JsValue> {
8985 }),
9086 );
9187
92− let (second_sender, second_receiver) = futures::sync::oneshot::channel();
88+ let (second_sender, second_receiver) = futures::channel::oneshot::channel();
9389 let mut second_sender = Some(second_sender);
9490
9591 vdom.weak()
@@ -100,25 +96,22 @@ fn updated_listener_is_called() -> impl Future<Item = (), Error = JsValue> {
10096 .send("second")
10197 .expect_throw("should not have dropped the receiver");
10298 })))
103− .map_err(|e| JsValue::from(e.to_string()))
104− .and_then(move |_| {
105− target(&container).click();
106−
107− first_receiver
108− .select(second_receiver)
109− .map(|(which, _other)| which)
110− .or_else(|(_error, other)| other)
111− .map(|which| {
112− assert_eq!(which, "second");
113− drop(vdom);
114− })
115− .map_err(|e| JsValue::from(e.to_string()))
116− })
99+ .await
100+ .unwrap();
101+
102+ target(&container).click();
103+
104+ match select(first_receiver, second_receiver).await {
105+ Either::Left((Ok(_), _)) => panic!(),
106+ Either::Left((Err(_), second)) => assert_eq!(second.await, Ok("second")),
107+ Either::Right((Ok(msg), _)) => assert_eq!(msg, "second"),
108+ Either::Right((Err(_), _)) => panic!(),
109+ }
117110}
118111
119112struct ListensOnlyOnFirstRender {
120113 count: Cell<usize>,
121− callback: Box<FnMut()>,
114+ callback: Box<dyn FnMut()>,
122115}
123116
124117impl ListensOnlyOnFirstRender {
@@ -150,11 +143,11 @@ impl Render for ListensOnlyOnFirstRender {
150143 }
151144}
152145
153−#[wasm_bindgen_test(async)]
154−fn removed_listener_is_not_called() -> impl Future<Item = (), Error = JsValue> {
146+#[wasm_bindgen_test]
147+async fn removed_listener_is_not_called() {
155148 let container = create_element("div");
156149
157− let (outer_sender, outer_receiver) = futures::sync::oneshot::channel();
150+ let (outer_sender, outer_receiver) = futures::channel::oneshot::channel();
158151 let outer_sender = Rc::new(RefCell::new(Some(outer_sender)));
159152 let outer_listener = Closure::wrap(Box::new(move |_| {
160153 outer_sender
@@ -163,13 +156,13 @@ fn removed_listener_is_not_called() -> impl Future<Item = (), Error = JsValue> {
163156 .expect_throw("should only invoke outer_listener once")
164157 .send("outer")
165158 .expect_throw("should not have dropped receiver");
166− }) as Box<FnMut(web_sys::Event)>);
159+ }) as Box<dyn FnMut(web_sys::Event)>);
167160
168161 container
169162 .add_event_listener_with_callback("click", outer_listener.as_ref().unchecked_ref())
170163 .unwrap();
171164
172− let (vdom_sender, vdom_receiver) = futures::sync::oneshot::channel();
165+ let (vdom_sender, vdom_receiver) = futures::channel::oneshot::channel();
173166 let mut vdom_sender = Some(vdom_sender);
174167
175168 // Render a vdom with a listener into container.
@@ -184,33 +177,26 @@ fn removed_listener_is_not_called() -> impl Future<Item = (), Error = JsValue> {
184177 }),
185178 );
186179
187− vdom.weak()
188− // Re-render, so we aren't listening anymore.
189− .render()
190− .map_err(|e| JsValue::from(e.to_string()))
191− .and_then(move |_| {
192− target(&container).click();
193−
194− // We should get our container's event handler fired, and not the unmounted
195− // vdom's event handler.
196− outer_receiver
197− .select(vdom_receiver)
198− .map(|(which, _other)| which)
199− .or_else(|(_error, other)| other)
200− .map(|which| {
201− assert_eq!(which, "outer");
202− drop(outer_listener);
203− drop(vdom)
204− })
205− .map_err(|e| JsValue::from(e.to_string()))
206− })
180+ // Re-render, so we aren't listening anymore.
181+ vdom.weak().render().await.unwrap();
182+
183+ target(&container).click();
184+
185+ // We should get our container's event handler fired, and not the unmounted
186+ // vdom's event handler.
187+ match select(outer_receiver, vdom_receiver).await {
188+ Either::Left((Ok(msg), _)) => assert_eq!(msg, ("outer")),
189+ Either::Left((Err(_), _)) => panic!(),
190+ Either::Right((Ok(_), _)) => panic!(),
191+ Either::Right((Err(_), outer)) => assert_eq!(outer.await, Ok("outer")),
192+ }
207193}
208194
209−#[wasm_bindgen_test(async)]
210−fn event_does_not_fire_after_unmounting() -> impl Future<Item = (), Error = JsValue> {
195+#[wasm_bindgen_test]
196+async fn event_does_not_fire_after_unmounting() {
211197 let container = create_element("div");
212198
213− let (outer_sender, outer_receiver) = futures::sync::oneshot::channel();
199+ let (outer_sender, outer_receiver) = futures::channel::oneshot::channel();
214200 let outer_sender = Rc::new(RefCell::new(Some(outer_sender)));
215201 let outer_listener = Closure::wrap(Box::new(move |_| {
216202 outer_sender
@@ -219,13 +205,13 @@ fn event_does_not_fire_after_unmounting() -> impl Future<Item = (), Error = JsVa
219205 .expect_throw("should only invoke outer_listener once")
220206 .send("outer")
221207 .expect_throw("should not have dropped receiver");
222− }) as Box<FnMut(web_sys::Event)>);
208+ }) as Box<dyn FnMut(web_sys::Event)>);
223209
224210 container
225211 .add_event_listener_with_callback("click", outer_listener.as_ref().unchecked_ref())
226212 .unwrap();
227213
228− let (vdom_sender, vdom_receiver) = futures::sync::oneshot::channel();
214+ let (vdom_sender, vdom_receiver) = futures::channel::oneshot::channel();
229215 let mut vdom_sender = Some(vdom_sender);
230216
231217 // Render a vdom with a listener into container.
@@ -255,13 +241,10 @@ fn event_does_not_fire_after_unmounting() -> impl Future<Item = (), Error = JsVa
255241
256242 // We should get our container's event handler fired, and not the unmounted
257243 // vdom's event handler.
258− outer_receiver
259− .select(vdom_receiver)
260− .map(|(which, _other)| which)
261− .or_else(|(_error, other)| other)
262− .map(|which| {
263− assert_eq!(which, "outer");
264− drop(outer_listener);
265− })
266− .map_err(|e| JsValue::from(e.to_string()))
244+ match select(outer_receiver, vdom_receiver).await {
245+ Either::Left((Ok(msg), _)) => assert_eq!(msg, ("outer")),
246+ Either::Left((Err(_), _)) => panic!(),
247+ Either::Right((Ok(_), _)) => panic!(),
248+ Either::Right((Err(_), outer)) => assert_eq!(outer.await, Ok("outer")),
249+ }
267250}
tests/web/js_api.rs+28−35
@@ -1,8 +1,7 @@
11use super::{assert_rendered, create_element, RenderFn};
22use dodrio::{builder::*, Node, Render, RenderContext, Vdom};
33use dodrio_js_api::JsRender;
4−use futures::prelude::*;
5−use futures::sync::oneshot;
4+use futures::channel::oneshot;
65use js_sys::Object;
76use std::rc::Rc;
87use wasm_bindgen::prelude::*;
@@ -14,7 +13,7 @@ pub struct WrapJs {
1413}
1514
1615impl WrapJs {
17− pub fn new() -> (WrapJs, oneshot::Receiver<()>, Closure<FnMut()>) {
16+ pub fn new() -> (WrapJs, oneshot::Receiver<()>, Closure<dyn FnMut()>) {
1817 let (sender, receiver) = oneshot::channel();
1918
2019 let on_after_render = Closure::wrap(Box::new({
@@ -26,7 +25,7 @@ impl WrapJs {
2625 .send(())
2726 .expect_throw("receiver should not have been dropped");
2827 }
29− }) as Box<FnMut()>);
28+ }) as Box<dyn FnMut()>);
3029
3130 let component = WrapJs {
3231 inner: JsRender::new(JsComponent::new(&on_after_render)),
@@ -52,7 +51,7 @@ extern "C" {
5251 type JsComponent;
5352
5453 #[wasm_bindgen(constructor)]
55− fn new(on_after_render: &Closure<FnMut()>) -> JsComponent;
54+ fn new(on_after_render: &Closure<dyn FnMut()>) -> JsComponent;
5655}
5756
5857fn eval_js_rendering_component() {
@@ -96,14 +95,14 @@ fn eval_js_rendering_component() {
9695 });
9796}
9897
99−#[wasm_bindgen_test(async)]
100−fn can_use_js_rendering_components() -> impl Future<Item = (), Error = JsValue> {
98+#[wasm_bindgen_test]
99+async fn can_use_js_rendering_components() {
101100 eval_js_rendering_component();
102101
103102 let container = create_element("div");
104− let (component, receiver, closure) = WrapJs::new();
103+ let (component, receiver, _closure) = WrapJs::new();
104+ let _vdom = Rc::new(Vdom::new(&container, component));
105105
106− let vdom = Rc::new(Vdom::new(&container, component));
107106 assert_rendered(
108107 &container,
109108 &RenderFn(|cx| {
@@ -131,30 +130,24 @@ fn can_use_js_rendering_components() -> impl Future<Item = (), Error = JsValue>
131130 .expect_throw("should be an `HTMLElement` object")
132131 .click();
133132
134− receiver
135− .map(move |_| {
136− assert_rendered(
137− &container,
138− &RenderFn(|cx| {
139− div(&cx)
140− .attr("class", "wrap-js")
141− .children([span(&cx)
142− .attr("class", "js-component")
143− .children([
144− text("Here is some plain text"),
145− b(&cx)
146− .children([text("...and here is some bold text")])
147− .finish(),
148− text("1"),
149− ])
150− .finish()])
151− .finish()
152− }),
153− );
154−
155− drop(vdom);
156− drop(container);
157− drop(closure);
158− })
159− .map_err(|e| e.to_string().into())
133+ receiver.await.unwrap();
134+
135+ assert_rendered(
136+ &container,
137+ &RenderFn(|cx| {
138+ div(&cx)
139+ .attr("class", "wrap-js")
140+ .children([span(&cx)
141+ .attr("class", "js-component")
142+ .children([
143+ text("Here is some plain text"),
144+ b(&cx)
145+ .children([text("...and here is some bold text")])
146+ .finish(),
147+ text("1"),
148+ ])
149+ .finish()])
150+ .finish()
151+ }),
152+ );
160153}
tests/web/keyed.rs+14−15
@@ -1,6 +1,5 @@
11use crate::{assert_rendered, create_element};
22use dodrio::{builder::*, bumpalo, Node, Render, RenderContext, Vdom};
3−use futures::Future;
43use log::*;
54use std::rc::Rc;
65use wasm_bindgen::prelude::*;
@@ -32,10 +31,7 @@ where
3231 parent.finish()
3332}
3433
35−fn assert_keyed<Before, After>(
36− before: Before,
37− after: After,
38−) -> impl Future<Item = (), Error = JsValue>
34+async fn assert_keyed<Before, After>(before: Before, after: After) -> Result<(), JsValue>
3935where
4036 Before: 'static + Render,
4137 After: 'static + Render,
@@ -56,7 +52,7 @@ where
5652
5753 debug!("====== Rendering the *before* DOM into the physical DOM ======");
5854 let vdom1 = Rc::new(Vdom::new(&container, before.clone()));
59− let vdom2 = vdom1.clone();
55+ let _vdom2 = vdom1.clone();
6056 let saved = save_keyed_elements(&container);
6157
6258 debug!("====== Checking the *before* DOM against the physical DOM ======");
@@ -65,13 +61,14 @@ where
6561 debug!("====== Rendering the *after* DOM into the physical DOM ======");
6662 let weak = vdom1.weak();
6763 weak.set_component(Box::new(after.clone()))
68− .map(move |_| {
69− debug!("====== Checking the *after* DOM against the physical DOM ======");
70− assert_rendered(&container, &after);
71− check_keyed_elements(&container, saved);
72− drop(vdom2);
73− })
74− .map_err(|e| JsValue::from(e.to_string()))
64+ .await
65+ .map_err(|e| e.to_string())?;
66+
67+ debug!("====== Checking the *after* DOM against the physical DOM ======");
68+ assert_rendered(&container, &after);
69+ check_keyed_elements(&container, saved);
70+
71+ Ok(())
7572}
7673
7774macro_rules! keyed_tests {
@@ -86,14 +83,16 @@ macro_rules! keyed_tests {
8683 }
8784 )* ) => {
8885 $(
89− #[wasm_bindgen_test(async)]
90− fn $name() -> impl Future<Item = (), Error = wasm_bindgen::JsValue> {
86+ #[wasm_bindgen_test]
87+ async fn $name() {
9188 use crate::RenderFn;
9289 log::debug!("############### {} ###############", stringify!($name));
9390 assert_keyed(
9491 RenderFn(|$before_cx| { $( $before )* }),
9592 RenderFn(|$after_cx| { $( $after )* }),
9693 )
94+ .await
95+ .unwrap()
9796 }
9897 )*
9998 }
tests/web/main.rs+13−11
@@ -6,7 +6,6 @@ use bumpalo::Bump;
66use dodrio::{
77 Attribute, CachedSet, ElementNode, Node, NodeKind, Render, RenderContext, TextNode, Vdom,
88};
9−use futures::prelude::*;
109use fxhash::FxHashMap;
1110use log::*;
1211use std::cell::RefCell;
@@ -168,7 +167,7 @@ where
168167/// Assert that if we start by rendering the `before` virtual DOM tree into a
169168/// physical DOM tree, and then diff it with the `after` virtual DOM tree, then
170169/// the physical DOM tree correctly matches `after`.
171−pub fn assert_before_after<R, S>(before: R, after: S) -> impl Future<Item = (), Error = JsValue>
170+pub async fn assert_before_after<R, S>(before: R, after: S) -> Result<(), JsValue>
172171where
173172 R: 'static + Render,
174173 S: 'static + Render,
@@ -180,7 +179,7 @@ where
180179
181180 debug!("====== Rendering the *before* DOM into the physical DOM ======");
182181 let vdom1 = Rc::new(Vdom::new(&container, before.clone()));
183− let vdom2 = vdom1.clone();
182+ let _vdom2 = vdom1.clone();
184183
185184 debug!("====== Checking the *before* DOM against the physical DOM ======");
186185 assert_rendered(&container, &before);
@@ -188,12 +187,13 @@ where
188187 debug!("====== Rendering the *after* DOM into the physical DOM ======");
189188 let weak = vdom1.weak();
190189 weak.set_component(Box::new(after.clone()))
191− .map(move |_| {
192− debug!("====== Checking the *after* DOM against the physical DOM ======");
193− assert_rendered(&container, &after);
194− drop(vdom2);
195− })
196− .map_err(|e| JsValue::from(e.to_string()))
190+ .await
191+ .map_err(|e| e.to_string())?;
192+
193+ debug!("====== Checking the *after* DOM against the physical DOM ======");
194+ assert_rendered(&container, &after);
195+
196+ Ok(())
197197}
198198
199199/// A helper macro for declaring a bunch of `assert_before_after` tests.
@@ -210,14 +210,16 @@ macro_rules! before_after {
210210 }
211211 )* ) => {
212212 $(
213− #[wasm_bindgen_test(async)]
214− fn $name() -> impl Future<Item = (), Error = wasm_bindgen::JsValue> {
213+ #[wasm_bindgen_test]
214+ async fn $name() {
215215 use crate::{assert_before_after, RenderFn};
216216 log::debug!("############### {} ###############", stringify!($name));
217217 assert_before_after(
218218 RenderFn(|$before_bump| { $( $before )* }),
219219 RenderFn(|$after_bump| { $( $after )* })
220220 )
221+ .await
222+ .unwrap()
221223 }
222224 )*
223225 }
tests/web/render.rs−1
@@ -1,6 +1,5 @@
11use super::{assert_rendered, before_after, create_element, RenderFn};
22use dodrio::{builder::*, Vdom};
3−use futures::prelude::*;
43use std::rc::Rc;
54use wasm_bindgen_test::*;
65