on master help sign in
.travis.yml+11−7
since splitsnapshots
unifiedsplit
@@ -25,9 +25,6 @@ matrix:
25 - name: "build (beta)"
25 - name: "build (beta)"
26 rust: beta
26 rust: beta
27 script: INSTALL=1 ./build.sh
27 script: INSTALL=1 ./build.sh
28− - name: "build (nightly)"
29− rust: nightly
30− script: INSTALL=1 ./build.sh
31 - name: "headless browser tests (firefox)"
28 - name: "headless browser tests (firefox)"
32 rust: stable
29 rust: stable
33 addons:
30 addons:
@@ -37,10 +34,17 @@ matrix:
37 rust: stable
34 rust: stable
38 install: echo "no install"
35 install: echo "no install"
39 script: cargo test --all
36 script: cargo test --all
37+
38+ # TODO: A bug in `rustc` is making `js-sys` broken on nightly:
39+ # https://github.com/rust-lang/rust/issues/69315
40+ # - name: "build (nightly)"
41+ # rust: nightly
42+ # script: INSTALL=1 ./build.sh
40− - name: "check native benches"
43+ # - name: "check native benches"
41− rust: nightly
44+ # rust: nightly
42− install: echo "no install"
45+ # install: echo "no install"
43− script: cargo check --benches --features xxx-unstable-internal-use-only
46+ # script: cargo check --benches --features xxx-unstable-internal-use-only
47+
44 # TODO: `chromedriver` is complaining about ports or something. Temporarily
48 # TODO: `chromedriver` is complaining about ports or something. Temporarily
45 # disable in CI until we figure it out.
49 # disable in CI until we figure it out.
46 # - name: "headless browser tests (chrome)"
50 # - name: "headless browser tests (chrome)"
Cargo.lock+165−118
@@ -32,7 +32,7 @@ dependencies = [
32 "lazy_static 1.4.0 (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)",
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)",
34 "regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
35− "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
35+ "serde 1.0.114 (registry+https://github.com/rust-lang/crates.io-index)",
36]
36]
37
37
38[[package]]
38[[package]]
@@ -79,44 +79,45 @@ dependencies = [
79
79
80[[package]]
80[[package]]
81name = "console_log"
81name = "console_log"
82−version = "0.1.2"
82+version = "0.2.0"
83source = "registry+https://github.com/rust-lang/crates.io-index"
83source = "registry+https://github.com/rust-lang/crates.io-index"
84dependencies = [
84dependencies = [
85− "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
85+ "log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
86 "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
86 "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
87]
87]
88
88
89[[package]]
89[[package]]
90name = "criterion"
90name = "criterion"
91−version = "0.3.1"
91+version = "0.3.3"
92source = "registry+https://github.com/rust-lang/crates.io-index"
92source = "registry+https://github.com/rust-lang/crates.io-index"
93dependencies = [
93dependencies = [
94 "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
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)",
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)",
96 "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
97− "criterion-plot 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
97+ "criterion-plot 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
98 "csv 1.1.1 (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)",
99+ "itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
100 "lazy_static 1.4.0 (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)",
101 "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
102 "oorandom 11.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
102 "oorandom 11.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
103 "plotters 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
103 "plotters 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
104 "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
104 "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
105 "regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
105 "regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
106+ "serde 1.0.114 (registry+https://github.com/rust-lang/crates.io-index)",
106− "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
107+ "serde_cbor 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
107− "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
108+ "serde_derive 1.0.114 (registry+https://github.com/rust-lang/crates.io-index)",
108− "serde_json 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)",
109+ "serde_json 1.0.57 (registry+https://github.com/rust-lang/crates.io-index)",
109− "tinytemplate 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
110+ "tinytemplate 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
110 "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
111 "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
111]
112]
112
113
113[[package]]
114[[package]]
114name = "criterion-plot"
115name = "criterion-plot"
115−version = "0.4.1"
116+version = "0.4.3"
116source = "registry+https://github.com/rust-lang/crates.io-index"
117source = "registry+https://github.com/rust-lang/crates.io-index"
117dependencies = [
118dependencies = [
118 "cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
119 "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)",
120+ "itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
120]
121]
121
122
122[[package]]
123[[package]]
@@ -168,7 +169,7 @@ dependencies = [
168 "csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
169 "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 "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 "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
171− "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
172+ "serde 1.0.114 (registry+https://github.com/rust-lang/crates.io-index)",
172]
173]
173
174
174[[package]]
175[[package]]
@@ -181,19 +182,19 @@ dependencies = [
181
182
182[[package]]
183[[package]]
183name = "dodrio"
184name = "dodrio"
184−version = "0.1.0"
185+version = "0.2.0"
185dependencies = [
186dependencies = [
186 "bumpalo 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
187 "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)",
188 "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
188− "console_log 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
189+ "console_log 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
189− "criterion 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
190+ "criterion 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
190− "dodrio-js-api 0.1.0",
191+ "dodrio-js-api 0.2.0",
191− "futures 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
192+ "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
192 "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
193 "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
193 "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
194 "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
194− "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
195+ "log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
195 "longest-increasing-subsequence 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
196 "longest-increasing-subsequence 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
196− "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
197+ "serde 1.0.114 (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 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-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 "wasm-bindgen-test 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -205,9 +206,9 @@ name = "dodrio-counter"
205version = "0.1.0"
206version = "0.1.0"
206dependencies = [
207dependencies = [
207 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
208 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
208− "console_log 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
209+ "console_log 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
209− "dodrio 0.1.0",
210+ "dodrio 0.2.0",
210− "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
211+ "log 0.4.11 (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 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 "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)",
214 "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -218,7 +219,7 @@ name = "dodrio-game-of-life"
218version = "0.1.0"
219version = "0.1.0"
219dependencies = [
220dependencies = [
220 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
221 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
221− "dodrio 0.1.0",
222+ "dodrio 0.2.0",
222 "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
223 "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 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-futures 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -231,7 +232,7 @@ name = "dodrio-hello-world"
231version = "0.1.0"
232version = "0.1.0"
232dependencies = [
233dependencies = [
233 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
234 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
234− "dodrio 0.1.0",
235+ "dodrio 0.2.0",
235 "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
236 "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 "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)",
238 "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -242,7 +243,7 @@ name = "dodrio-input-form"
242version = "0.1.0"
243version = "0.1.0"
243dependencies = [
244dependencies = [
244 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
245 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
245− "dodrio 0.1.0",
246+ "dodrio 0.2.0",
246 "wasm-bindgen 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
247 "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 "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)",
249 "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -250,9 +251,9 @@ dependencies = [
250
251
251[[package]]
252[[package]]
252name = "dodrio-js-api"
253name = "dodrio-js-api"
253−version = "0.1.0"
254+version = "0.2.0"
254dependencies = [
255dependencies = [
255− "dodrio 0.1.0",
256+ "dodrio 0.2.0",
256 "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
257 "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 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-futures 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -264,8 +265,8 @@ name = "dodrio-js-component"
264version = "0.1.0"
265version = "0.1.0"
265dependencies = [
266dependencies = [
266 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
267 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
267− "dodrio 0.1.0",
268+ "dodrio 0.2.0",
268− "dodrio-js-api 0.1.0",
269+ "dodrio-js-api 0.2.0",
269 "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
270 "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 "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)",
272 "web-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -277,10 +278,10 @@ version = "0.1.0"
277dependencies = [
278dependencies = [
278 "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
279 "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
279 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
280 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
280− "console_log 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
281+ "console_log 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
281− "dodrio 0.1.0",
282+ "dodrio 0.2.0",
282 "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
283 "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
283− "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
284+ "log 0.4.11 (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 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-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 "wasm-bindgen-test 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -292,7 +293,7 @@ name = "dodrio-sierpinski"
292version = "0.1.0"
293version = "0.1.0"
293dependencies = [
294dependencies = [
294 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
295 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
295− "dodrio 0.1.0",
296+ "dodrio 0.2.0",
296 "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
297 "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 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-futures 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -306,12 +307,12 @@ version = "0.1.0"
306dependencies = [
307dependencies = [
307 "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
308 "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
308 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
309 "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
309− "console_log 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
310+ "console_log 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
310− "dodrio 0.1.0",
311+ "dodrio 0.2.0",
311 "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
312 "js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)",
312− "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
313+ "log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
313− "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
314+ "serde 1.0.114 (registry+https://github.com/rust-lang/crates.io-index)",
314− "serde_json 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)",
315+ "serde_json 1.0.57 (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 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-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 "wasm-bindgen-test 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -325,81 +326,85 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
325
326
326[[package]]
327[[package]]
327name = "futures"
328name = "futures"
328−version = "0.3.1"
329+version = "0.3.5"
329source = "registry+https://github.com/rust-lang/crates.io-index"
330source = "registry+https://github.com/rust-lang/crates.io-index"
330dependencies = [
331dependencies = [
331− "futures-channel 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
332+ "futures-channel 0.3.5 (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-core 0.3.5 (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-executor 0.3.5 (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-io 0.3.5 (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-sink 0.3.5 (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-task 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
337− "futures-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
338+ "futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
338]
339]
339
340
340[[package]]
341[[package]]
341name = "futures-channel"
342name = "futures-channel"
342−version = "0.3.1"
343+version = "0.3.5"
343source = "registry+https://github.com/rust-lang/crates.io-index"
344source = "registry+https://github.com/rust-lang/crates.io-index"
344dependencies = [
345dependencies = [
345− "futures-core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
346+ "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
346− "futures-sink 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
347+ "futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
347]
348]
348
349
349[[package]]
350[[package]]
350name = "futures-core"
351name = "futures-core"
351−version = "0.3.1"
352+version = "0.3.5"
352source = "registry+https://github.com/rust-lang/crates.io-index"
353source = "registry+https://github.com/rust-lang/crates.io-index"
353
354
354[[package]]
355[[package]]
355name = "futures-executor"
356name = "futures-executor"
356−version = "0.3.1"
357+version = "0.3.5"
357source = "registry+https://github.com/rust-lang/crates.io-index"
358source = "registry+https://github.com/rust-lang/crates.io-index"
358dependencies = [
359dependencies = [
359− "futures-core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
360+ "futures-core 0.3.5 (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-task 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
361− "futures-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
362+ "futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
362]
363]
363
364
364[[package]]
365[[package]]
365name = "futures-io"
366name = "futures-io"
366−version = "0.3.1"
367+version = "0.3.5"
367source = "registry+https://github.com/rust-lang/crates.io-index"
368source = "registry+https://github.com/rust-lang/crates.io-index"
368
369
369[[package]]
370[[package]]
370name = "futures-macro"
371name = "futures-macro"
371−version = "0.3.1"
372+version = "0.3.5"
372source = "registry+https://github.com/rust-lang/crates.io-index"
373source = "registry+https://github.com/rust-lang/crates.io-index"
373dependencies = [
374dependencies = [
374 "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)",
375 "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+ "proc-macro2 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
376 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
377 "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+ "syn 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
378]
379]
379
380
380[[package]]
381[[package]]
381name = "futures-sink"
382name = "futures-sink"
382−version = "0.3.1"
383+version = "0.3.5"
383source = "registry+https://github.com/rust-lang/crates.io-index"
384source = "registry+https://github.com/rust-lang/crates.io-index"
384
385
385[[package]]
386[[package]]
386name = "futures-task"
387name = "futures-task"
387−version = "0.3.1"
388+version = "0.3.5"
388source = "registry+https://github.com/rust-lang/crates.io-index"
389source = "registry+https://github.com/rust-lang/crates.io-index"
390+dependencies = [
391+ "once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
392+]
389
393
390[[package]]
394[[package]]
391name = "futures-util"
395name = "futures-util"
392−version = "0.3.1"
396+version = "0.3.5"
393source = "registry+https://github.com/rust-lang/crates.io-index"
397source = "registry+https://github.com/rust-lang/crates.io-index"
394dependencies = [
398dependencies = [
395− "futures-channel 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
399+ "futures-channel 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
396− "futures-core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
400+ "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
397− "futures-io 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
401+ "futures-io 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
398− "futures-macro 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
402+ "futures-macro 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
399− "futures-sink 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
403+ "futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
400− "futures-task 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
404+ "futures-task 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
401 "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
405 "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
406+ "pin-project 0.4.16 (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)",
407+ "pin-utils 0.1.0 (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)",
408 "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)",
409 "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)",
410 "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -413,6 +418,11 @@ dependencies = [
413 "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
418 "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
414]
419]
415
420
421+[[package]]
422+name = "half"
423+version = "1.6.0"
424+source = "registry+https://github.com/rust-lang/crates.io-index"
425+
416[[package]]
426[[package]]
417name = "heck"
427name = "heck"
418version = "0.3.1"
428version = "0.3.1"
@@ -431,7 +441,7 @@ dependencies = [
431
441
432[[package]]
442[[package]]
433name = "itertools"
443name = "itertools"
434−version = "0.8.2"
444+version = "0.9.0"
435source = "registry+https://github.com/rust-lang/crates.io-index"
445source = "registry+https://github.com/rust-lang/crates.io-index"
436dependencies = [
446dependencies = [
437 "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
447 "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -462,7 +472,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
462
472
463[[package]]
473[[package]]
464name = "log"
474name = "log"
465−version = "0.4.8"
475+version = "0.4.11"
466source = "registry+https://github.com/rust-lang/crates.io-index"
476source = "registry+https://github.com/rust-lang/crates.io-index"
467dependencies = [
477dependencies = [
468 "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
478 "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -515,14 +525,37 @@ dependencies = [
515 "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
525 "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
516]
526]
517
527
528+[[package]]
529+name = "once_cell"
530+version = "1.3.1"
531+source = "registry+https://github.com/rust-lang/crates.io-index"
532+
518[[package]]
533[[package]]
519name = "oorandom"
534name = "oorandom"
520version = "11.1.0"
535version = "11.1.0"
521source = "registry+https://github.com/rust-lang/crates.io-index"
536source = "registry+https://github.com/rust-lang/crates.io-index"
522
537
538+[[package]]
539+name = "pin-project"
540+version = "0.4.16"
541+source = "registry+https://github.com/rust-lang/crates.io-index"
542+dependencies = [
543+ "pin-project-internal 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)",
544+]
545+
546+[[package]]
547+name = "pin-project-internal"
548+version = "0.4.16"
549+source = "registry+https://github.com/rust-lang/crates.io-index"
550+dependencies = [
551+ "proc-macro2 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
552+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
553+ "syn 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
554+]
555+
523[[package]]
556[[package]]
524name = "pin-utils"
557name = "pin-utils"
525−version = "0.1.0-alpha.4"
558+version = "0.1.0"
526source = "registry+https://github.com/rust-lang/crates.io-index"
559source = "registry+https://github.com/rust-lang/crates.io-index"
527
560
528[[package]]
561[[package]]
@@ -541,9 +574,9 @@ name = "proc-macro-hack"
541version = "0.5.11"
574version = "0.5.11"
542source = "registry+https://github.com/rust-lang/crates.io-index"
575source = "registry+https://github.com/rust-lang/crates.io-index"
543dependencies = [
576dependencies = [
544− "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
577+ "proc-macro2 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
545 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
578 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
546− "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
579+ "syn 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
547]
580]
548
581
549[[package]]
582[[package]]
@@ -553,7 +586,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
553
586
554[[package]]
587[[package]]
555name = "proc-macro2"
588name = "proc-macro2"
556−version = "1.0.6"
589+version = "1.0.18"
557source = "registry+https://github.com/rust-lang/crates.io-index"
590source = "registry+https://github.com/rust-lang/crates.io-index"
558dependencies = [
591dependencies = [
559 "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
592 "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -564,7 +597,7 @@ name = "quote"
564version = "1.0.2"
597version = "1.0.2"
565source = "registry+https://github.com/rust-lang/crates.io-index"
598source = "registry+https://github.com/rust-lang/crates.io-index"
566dependencies = [
599dependencies = [
567− "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
600+ "proc-macro2 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
568]
601]
569
602
570[[package]]
603[[package]]
@@ -656,30 +689,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
656
689
657[[package]]
690[[package]]
658name = "serde"
691name = "serde"
659−version = "1.0.104"
692+version = "1.0.114"
660source = "registry+https://github.com/rust-lang/crates.io-index"
693source = "registry+https://github.com/rust-lang/crates.io-index"
661dependencies = [
694dependencies = [
695+ "serde_derive 1.0.114 (registry+https://github.com/rust-lang/crates.io-index)",
696+]
697+
698+[[package]]
699+name = "serde_cbor"
700+version = "0.11.1"
701+source = "registry+https://github.com/rust-lang/crates.io-index"
702+dependencies = [
703+ "half 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
662− "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
704+ "serde 1.0.114 (registry+https://github.com/rust-lang/crates.io-index)",
663]
705]
664
706
665[[package]]
707[[package]]
666name = "serde_derive"
708name = "serde_derive"
667−version = "1.0.104"
709+version = "1.0.114"
668source = "registry+https://github.com/rust-lang/crates.io-index"
710source = "registry+https://github.com/rust-lang/crates.io-index"
669dependencies = [
711dependencies = [
670− "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
712+ "proc-macro2 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
671 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
713 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
672− "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
714+ "syn 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
673]
715]
674
716
675[[package]]
717[[package]]
676name = "serde_json"
718name = "serde_json"
677−version = "1.0.47"
719+version = "1.0.57"
678source = "registry+https://github.com/rust-lang/crates.io-index"
720source = "registry+https://github.com/rust-lang/crates.io-index"
679dependencies = [
721dependencies = [
680 "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
722 "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
681 "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
723 "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
682− "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
724+ "serde 1.0.114 (registry+https://github.com/rust-lang/crates.io-index)",
683]
725]
684
726
685[[package]]
727[[package]]
@@ -694,10 +736,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
694
736
695[[package]]
737[[package]]
696name = "syn"
738name = "syn"
697−version = "1.0.11"
739+version = "1.0.33"
698source = "registry+https://github.com/rust-lang/crates.io-index"
740source = "registry+https://github.com/rust-lang/crates.io-index"
699dependencies = [
741dependencies = [
700− "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
742+ "proc-macro2 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
701 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
743 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
702 "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
744 "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
703]
745]
@@ -712,11 +754,11 @@ dependencies = [
712
754
713[[package]]
755[[package]]
714name = "tinytemplate"
756name = "tinytemplate"
715−version = "1.0.2"
757+version = "1.1.0"
716source = "registry+https://github.com/rust-lang/crates.io-index"
758source = "registry+https://github.com/rust-lang/crates.io-index"
717dependencies = [
759dependencies = [
718− "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
760+ "serde 1.0.114 (registry+https://github.com/rust-lang/crates.io-index)",
719− "serde_json 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)",
761+ "serde_json 1.0.57 (registry+https://github.com/rust-lang/crates.io-index)",
720]
762]
721
763
722[[package]]
764[[package]]
@@ -765,10 +807,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
765dependencies = [
807dependencies = [
766 "bumpalo 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
808 "bumpalo 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
767 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
809 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
768− "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
810+ "log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
769− "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
811+ "proc-macro2 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
770 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
812 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
771− "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
813+ "syn 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
772 "wasm-bindgen-shared 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
814 "wasm-bindgen-shared 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
773]
815]
774
816
@@ -797,9 +839,9 @@ name = "wasm-bindgen-macro-support"
797version = "0.2.55"
839version = "0.2.55"
798source = "registry+https://github.com/rust-lang/crates.io-index"
840source = "registry+https://github.com/rust-lang/crates.io-index"
799dependencies = [
841dependencies = [
800− "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
842+ "proc-macro2 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
801 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
843 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
802− "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
844+ "syn 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
803 "wasm-bindgen-backend 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
845 "wasm-bindgen-backend 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
804 "wasm-bindgen-shared 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
846 "wasm-bindgen-shared 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
805]
847]
@@ -827,7 +869,7 @@ name = "wasm-bindgen-test-macro"
827version = "0.3.5"
869version = "0.3.5"
828source = "registry+https://github.com/rust-lang/crates.io-index"
870source = "registry+https://github.com/rust-lang/crates.io-index"
829dependencies = [
871dependencies = [
830− "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
872+ "proc-macro2 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
831 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
873 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
832]
874]
833
875
@@ -838,10 +880,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
838dependencies = [
880dependencies = [
839 "anyhow 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
881 "anyhow 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
840 "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
882 "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
841− "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
883+ "log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
842− "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
884+ "proc-macro2 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
843 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
885 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
844− "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
886+ "syn 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
845 "wasm-bindgen-backend 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
887 "wasm-bindgen-backend 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
846 "weedle 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
888 "weedle 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
847]
889]
@@ -905,9 +947,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
905"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
947"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
906"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
948"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
907"checksum console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211"
949"checksum console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211"
908−"checksum console_log 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1e7871d2947441b0fdd8e2bd1ce2a2f75304f896582c0d572162d48290683c48"
950+"checksum console_log 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494"
909−"checksum criterion 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1fc755679c12bda8e5523a71e4d654b6bf2e14bd838dfc48cde6559a05caf7d1"
951+"checksum criterion 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "70daa7ceec6cf143990669a04c7df13391d55fb27bd4079d252fca774ba244d8"
910−"checksum criterion-plot 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a01e15e0ea58e8234f96146b1f91fa9d0e4dd7a38da93ff7a75d42c0b9d3a545"
952+"checksum criterion-plot 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e022feadec601fba1649cfa83586381a4ad31c6bf3a9ab7d408118b05dd9889d"
911"checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca"
953"checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca"
912"checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac"
954"checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac"
913"checksum crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfd6515864a82d2f877b42813d4553292c6659498c9a2aa31bab5a15243c2700"
955"checksum crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfd6515864a82d2f877b42813d4553292c6659498c9a2aa31bab5a15243c2700"
@@ -915,36 +957,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
915"checksum csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "37519ccdfd73a75821cac9319d4fce15a81b9fcf75f951df5b9988aa3a0af87d"
957"checksum csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "37519ccdfd73a75821cac9319d4fce15a81b9fcf75f951df5b9988aa3a0af87d"
916"checksum csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9b5cadb6b25c77aeff80ba701712494213f4a8418fcda2ee11b6560c3ad0bf4c"
958"checksum csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9b5cadb6b25c77aeff80ba701712494213f4a8418fcda2ee11b6560c3ad0bf4c"
917"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
959"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
918−"checksum futures 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b6f16056ecbb57525ff698bb955162d0cd03bee84e6241c27ff75c08d8ca5987"
960+"checksum futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1e05b85ec287aac0dc34db7d4a569323df697f9c55b99b15d6b4ef8cde49f613"
919−"checksum futures-channel 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fcae98ca17d102fd8a3603727b9259fcf7fa4239b603d2142926189bc8999b86"
961+"checksum futures-channel 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f366ad74c28cca6ba456d95e6422883cfb4b252a83bed929c83abfdbbf2967d5"
920−"checksum futures-core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "79564c427afefab1dfb3298535b21eda083ef7935b4f0ecbfcb121f0aec10866"
962+"checksum futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "59f5fff90fd5d971f936ad674802482ba441b6f09ba5e15fd8b39145582ca399"
921−"checksum futures-executor 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1e274736563f686a837a0568b478bdabfeaec2dca794b5649b04e2fe1627c231"
963+"checksum futures-executor 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "10d6bb888be1153d3abeb9006b11b02cf5e9b209fda28693c31ae1e4e012e314"
922−"checksum futures-io 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e676577d229e70952ab25f3945795ba5b16d63ca794ca9d2c860e5595d20b5ff"
964+"checksum futures-io 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "de27142b013a8e869c14957e6d2edeef89e97c289e69d042ee3a49acd8b51789"
923−"checksum futures-macro 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "52e7c56c15537adb4f76d0b7a76ad131cb4d2f4f32d3b0bcabcbe1c7c5e87764"
965+"checksum futures-macro 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39"
924−"checksum futures-sink 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "171be33efae63c2d59e6dbba34186fe0d6394fb378069a76dfd80fdcffd43c16"
966+"checksum futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3f2032893cb734c7a05d85ce0cc8b8c4075278e93b24b66f9de99d6eb0fa8acc"
925−"checksum futures-task 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0bae52d6b29cf440e298856fec3965ee6fa71b06aa7495178615953fd669e5f9"
967+"checksum futures-task 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "bdb66b5f09e22019b1ab0830f7785bcea8e7a42148683f99214f73f8ec21a626"
926−"checksum futures-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c0d66274fb76985d3c62c886d1da7ac4c0903a8c9f754e8fe0f35a6a6cc39e76"
968+"checksum futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "8764574ff08b701a084482c3c7031349104b07ac897393010494beaa18ce32c6"
927"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
969"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
970+"checksum half 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d36fab90f82edc3c747f9d438e06cf0a491055896f2a279638bb5beed6c40177"
928"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
971"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
929"checksum hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "307c3c9f937f38e3534b1d6447ecf090cafcc9744e4a6360e8b037b2cf5af120"
972"checksum hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "307c3c9f937f38e3534b1d6447ecf090cafcc9744e4a6360e8b037b2cf5af120"
930−"checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
973+"checksum itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
931"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
974"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
932"checksum js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)" = "1c840fdb2167497b0bd0db43d6dfe61e91637fa72f9d061f8bd17ddc44ba6414"
975"checksum js-sys 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)" = "1c840fdb2167497b0bd0db43d6dfe61e91637fa72f9d061f8bd17ddc44ba6414"
933"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
976"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
934"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
977"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
935−"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
978+"checksum log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
936"checksum longest-increasing-subsequence 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86"
979"checksum longest-increasing-subsequence 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86"
937"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
980"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
938"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9"
981"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9"
939"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6"
982"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6"
940"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4"
983"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4"
941"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72"
984"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72"
985+"checksum once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b"
942"checksum oorandom 11.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebcec7c9c2a95cacc7cd0ecb89d8a8454eca13906f6deb55258ffff0adeb9405"
986"checksum oorandom 11.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebcec7c9c2a95cacc7cd0ecb89d8a8454eca13906f6deb55258ffff0adeb9405"
943−"checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587"
987+"checksum pin-project 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)" = "81d480cb4e89522ccda96d0eed9af94180b7a5f93fb28f66e1fd7d68431663d1"
988+"checksum pin-project-internal 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)" = "a82996f11efccb19b685b14b5df818de31c1edcee3daa256ab5775dd98e72feb"
989+"checksum pin-utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
944"checksum plotters 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "4e3bb8da247d27ae212529352020f3e5ee16e83c0c258061d27b08ab92675eeb"
990"checksum plotters 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "4e3bb8da247d27ae212529352020f3e5ee16e83c0c258061d27b08ab92675eeb"
945"checksum proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5"
991"checksum proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5"
946"checksum proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e"
992"checksum proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e"
947−"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27"
993+"checksum proc-macro2 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)" = "beae6331a816b1f65d04c45b078fd8e6c93e8071771f41b8163255bbd8d7c8fa"
948"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
994"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
949"checksum rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098"
995"checksum rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098"
950"checksum rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9"
996"checksum rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9"
@@ -958,14 +1004,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
958"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
1004"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
959"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
1005"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
960"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
1006"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
961−"checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449"
1007+"checksum serde 1.0.114 (registry+https://github.com/rust-lang/crates.io-index)" = "5317f7588f0a5078ee60ef675ef96735a1442132dc645eb1d12c018620ed8cd3"
1008+"checksum serde_cbor 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1e18acfa2f90e8b735b2836ab8d538de304cbb6729a7360729ea5a895d15a622"
962−"checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64"
1009+"checksum serde_derive 1.0.114 (registry+https://github.com/rust-lang/crates.io-index)" = "2a0be94b04690fbaed37cddffc5c134bf537c8e3329d53e982fe04c374978f8e"
963−"checksum serde_json 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)" = "15913895b61e0be854afd32fd4163fcd2a3df34142cf2cb961b310ce694cbf90"
1010+"checksum serde_json 1.0.57 (registry+https://github.com/rust-lang/crates.io-index)" = "164eacbdb13512ec2745fb09d51fd5b22b0d65ed294a1dcf7285a360c80a675c"
964"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
1011"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
965"checksum sourcefile 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4bf77cb82ba8453b42b6ae1d692e4cdc92f9a47beaf89a847c8be83f4e328ad3"
1012"checksum sourcefile 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4bf77cb82ba8453b42b6ae1d692e4cdc92f9a47beaf89a847c8be83f4e328ad3"
966−"checksum syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238"
1013+"checksum syn 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)" = "e8d5d96e8cbb005d6959f119f773bfaebb5684296108fb32600c00cde305b2cd"
967"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
1014"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
968−"checksum tinytemplate 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4574b75faccaacddb9b284faecdf0b544b80b6b294f3d062d325c5726a209c20"
1015+"checksum tinytemplate 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6d3dc76004a03cec1c5932bca4cdc2e39aaa798e3f82363dd94f9adf6098c12f"
969"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
1016"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
970"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
1017"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
971"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
1018"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
Cargo.toml+8−8
@@ -8,7 +8,7 @@ license = "MPL-2.0"
8name = "dodrio"
8name = "dodrio"
9readme = "./README.md"
9readme = "./README.md"
10repository = "https://github.com/fitzgen/dodrio"
10repository = "https://github.com/fitzgen/dodrio"
11−version = "0.1.0"
11+version = "0.2.0"
12
12
13[badges]
13[badges]
14travis-ci = { repository = "fitzgen/dodrio" }
14travis-ci = { repository = "fitzgen/dodrio" }
@@ -46,9 +46,9 @@ bumpalo = "2.6.0"
46cfg-if = "0.1.10"
46cfg-if = "0.1.10"
47fxhash = "0.2.1"
47fxhash = "0.2.1"
48js-sys = "0.3.32"
48js-sys = "0.3.32"
49−log = { version = "0.4.8", optional = true }
49+log = { version = "0.4.11", optional = true }
50longest-increasing-subsequence = "0.1.0"
50longest-increasing-subsequence = "0.1.0"
51−serde = { version = "1.0.104", optional = true }
51+serde = { version = "1.0.114", optional = true }
52wasm-bindgen = "0.2.55"
52wasm-bindgen = "0.2.55"
53wasm-bindgen-futures = "0.4.5"
53wasm-bindgen-futures = "0.4.5"
54
54
@@ -64,10 +64,10 @@ features = [
64]
64]
65
65
66[dev-dependencies]
66[dev-dependencies]
67−console_log = "0.1.2"
67+console_log = "0.2.0"
68−dodrio-js-api = { version = "=0.1.0", path = "./crates/js-api" }
68+dodrio-js-api = { version = "=0.2.0", path = "./crates/js-api" }
69−futures = "0.3.1"
69+futures = "0.3.5"
70−log = "0.4.8"
70+log = "0.4.11"
71wasm-bindgen-test = "0.3.5"
71wasm-bindgen-test = "0.3.5"
72
72
73[dev-dependencies.web-sys]
73[dev-dependencies.web-sys]
@@ -81,7 +81,7 @@ features = [
81]
81]
82
82
83[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
83[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
84−criterion = "0.3.1"
84+criterion = "0.3.3"
85
85
86[profile.bench]
86[profile.bench]
87debug = true
87debug = true
benches/benches.rs+4−4
@@ -17,16 +17,16 @@ use std::convert::TryInto;
17
17
18/// The simplest thing we can render: `<div/>`.
18/// The simplest thing we can render: `<div/>`.
19struct Empty;
19struct Empty;
20−impl Render for Empty {
20+impl<'a> Render<'a> for Empty {
21− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
21+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
22 div(&cx).finish()
22 div(&cx).finish()
23 }
23 }
24}
24}
25
25
26/// Render a list that is `self.0` items long, has attributes and listeners.
26/// Render a list that is `self.0` items long, has attributes and listeners.
27struct SimpleList(usize);
27struct SimpleList(usize);
28−impl Render for SimpleList {
28+impl<'a> Render<'a> for SimpleList {
29− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
29+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
30 let mut children = bumpalo::collections::Vec::with_capacity_in(self.0, cx.bump);
30 let mut children = bumpalo::collections::Vec::with_capacity_in(self.0, cx.bump);
31 children.extend((0..self.0).map(|_| {
31 children.extend((0..self.0).map(|_| {
32 li(&cx)
32 li(&cx)
crates/js-api/Cargo.toml+2−2
@@ -7,13 +7,13 @@ keywords = ["javascript", "js", "vdom", "virtual-dom"]
7license = "MPL-2.0"
7license = "MPL-2.0"
8name = "dodrio-js-api"
8name = "dodrio-js-api"
9repository = "https://github.com/fitzgen/dodrio"
9repository = "https://github.com/fitzgen/dodrio"
10−version = "0.1.0"
10+version = "0.2.0"
11
11
12[badges]
12[badges]
13travis-ci = { repository = "fitzgen/dodrio" }
13travis-ci = { repository = "fitzgen/dodrio" }
14
14
15[dependencies]
15[dependencies]
16−dodrio = { version = "=0.1.0", path = "../.." }
16+dodrio = { version = "=0.2.0", path = "../.." }
17wasm-bindgen = "0.2.55"
17wasm-bindgen = "0.2.55"
18js-sys = "0.3.32"
18js-sys = "0.3.32"
19wasm-bindgen-futures = "0.4.5"
19wasm-bindgen-futures = "0.4.5"
crates/js-api/src/lib.rs+4−4
@@ -99,8 +99,8 @@ impl GreetingViaJs {
99
99
100/// And finally the `Render` implementation! This adds a `<p>` element and some
100/// And finally the `Render` implementation! This adds a `<p>` element and some
101/// text around whatever the inner JS `Greeting` component renders.
101/// text around whatever the inner JS `Greeting` component renders.
102−impl Render for GreetingViaJs {
102+impl<'a> Render<'a> for GreetingViaJs {
103− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
103+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
104 use dodrio::builder::*;
104 use dodrio::builder::*;
105 p(&cx)
105 p(&cx)
106 .children([
106 .children([
@@ -216,8 +216,8 @@ impl JsRender {
216 }
216 }
217}
217}
218
218
219−impl Render for JsRender {
219+impl<'a> Render<'a> for JsRender {
220− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
220+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
221 create(cx, self.render())
221 create(cx, self.render())
222 }
222 }
223}
223}
examples/counter/Cargo.toml+2−2
@@ -11,9 +11,9 @@ crate-type = ["cdylib"]
11
11
12[dependencies]
12[dependencies]
13console_error_panic_hook = "0.1.6"
13console_error_panic_hook = "0.1.6"
14−console_log = "0.1.2"
14+console_log = "0.2.0"
15dodrio = { path = "../.." }
15dodrio = { path = "../.." }
16−log = "0.4.8"
16+log = "0.4.11"
17wasm-bindgen = "0.2.55"
17wasm-bindgen = "0.2.55"
18
18
19[dependencies.web-sys]
19[dependencies.web-sys]
examples/counter/src/lib.rs+2−2
@@ -26,8 +26,8 @@ impl Counter {
26
26
27// The `Render` implementation for `Counter`s displays the current count and has
27// The `Render` implementation for `Counter`s displays the current count and has
28// buttons to increment and decrement the count.
28// buttons to increment and decrement the count.
29−impl Render for Counter {
29+impl<'a> Render<'a> for Counter {
30− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
30+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
31 use dodrio::builder::*;
31 use dodrio::builder::*;
32
32
33 // Stringify the count as a bump-allocated string.
33 // Stringify the count as a bump-allocated string.
examples/game-of-life/src/lib.rs+2−2
@@ -126,8 +126,8 @@ impl Universe {
126}
126}
127
127
128/// The rendering implementation for our Game of Life.
128/// The rendering implementation for our Game of Life.
129−impl Render for Universe {
129+impl<'a> Render<'a> for Universe {
130− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
130+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
131 use dodrio::builder::*;
131 use dodrio::builder::*;
132
132
133 let mut rows = bumpalo::collections::Vec::with_capacity_in(self.height as usize, cx.bump);
133 let mut rows = bumpalo::collections::Vec::with_capacity_in(self.height as usize, cx.bump);
examples/hello-world/src/lib.rs+2−2
@@ -10,8 +10,8 @@ struct Hello {
10
10
11// The `Render` implementation describes how to render a `Hello` component into
11// The `Render` implementation describes how to render a `Hello` component into
12// HTML.
12// HTML.
13−impl Render for Hello {
13+impl<'a> Render<'a> for Hello {
14− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
14+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
15 let msg = bumpalo::format!(in cx.bump, "Hello, {}!", self.who);
15 let msg = bumpalo::format!(in cx.bump, "Hello, {}!", self.who);
16 let msg = msg.into_bump_str();
16 let msg = msg.into_bump_str();
17 p(&cx).children([text(msg)]).finish()
17 p(&cx).children([text(msg)]).finish()
examples/input-form/src/lib.rs+2−2
@@ -23,8 +23,8 @@ impl SayHelloTo {
23
23
24// The `Render` implementation has a text `<input>` and a `<div>` that shows a
24// The `Render` implementation has a text `<input>` and a `<div>` that shows a
25// greeting to the `<input>`'s value.
25// greeting to the `<input>`'s value.
26−impl Render for SayHelloTo {
26+impl<'a> Render<'a> for SayHelloTo {
27− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
27+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
28 use dodrio::builder::*;
28 use dodrio::builder::*;
29
29
30 div(&cx)
30 div(&cx)
examples/js-component/src/lib.rs+2−2
@@ -31,8 +31,8 @@ impl GreetingViaJs {
31
31
32/// Here's the `Render` implementation! This adds a `<p>` element and some text
32/// Here's the `Render` implementation! This adds a `<p>` element and some text
33/// around whatever the inner JS `Greeting` component renders.
33/// around whatever the inner JS `Greeting` component renders.
34−impl Render for GreetingViaJs {
34+impl<'a> Render<'a> for GreetingViaJs {
35− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
35+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
36 use dodrio::builder::*;
36 use dodrio::builder::*;
37 p(&cx)
37 p(&cx)
38 .children([text("JavaScript says: "), self.js.render(cx)])
38 .children([text("JavaScript says: "), self.js.render(cx)])
examples/moire/Cargo.toml+2−2
@@ -10,13 +10,13 @@ crate-type = ["cdylib"]
10[dependencies]
10[dependencies]
11cfg-if = "0.1.10"
11cfg-if = "0.1.10"
12dodrio = { path = "../.." }
12dodrio = { path = "../.." }
13−log = "0.4.8"
13+log = "0.4.11"
14wasm-bindgen = "0.2.55"
14wasm-bindgen = "0.2.55"
15wasm-bindgen-futures = "0.4.5"
15wasm-bindgen-futures = "0.4.5"
16
16
17# Optional dependencies for logging.
17# Optional dependencies for logging.
18console_error_panic_hook = { optional = true, version = "0.1.6" }
18console_error_panic_hook = { optional = true, version = "0.1.6" }
19−console_log = { optional = true, version = "0.1.2" }
19+console_log = { optional = true, version = "0.2.0" }
20js-sys = "0.3.32"
20js-sys = "0.3.32"
21
21
22[dependencies.web-sys]
22[dependencies.web-sys]
examples/moire/src/lib.rs+2−2
@@ -104,8 +104,8 @@ impl Moire {
104 }
104 }
105}
105}
106
106
107−impl Render for Moire {
107+impl<'a> Render<'a> for Moire {
108− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
108+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
109 use dodrio::builder::*;
109 use dodrio::builder::*;
110
110
111 let elapsed = web_sys::window()
111 let elapsed = web_sys::window()
examples/sierpinski-triangle/src/lib.rs+2−2
@@ -85,8 +85,8 @@ impl Container {
85 }
85 }
86}
86}
87
87
88−impl Render for Container {
88+impl<'a> Render<'a> for Container {
89− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
89+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
90 use dodrio::builder::div;
90 use dodrio::builder::div;
91
91
92 let elapsed = web_sys::window()
92 let elapsed = web_sys::window()
examples/todomvc/Cargo.toml+4−4
@@ -8,15 +8,15 @@ version = "0.1.0"
8cfg-if = "0.1.10"
8cfg-if = "0.1.10"
9dodrio = { path = "../..", features = ["serde"] }
9dodrio = { path = "../..", features = ["serde"] }
10js-sys = "0.3.32"
10js-sys = "0.3.32"
11−serde = { features = ["derive"], version = "1.0.104" }
11+serde = { features = ["derive"], version = "1.0.114" }
12−serde_json = "1.0.47"
12+serde_json = "1.0.57"
13wasm-bindgen = "0.2.55"
13wasm-bindgen = "0.2.55"
14wasm-bindgen-futures = "0.4.5"
14wasm-bindgen-futures = "0.4.5"
15
15
16# Optional dependencies for logging.
16# Optional dependencies for logging.
17console_error_panic_hook = { optional = true, version = "0.1.6" }
17console_error_panic_hook = { optional = true, version = "0.1.6" }
18−console_log = { optional = true, version = "0.1.2" }
18+console_log = { optional = true, version = "0.2.0" }
19−log = { optional = true, version = "0.4.8" }
19+log = { optional = true, version = "0.4.11" }
20
20
21[dependencies.web-sys]
21[dependencies.web-sys]
22version = "0.3.32"
22version = "0.3.32"
examples/todomvc/src/todo.rs+2−2
@@ -116,8 +116,8 @@ impl<C> Todo<C> {
116 }
116 }
117}
117}
118
118
119−impl<C: TodoActions> Render for Todo<C> {
119+impl<'a, C: TodoActions> Render<'a> for Todo<C> {
120− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
120+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
121 use dodrio::{
121 use dodrio::{
122 builder::*,
122 builder::*,
123 bumpalo::{self, collections::String},
123 bumpalo::{self, collections::String},
examples/todomvc/src/todos.rs+2−2
@@ -289,8 +289,8 @@ impl<C: TodosActions> Todos<C> {
289 }
289 }
290}
290}
291
291
292−impl<C: TodosActions> Render for Todos<C> {
292+impl<'a, C: TodosActions> Render<'a> for Todos<C> {
293− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
293+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
294 use dodrio::builder::*;
294 use dodrio::builder::*;
295
295
296 div(&cx)
296 div(&cx)
src/cached.rs+7−7
@@ -45,8 +45,8 @@ where
45 /// count: u32,
45 /// count: u32,
46 /// }
46 /// }
47 ///
47 ///
48− /// impl Render for Counter {
48+ /// impl<'a> Render<'a> for Counter {
49− /// fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
49+ /// fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
50 /// // ...
50 /// // ...
51 /// # unimplemented!()
51 /// # unimplemented!()
52 /// }
52 /// }
@@ -85,8 +85,8 @@ where
85 /// who: String
85 /// who: String
86 /// }
86 /// }
87 ///
87 ///
88− /// impl Render for Hello {
88+ /// impl<'a> Render<'a> for Hello {
89− /// fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
89+ /// fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
90 /// use dodrio::builder::*;
90 /// use dodrio::builder::*;
91 /// let greeting = bumpalo::format!(in cx.bump, "Hello, {}!", self.who);
91 /// let greeting = bumpalo::format!(in cx.bump, "Hello, {}!", self.who);
92 /// p(&cx)
92 /// p(&cx)
@@ -143,11 +143,11 @@ where
143 }
143 }
144}
144}
145
145
146−impl<R> Render for Cached<R>
146+impl<'a, R> Render<'a> for Cached<R>
147where
147where
148− R: 'static + Default + Render,
148+ R: 'static + Default + for<'b> Render<'b>,
149{
149{
150− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
150+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
151 let template = cx.template::<R>();
151 let template = cx.template::<R>();
152 let cached = match self.cached.get() {
152 let cached = match self.cached.get() {
153 // This does-the-cache-contain-this-id check is necessary because
153 // This does-the-cache-contain-this-id check is necessary because
src/change_list/mod.rs+2−2
@@ -233,9 +233,9 @@ impl ChangeListBuilder<'_> {
233 self.state.emitter.replace_with();
233 self.state.emitter.replace_with();
234 }
234 }
235
235
236− pub fn set_attribute(&mut self, name: &str, value: &str) {
236+ pub fn set_attribute(&mut self, name: &str, value: &str, is_namespaced: bool) {
237 debug_assert!(self.traversal_is_committed());
237 debug_assert!(self.traversal_is_committed());
238− if name == "class" {
238+ if name == "class" && !is_namespaced {
239 let class_id = self.ensure_string(value);
239 let class_id = self.ensure_string(value);
240 debug!("emit: set_class({:?})", value);
240 debug!("emit: set_class({:?})", value);
241 self.state.emitter.set_class(class_id.into());
241 self.state.emitter.set_class(class_id.into());
src/diff.rs+6−6
@@ -78,7 +78,7 @@ pub(crate) fn diff(
78 return;
78 return;
79 }
79 }
80 diff_listeners(change_list, registry, old_listeners, new_listeners);
80 diff_listeners(change_list, registry, old_listeners, new_listeners);
81− diff_attributes(change_list, old_attributes, new_attributes);
81+ diff_attributes(change_list, old_attributes, new_attributes, new_namespace.is_some());
82 diff_children(
82 diff_children(
83 cached_set,
83 cached_set,
84 change_list,
84 change_list,
@@ -204,26 +204,26 @@ fn diff_listeners(
204// [... node]
204// [... node]
205//
205//
206// The change list stack is left unchanged.
206// The change list stack is left unchanged.
207−fn diff_attributes(change_list: &mut ChangeListBuilder, old: &[Attribute], new: &[Attribute]) {
207+fn diff_attributes(change_list: &mut ChangeListBuilder, old: &[Attribute], new: &[Attribute], is_namespaced: bool) {
208 // Do O(n^2) passes to add/update and remove attributes, since
208 // Do O(n^2) passes to add/update and remove attributes, since
209 // there are almost always very few attributes.
209 // there are almost always very few attributes.
210 'outer: for new_attr in new {
210 'outer: for new_attr in new {
211 if new_attr.is_volatile() {
211 if new_attr.is_volatile() {
212 change_list.commit_traversal();
212 change_list.commit_traversal();
213− change_list.set_attribute(new_attr.name, new_attr.value);
213+ change_list.set_attribute(new_attr.name, new_attr.value, is_namespaced);
214 } else {
214 } else {
215 for old_attr in old {
215 for old_attr in old {
216 if old_attr.name == new_attr.name {
216 if old_attr.name == new_attr.name {
217 if old_attr.value != new_attr.value {
217 if old_attr.value != new_attr.value {
218 change_list.commit_traversal();
218 change_list.commit_traversal();
219− change_list.set_attribute(new_attr.name, new_attr.value);
219+ change_list.set_attribute(new_attr.name, new_attr.value, is_namespaced);
220 }
220 }
221 continue 'outer;
221 continue 'outer;
222 }
222 }
223 }
223 }
224
224
225 change_list.commit_traversal();
225 change_list.commit_traversal();
226− change_list.set_attribute(new_attr.name, new_attr.value);
226+ change_list.set_attribute(new_attr.name, new_attr.value, is_namespaced);
227 }
227 }
228 }
228 }
229
229
@@ -953,7 +953,7 @@ fn create(
953 }
953 }
954
954
955 for attr in attributes {
955 for attr in attributes {
956− change_list.set_attribute(&attr.name, &attr.value);
956+ change_list.set_attribute(&attr.name, &attr.value, namespace.is_some());
957 }
957 }
958
958
959 // Fast path: if there is a single text child, it is faster to
959 // Fast path: if there is a single text child, it is faster to
src/lib.rs+2−2
@@ -18,8 +18,8 @@
18//! }
18//! }
19//! }
19//! }
20//!
20//!
21−//! impl<'who> Render for Hello<'who> {
21+//! impl<'a, 'who> Render<'a> for Hello<'who> {
22−//! fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
22+//! fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
23//! use dodrio::builder::*;
23//! use dodrio::builder::*;
24//!
24//!
25//! let id = bumpalo::format!(in cx.bump, "hello-{}", self.who);
25//! let id = bumpalo::format!(in cx.bump, "hello-{}", self.who);
src/render.rs+39−12
@@ -21,8 +21,8 @@ use wasm_bindgen::UnwrapThrowExt;
21///
21///
22/// pub struct MyComponent;
22/// pub struct MyComponent;
23///
23///
24−/// impl Render for MyComponent {
24+/// impl<'a> Render<'a> for MyComponent {
25−/// fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
25+/// fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
26/// use dodrio::builder::*;
26/// use dodrio::builder::*;
27///
27///
28/// p(&cx)
28/// p(&cx)
@@ -35,26 +35,26 @@ use wasm_bindgen::UnwrapThrowExt;
35/// }
35/// }
36/// }
36/// }
37/// ```
37/// ```
38−pub trait Render {
38+pub trait Render<'a> {
39 /// Render `self` as a virtual DOM. Use the given context's `Bump` for
39 /// Render `self` as a virtual DOM. Use the given context's `Bump` for
40 /// temporary allocations.
40 /// temporary allocations.
41− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a>;
41+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a>;
42}
42}
43
43
44−impl<'r, R> Render for &'r R
44+impl<'a, 'r, R> Render<'a> for &'r R
45where
45where
46− R: Render,
46+ R: Render<'a>,
47{
47{
48− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
48+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
49 (**self).render(cx)
49 (**self).render(cx)
50 }
50 }
51}
51}
52
52
53−impl<R> Render for Rc<R>
53+impl<'a, R> Render<'a> for Rc<R>
54where
54where
55− R: Render,
55+ R: Render<'a>,
56{
56{
57− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
57+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
58 (**self).render(cx)
58 (**self).render(cx)
59 }
59 }
60}
60}
@@ -69,7 +69,7 @@ where
69/// You do not need to implement this trait by hand: there is a blanket
69/// You do not need to implement this trait by hand: there is a blanket
70/// implementation for all `Render` types that fulfill the `RootRender`
70/// implementation for all `Render` types that fulfill the `RootRender`
71/// requirements.
71/// requirements.
72−pub trait RootRender: Any + Render {
72+pub trait RootRender: Any + for<'a> Render<'a> {
73 /// Get this `&RootRender` trait object as an `&Any` trait object reference.
73 /// Get this `&RootRender` trait object as an `&Any` trait object reference.
74 fn as_any(&self) -> &dyn Any;
74 fn as_any(&self) -> &dyn Any;
75
75
@@ -80,7 +80,7 @@ pub trait RootRender: Any + Render {
80
80
81impl<T> RootRender for T
81impl<T> RootRender for T
82where
82where
83− T: Any + Render,
83+ T: Any + for<'a> Render<'a>,
84{
84{
85 fn as_any(&self) -> &dyn Any {
85 fn as_any(&self) -> &dyn Any {
86 self
86 self
@@ -138,4 +138,31 @@ mod tests {
138 #[allow(dead_code)]
138 #[allow(dead_code)]
139 fn takes_dyn_render(_: &dyn super::RootRender) {}
139 fn takes_dyn_render(_: &dyn super::RootRender) {}
140 }
140 }
141+
142+ #[test]
143+ fn render_bump_scoped_child() {
144+ use crate::{builder::*, bumpalo::collections::String, Node, Render, RenderContext};
145+
146+ struct Child<'a> {
147+ name: &'a str,
148+ }
149+
150+ impl<'a> Render<'a> for Child<'a> {
151+ fn render(&self, _cx: &mut RenderContext<'a>) -> Node<'a> {
152+ text(self.name)
153+ }
154+ }
155+
156+ struct Parent;
157+
158+ impl<'a> Render<'a> for Parent {
159+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
160+ let child_name = String::from_str_in("child", cx.bump).into_bump_str();
161+
162+ div(&cx)
163+ .children([Child { name: child_name }.render(cx)])
164+ .finish()
165+ }
166+ }
167+ }
141}
168}
src/render_context.rs+1−1
@@ -69,7 +69,7 @@ impl<'a> RenderContext<'a> {
69 /// Get or create the cached template for `Cached<R>`.
69 /// Get or create the cached template for `Cached<R>`.
70 pub(crate) fn template<R>(&mut self) -> Option<CacheId>
70 pub(crate) fn template<R>(&mut self) -> Option<CacheId>
71 where
71 where
72− R: 'static + Default + Render,
72+ R: 'static + Default + for<'b> Render<'b>,
73 {
73 {
74 let template_id = Cached::<R>::template_id();
74 let template_id = Cached::<R>::template_id();
75 if let Some(cache_id) = self.templates.get(&template_id).cloned() {
75 if let Some(cache_id) = self.templates.get(&template_id).cloned() {
tests/web/cached.rs+4−4
@@ -18,8 +18,8 @@ impl CountRenders {
18 }
18 }
19}
19}
20
20
21−impl Render for CountRenders {
21+impl<'a> Render<'a> for CountRenders {
22− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
22+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
23 let count = self.render_count.get() + 1;
23 let count = self.render_count.get() + 1;
24 self.render_count.set(count);
24 self.render_count.set(count);
25
25
@@ -153,8 +153,8 @@ impl Default for Id {
153 }
153 }
154}
154}
155
155
156−impl Render for Id {
156+impl<'a> Render<'a> for Id {
157− fn render<'a>(&self, _cx: &mut RenderContext<'a>) -> Node<'a> {
157+ fn render(&self, _cx: &mut RenderContext<'a>) -> Node<'a> {
158 text(self.0)
158 text(self.0)
159 }
159 }
160}
160}
tests/web/events.rs+4−4
@@ -24,8 +24,8 @@ impl EventContainer {
24 }
24 }
25}
25}
26
26
27−impl Render for EventContainer {
27+impl<'a> Render<'a> for EventContainer {
28− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
28+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
29 use dodrio::builder::*;
29 use dodrio::builder::*;
30 div(&cx)
30 div(&cx)
31 .attr("id", "target")
31 .attr("id", "target")
@@ -126,8 +126,8 @@ impl ListensOnlyOnFirstRender {
126 }
126 }
127}
127}
128
128
129−impl Render for ListensOnlyOnFirstRender {
129+impl<'a> Render<'a> for ListensOnlyOnFirstRender {
130− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
130+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
131 use dodrio::builder::*;
131 use dodrio::builder::*;
132
132
133 let count = self.count.get();
133 let count = self.count.get();
tests/web/js_api.rs+2−2
@@ -35,8 +35,8 @@ impl WrapJs {
35 }
35 }
36}
36}
37
37
38−impl Render for WrapJs {
38+impl<'a> Render<'a> for WrapJs {
39− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
39+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
40 div(&cx)
40 div(&cx)
41 .attr("class", "wrap-js")
41 .attr("class", "wrap-js")
42 .children([self.inner.render(cx)])
42 .children([self.inner.render(cx)])
tests/web/keyed.rs+4−4
@@ -7,8 +7,8 @@ use wasm_bindgen_test::*;
7
7
8struct Keyed(u16);
8struct Keyed(u16);
9
9
10−impl Render for Keyed {
10+impl<'a> Render<'a> for Keyed {
11− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
11+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
12 let key = bumpalo::format!(in cx.bump, "{}", self.0).into_bump_str();
12 let key = bumpalo::format!(in cx.bump, "{}", self.0).into_bump_str();
13 div(&cx)
13 div(&cx)
14 .attr("class", "keyed")
14 .attr("class", "keyed")
@@ -33,8 +33,8 @@ where
33
33
34async fn assert_keyed<Before, After>(before: Before, after: After) -> Result<(), JsValue>
34async fn assert_keyed<Before, After>(before: Before, after: After) -> Result<(), JsValue>
35where
35where
36− Before: 'static + Render,
36+ Before: 'static + for<'a> Render<'a>,
37− After: 'static + Render,
37+ After: 'static + for<'a> Render<'a>,
38{
38{
39 #[wasm_bindgen(module = "/tests/web/keyed.js")]
39 #[wasm_bindgen(module = "/tests/web/keyed.js")]
40 extern "C" {
40 extern "C" {
tests/web/main.rs+6−6
@@ -50,7 +50,7 @@ pub fn init_logging() {
50
50
51/// Assert that the `container` contains the physical DOM tree that matches
51/// Assert that the `container` contains the physical DOM tree that matches
52/// `r`'s rendered virtual DOM.
52/// `r`'s rendered virtual DOM.
53−pub fn assert_rendered<R: Render>(container: &web_sys::Element, r: &R) {
53+pub fn assert_rendered<R: for<'a> Render<'a>>(container: &web_sys::Element, r: &R) {
54 init_logging();
54 init_logging();
55
55
56 let cached_set = &RefCell::new(CachedSet::default());
56 let cached_set = &RefCell::new(CachedSet::default());
@@ -155,11 +155,11 @@ pub struct RenderFn<F>(F)
155where
155where
156 F: for<'a> Fn(&mut RenderContext<'a>) -> Node<'a>;
156 F: for<'a> Fn(&mut RenderContext<'a>) -> Node<'a>;
157
157
158−impl<F> Render for RenderFn<F>
158+impl<'a, F> Render<'a> for RenderFn<F>
159where
159where
160− F: for<'a> Fn(&mut RenderContext<'a>) -> Node<'a>,
160+ F: for<'b> Fn(&mut RenderContext<'b>) -> Node<'b>,
161{
161{
162− fn render<'a>(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
162+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
163 (self.0)(cx)
163 (self.0)(cx)
164 }
164 }
165}
165}
@@ -169,8 +169,8 @@ where
169/// the physical DOM tree correctly matches `after`.
169/// the physical DOM tree correctly matches `after`.
170pub async fn assert_before_after<R, S>(before: R, after: S) -> Result<(), JsValue>
170pub async fn assert_before_after<R, S>(before: R, after: S) -> Result<(), JsValue>
171where
171where
172− R: 'static + Render,
172+ R: 'static + for<'a> Render<'a>,
173− S: 'static + Render,
173+ S: 'static + for<'a> Render<'a>,
174{
174{
175 let container = create_element("div");
175 let container = create_element("div");
176
176
tests/web/render.rs+89−1
@@ -1,6 +1,7 @@
1use super::{assert_rendered, before_after, create_element, RenderFn};
1use super::{assert_rendered, before_after, create_element, RenderFn};
2−use dodrio::{builder::*, Vdom};
2+use dodrio::{builder::*, bumpalo::collections::String, Node, Render, RenderContext, Vdom};
3use std::rc::Rc;
3use std::rc::Rc;
4+use wasm_bindgen::{ JsCast};
4use wasm_bindgen_test::*;
5use wasm_bindgen_test::*;
5
6
6#[wasm_bindgen_test]
7#[wasm_bindgen_test]
@@ -34,6 +35,93 @@ fn container_is_emptied_upon_drop() {
34 assert!(container.first_child().is_none());
35 assert!(container.first_child().is_none());
35}
36}
36
37
38+/// Renders a child with a lifetime scoped to the RenderContext bump arena.
39+#[wasm_bindgen_test]
40+fn render_bump_scoped_node() {
41+ struct Child<'a> {
42+ name: &'a str,
43+ }
44+
45+ impl<'a> Render<'a> for Child<'a> {
46+ fn render(&self, _cx: &mut RenderContext<'a>) -> Node<'a> {
47+ text(self.name)
48+ }
49+ }
50+
51+ struct Parent;
52+
53+ impl<'a> Render<'a> for Parent {
54+ fn render(&self, cx: &mut RenderContext<'a>) -> Node<'a> {
55+ let child_name = String::from_str_in("child", cx.bump).into_bump_str();
56+
57+ div(&cx)
58+ .children([Child { name: child_name }.render(cx)])
59+ .finish()
60+ }
61+ }
62+
63+ let parent = Rc::new(RenderFn(|cx| {
64+ Parent.render(cx)
65+ }));
66+
67+ let container = create_element("div");
68+ let _vdom = Vdom::new(&container, parent.clone());
69+
70+ assert_rendered(&container, &parent);
71+}
72+
73+/// Originally, dodrio would use the className property for SVGs.
74+///
75+/// This is problematic because when SVG elements are created, the className is flagged as a read
76+/// only property, so setting it causes an exception to be thrown. Here's an example of how this
77+/// happens:
78+///
79+/// let elem = web_sys::window()
80+/// .unwrap()
81+/// .document()
82+/// .unwrap()
83+/// .create_element_ns(Some("http://www.w3.org/2000/svg"), "svg")
84+/// .unwrap();
85+///
86+/// elem.set_class_name("does-not-work");
87+///
88+/// -----------------------------------------------------------------------------------------------
89+///
90+/// wasm-bindgen: imported JS function that was not marked as `catch` threw an error:
91+/// setting getter-only property "className"
92+///
93+/// -----------------------------------------------------------------------------------------------
94+///
95+/// Now, dodrio passes the 'class' attribute of all namespaced elements into set_attribute. This
96+/// satisfies the restrictions on SVG and keeps the optimized path for non-namespaced elements
97+#[wasm_bindgen_test(async)]
98+async fn test_svg_set_class() {
99+ let container = create_element("div");
100+
101+
102+ let valid_svg = Rc::new(RenderFn(|cx| {
103+ ElementBuilder::new(cx.bump, "svg")
104+ .namespace(Some("http://www.w3.org/2000/svg"))
105+ .attr("class", "works")
106+ .finish()
107+ }));
108+
109+ let vdom = Vdom::new(&container, valid_svg.clone());
110+ let weak = vdom.weak();
111+
112+ weak.render().await.unwrap();
113+
114+ assert_eq!(
115+ "works",
116+ container.first_child()
117+ .expect("unable to get svg")
118+ .dyn_ref::<web_sys::Element>()
119+ .expect("svg should be an element")
120+ .get_attribute("class")
121+ .expect("unable to get 'class' of svg")
122+ );
123+}
124+
37before_after! {
125before_after! {
38 same_text {
126 same_text {
39 before(_cx) {
127 before(_cx) {