From 908f91bb930c4af599991d76976f90dbf0a78811 Mon Sep 17 00:00:00 2001 From: mastfissh Date: Wed, 8 Apr 2020 12:51:20 +0200 Subject: [PATCH 01/17] wip on druid --- Cargo.lock | 1302 +++++++++++++++++++++++++++++++++---- Cargo.toml | 1 + src/lib.rs | 26 +- src/main.rs | 100 ++- tests/integration_test.rs | 8 +- 5 files changed, 1275 insertions(+), 162 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a499894..52d9db7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,27 +5,76 @@ name = "ansi_term" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "arrayvec" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "atk" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "atk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "atk-sys" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "atty" -version = "0.2.11" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", - "termion 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "autocfg" -version = "0.1.7" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "backtrace" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace-sys 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "bitflags" -version = "1.0.4" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -39,14 +88,57 @@ dependencies = [ "opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "boolinator" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bumpalo" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "byte-tools" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "cairo-rs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cc" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "cfg-if" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -64,52 +156,94 @@ version = "2.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "cocoa" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", + "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "core-foundation" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "core-graphics" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "crossbeam-deque" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crossbeam-epoch" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crossbeam-queue" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crossbeam-utils" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -128,8 +262,9 @@ dependencies = [ "blake2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "chashmap 2.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "druid 0.5.0 (git+https://github.com/xi-editor/druid.git?rev=47be1da)", "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "structopt 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -141,9 +276,170 @@ dependencies = [ "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "direct2d" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "directwrite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "dxgi 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "direct3d11" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "dxgi 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "directwrite" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "druid" +version = "0.5.0" +source = "git+https://github.com/xi-editor/druid.git?rev=47be1da#47be1da580bd074892f62406865cec609baa3c31" +dependencies = [ + "druid-derive 0.3.0 (git+https://github.com/xi-editor/druid.git?rev=47be1da)", + "druid-shell 0.5.0 (git+https://github.com/xi-editor/druid.git?rev=47be1da)", + "fluent-bundle 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fluent-langneg 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fluent-syntax 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "simple_logger 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unic-langid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "xi-unicode 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "druid-derive" +version = "0.3.0" +source = "git+https://github.com/xi-editor/druid.git?rev=47be1da#47be1da580bd074892f62406865cec609baa3c31" +dependencies = [ + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "druid-shell" +version = "0.5.0" +source = "git+https://github.com/xi-editor/druid.git?rev=47be1da#47be1da580bd074892f62406865cec609baa3c31" +dependencies = [ + "cairo-rs 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cocoa 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)", + "gdk 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gio 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gtk 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gtk-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "kurbo 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "piet-common 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "dxgi" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "boolinator 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "either" -version = "1.5.2" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "failure" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "failure_derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fluent-bundle" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "fluent-langneg 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fluent-syntax 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "intl_pluralrules 5.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rental 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unic-langid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fluent-langneg" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unic-langid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fluent-syntax" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -151,12 +447,238 @@ name = "fuchsia-cprng" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "futures-channel" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "futures-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures-executor" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "futures-io" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures-macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "futures-task" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures-util" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gdk" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cairo-rs 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "gdk-pixbuf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gio 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "pango 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gio 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gdk-sys" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "generic-array" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gio" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gio-sys" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "glib" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-executor 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "glib-sys" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gobject-sys" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gtk" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "atk 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cairo-rs 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", + "gdk 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gdk-pixbuf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gio 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gtk-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "pango 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gtk-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "atk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -164,17 +686,71 @@ name = "heck" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hermit-abi" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "intl_pluralrules" +version = "5.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "tinystr 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unic-langid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "js-sys" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kurbo" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "lazy_static" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" -version = "0.2.55" +version = "0.2.67" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "log" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "maybe-uninit" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -185,18 +761,93 @@ dependencies = [ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "num" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-bigint 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)", + "num-complex 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-bigint" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-complex" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-integer" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-iter" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-rational" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-bigint 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-traits" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "num_cpus" -version = "1.10.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "numtoa" -version = "0.1.0" +name = "objc" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "opaque-debug" @@ -211,6 +862,31 @@ dependencies = [ "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "pango" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pango-sys" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "parking_lot" version = "0.4.8" @@ -225,39 +901,120 @@ name = "parking_lot_core" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "piet" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kurbo 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "piet-cairo" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cairo-rs 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "piet 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "piet-common" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cairo-rs 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "direct2d 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "direct3d11 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "directwrite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "dxgi 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "piet 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)", + "piet-cairo 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)", + "piet-direct2d 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)", + "piet-web 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "piet-direct2d" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "piet 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "piet-web" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", + "piet 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "web-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pin-utils" +version = "0.1.0-alpha.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "pkg-config" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "proc-macro-error" -version = "0.4.4" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro-error-attr 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustversion 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-error-attr 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "proc-macro-error-attr" -version = "0.4.3" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "syn-mid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustversion 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "syn-mid 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "proc-macro-nested" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "proc-macro2" -version = "1.0.2" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -265,10 +1022,10 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -277,10 +1034,10 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -288,12 +1045,12 @@ name = "rand_core" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand_core" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -301,8 +1058,8 @@ name = "rayon" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -311,11 +1068,11 @@ name = "rayon-core" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -327,18 +1084,34 @@ dependencies = [ ] [[package]] -name = "redox_syscall" -version = "0.1.54" +name = "rental" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rental-impl 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] -name = "redox_termios" -version = "0.1.1" +name = "rental-impl" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "rustc-demangle" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rustc-serialize" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "rustc_version" version = "0.2.3" @@ -349,25 +1122,25 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "same-file" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "scopeguard" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -383,9 +1156,32 @@ name = "semver-parser" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "simple_logger" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "smallvec" -version = "0.6.10" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "smallvec" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -400,23 +1196,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "structopt" -version = "0.3.7" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "structopt-derive 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt-derive 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "structopt-derive" -version = "0.4.0" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-error 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-error 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -426,33 +1223,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "syn" -version = "1.0.5" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "syn-mid" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "termion" -version = "1.5.2" +name = "synstructure" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", - "numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -460,22 +1257,74 @@ name = "textwrap" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "time" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "rustversion 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "time-macros 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "time-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", + "time-macros-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "time-macros-impl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tinystr" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "typenum" -version = "1.10.0" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "unic-langid" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unic-langid-impl 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unic-langid-impl" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "tinystr 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "unicode-segmentation" -version = "1.3.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "unicode-width" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -488,19 +1337,82 @@ name = "vec_map" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "version_check" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "walkdir" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-macro 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bumpalo 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-shared 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-macro-support 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-backend 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-shared 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.59" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "web-sys" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "winapi" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -514,10 +1426,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "winapi-util" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -525,70 +1437,176 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "wio" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "xi-unicode" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [metadata] "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" -"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" -"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" -"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +"checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" +"checksum atk 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "444daefa55f229af145ea58d77efd23725024ee1f6f3102743709aa6b18c663e" +"checksum atk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e552c1776737a4c80110d06b36d099f47c727335f9aaa5d942a72b6863a8ec6f" +"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" +"checksum backtrace 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)" = "ad235dabf00f36301792cfe82499880ba54c6486be094d1047b02bacb67c14e8" +"checksum backtrace-sys 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "ca797db0057bae1a7aa2eef3283a874695455cecf08a43bfb8507ee0ebc1ed69" +"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" "checksum blake2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" +"checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" +"checksum boolinator 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9" +"checksum bumpalo 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1f359dc14ff8911330a51ef78022d376f25ed00248912803b58f00cb1c27f742" "checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" -"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" +"checksum cairo-rs 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "157049ba9618aa3a61c39d5d785102c04d3b1f40632a706c621a9aedc21e6084" +"checksum cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ff65ba02cac715be836f63429ab00a767d48336efc5497c5637afb53b4f14d63" +"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" +"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" "checksum chashmap 2.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ff41a3c2c1e39921b9003de14bf0439c7b63a9039637c291e1a64925d8ddfa45" "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" -"checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca" -"checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac" -"checksum crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfd6515864a82d2f877b42813d4553292c6659498c9a2aa31bab5a15243c2700" -"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" +"checksum cocoa 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a4736c86d51bd878b474400d9ec888156f4037015f5d09794fab9f26eab1ad4" +"checksum core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +"checksum core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" +"checksum core-graphics 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "59e78b2e0aaf43f08e7ae0d6bc96895ef72ff0921c7d4ff4762201b2dba376dd" +"checksum crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" +"checksum crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" +"checksum crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" +"checksum crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" "checksum crypto-mac 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" "checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -"checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" +"checksum direct2d 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7fa6ff10857eb253d1ae16987ebfd27372f4129b0c7a3fa41466fbdf7e453e75" +"checksum direct3d11 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "315aa929e68ba066cb6fb86f1b22af24f517e02fd9b5734c4d07e42cb9f4aefa" +"checksum directwrite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8cdcd739e9351c411b8caf5cab32a27c818cfe06260595da121382ecdd22083d" +"checksum druid 0.5.0 (git+https://github.com/xi-editor/druid.git?rev=47be1da)" = "" +"checksum druid-derive 0.3.0 (git+https://github.com/xi-editor/druid.git?rev=47be1da)" = "" +"checksum druid-shell 0.5.0 (git+https://github.com/xi-editor/druid.git?rev=47be1da)" = "" +"checksum dxgi 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1639bbfd6765e92a40267d217a7acbac5b49320b68013f39a8e4376aa8c1e091" +"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" +"checksum failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b" +"checksum failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231" +"checksum fluent-bundle 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cb733f6cedee059a77da074a14d1d855f3c7a04de18164b181ba2aa82221e281" +"checksum fluent-langneg 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "55e840a3a9938e6dd9a57a6a3be02bef1d51b1d75b883cdfe84810c7e7ca1293" +"checksum fluent-syntax 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ac0f7e83d14cccbf26e165d8881dcac5891af0d85a88543c09dd72ebd31d91ba" +"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +"checksum futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c77d04ce8edd9cb903932b608268b3fffec4163dc053b3b402bf47eac1f1a8" +"checksum futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a" +"checksum futures-executor 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f674f3e1bcb15b37284a90cedf55afdba482ab061c407a9c0ebbd0f3109741ba" +"checksum futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6" +"checksum futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" +"checksum futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27" +"checksum futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" +"checksum gdk 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fbe5e8772fc0865c52460cdd7a59d7d47700f44d9809d1dd00eecceb769a7589" +"checksum gdk-pixbuf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e248220c46b329b097d4b158d2717f8c688f16dd76d0399ace82b3e98062bdd7" +"checksum gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d8991b060a9e9161bafd09bf4a202e6fd404f5b4dd1a08d53a1e84256fb34ab0" +"checksum gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6adf679e91d1bff0c06860287f80403e7db54c2d2424dce0a470023b56c88fbb" "checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" +"checksum gio 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0cd10f9415cce39b53f8024bf39a21f84f8157afa52da53837b102e585a296a5" +"checksum gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4fad225242b9eae7ec8a063bb86974aca56885014672375e5775dc0ea3533911" +"checksum glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "40fb573a09841b6386ddf15fd4bc6655b4f5b106ca962f57ecaecde32a0061c0" +"checksum glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "95856f3802f446c05feffa5e24859fe6a183a7cb849c8449afc35c86b1e316e2" +"checksum gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31d1a804f62034eccf370006ccaef3708a71c31d561fee88564abe71177553d9" +"checksum gtk 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "87e1e8d70290239c668594002d1b174fcc7d7ef5d26670ee141490ede8facf8f" +"checksum gtk-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53def660c7b48b00b510c81ef2d2fbd3c570f1527081d8d7947f471513e1a4c1" "checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" -"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" -"checksum libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)" = "42914d39aad277d9e176efbdad68acb1d5443ab65afe0e0e4f0d49352a950880" +"checksum hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1010591b26bbfe835e9faeabeb11866061cc7dcebffd56ad7d0942d0e61aefd8" +"checksum intl_pluralrules 5.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "752ecba25a0554836d7921e383ba5c78ffea6e4825cc70dac75e2ab8e43af1be" +"checksum js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)" = "1cb931d43e71f560c81badb0191596562bafad2be06a3f9025b845c847c60df5" +"checksum kurbo 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "bf50e17a1697110c694d47c5b1a6b64faf5eb3ffe5a286df23fb8cd516e33be6" +"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +"checksum libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)" = "eb147597cdf94ed43ab7a9038716637d2d1bf2bc571da995d0028dec06bd3018" +"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" +"checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" "checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" -"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" -"checksum numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef" +"checksum num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e" +"checksum num-bigint 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)" = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1" +"checksum num-complex 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656" +"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" +"checksum num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00" +"checksum num-rational 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e" +"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" +"checksum num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6" +"checksum objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" "checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" +"checksum pango 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9c6b728f1be8edb5f9f981420b651d5ea30bdb9de89f1f1262d0084a020577" +"checksum pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "86b93d84907b3cf0819bff8f13598ba72843bee579d5ebc2502e4b0367b4be7d" "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" "checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" -"checksum proc-macro-error 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "53c98547ceaea14eeb26fcadf51dc70d01a2479a7839170eae133721105e4428" -"checksum proc-macro-error-attr 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c2bf5d493cf5d3e296beccfd61794e445e830dfc8070a9c248ad3ee071392c6c" -"checksum proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "175a40b9cf564ce9bf050654633dbf339978706b8ead1a907bb970b63185dd95" -"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" +"checksum piet 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "cc12ec839fb1931dadee762476260c068fd989d60c366dc6a0228a242c857f82" +"checksum piet-cairo 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "fcc6ff3b4e078df5b4904b6e19efedca4142b896383ffcc53660825eb9d8191e" +"checksum piet-common 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "a4b532cd554b18c1931b9ca23ea6de342eb4f65cfe2288bdb1dc408ea765f6cc" +"checksum piet-direct2d 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "bc87144e7af30fb0b40919e03f242309b71a063f564e68b8e36cd39ff198d6f7" +"checksum piet-web 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "326c17c8d48d513b42e3b9531571c6c42785e1473b7154813b76c20c902d808d" +"checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" +"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" +"checksum proc-macro-error 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e7959c6467d962050d639361f7703b2051c43036d03493c36f01d440fdd3138a" +"checksum proc-macro-error-attr 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e4002d9f55991d5e019fb940a90e1a95eb80c24e77cb2462dd4dc869604d543a" +"checksum proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5" +"checksum proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e" +"checksum proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435" +"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" "checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" +"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" "checksum rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098" "checksum rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9" "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -"checksum redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)" = "12229c14a0f65c4f1cb046a3b52047cdd9da1f4b30f8a39c5063c8bae515e252" -"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" +"checksum rental 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "8545debe98b2b139fb04cad8618b530e9b07c152d99a5de83c860b877d67847f" +"checksum rental-impl 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "475e68978dc5b743f2f40d8e0a8fdc83f1c5e78cbf4b8fa5e74e73beebc340de" +"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" +"checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum rustversion 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3a0538bd897e17257b0128d2fd95c2ed6df939374073a36166051a79e2eb7986" -"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" -"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" +"checksum rustversion 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b3bba175698996010c4f6dce5e7f173b6eb781fce25d2cfc45e27091ce0b79f6" +"checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +"checksum scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ab606a9c5e214920bb66c458cd7be8ef094f813f20fe77a54cc7dbfff220d4b7" +"checksum simple_logger 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fea0c4611f32f4c2bac73754f22dca1f57e6c1945e0590dae4e5f2a077b92367" +"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +"checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" +"checksum smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5c2fb2ec9bcd216a5b0d0ccf31ab17b5ed1d627960edff65bbe95d3ce221cefc" "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" -"checksum structopt 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "884ae79d6aad1e738f4a70dff314203fd498490a63ebc4d03ea83323c40b7b72" -"checksum structopt-derive 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a97f829a34a0a9d5b353a881025a23b8c9fd09d46be6045df6b22920dbd7a93" +"checksum structopt 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe43617218c0805c6eb37160119dc3c548110a67786da7218d1c6555212f073" +"checksum structopt-derive 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c6e79c80e0f4efd86ca960218d4e056249be189ff1c42824dcd9a7f51a56f0bd" "checksum subtle 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" -"checksum syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf" -"checksum syn-mid 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9fd3937748a7eccff61ba5b90af1a20dbf610858923a9192ea0ecb0cb77db1d0" -"checksum termion 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dde0593aeb8d47accea5392b39350015b5eccb12c0d98044d856983d89548dea" +"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03" +"checksum syn-mid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" +"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" -"checksum unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1967f4cdfc355b37fd76d2a954fb2ed3871034eb4f26d60537d88795cfc332a9" -"checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" +"checksum time 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "3043ac959c44dccc548a57417876c8fe241502aed69d880efc91166c02717a93" +"checksum time-macros 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9ae9b6e9f095bc105e183e3cd493d72579be3181ad4004fceb01adbe9eecab2d" +"checksum time-macros-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e987cfe0537f575b5fc99909de6185f6c19c3ad8889e2275e686a873d0869ba1" +"checksum tinystr 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4bac79c4b51eda1b090b1edebfb667821bbb51f713855164dc7cec2cb8ac2ba3" +"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" +"checksum unic-langid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7935b530ca240640bf8dd67d04301a3ed02bfc8635105fea9e9a26477143ca22" +"checksum unic-langid-impl 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "86ab4a5be993d5b9d082476a7dd7149c083cf63a72469e700c09e69784511957" +"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" +"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" +"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" "checksum walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" -"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" +"checksum wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "3557c397ab5a8e347d434782bcd31fc1483d927a6826804cec05cc792ee2519d" +"checksum wasm-bindgen-backend 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "e0da9c9a19850d3af6df1cb9574970b566d617ecfaf36eb0b706b6f3ef9bd2f8" +"checksum wasm-bindgen-macro 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "0f6fde1d36e75a714b5fe0cffbb78978f222ea6baebb726af13c78869fdb4205" +"checksum wasm-bindgen-macro-support 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "25bda4168030a6412ea8a047e27238cadf56f0e53516e1e83fec0a8b7c786f6d" +"checksum wasm-bindgen-shared 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "fc9f36ad51f25b0219a3d4d13b90eb44cd075dff8b6280cca015775d7acaddd8" +"checksum web-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)" = "721c6263e2c66fd44501cc5efbfa2b7dfa775d13e4ea38c46299646ed1f9c70a" +"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" +"checksum winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4ccfbf554c6ad11084fb7517daca16cfdcaccbdadba4fc336f032a8b12c2ad80" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" +"checksum xi-unicode 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7395cdb9d0a6219fa0ea77d08c946adf9c1984c72fcd443ace30365f3daadef7" diff --git a/Cargo.toml b/Cargo.toml index c91534a..5e009cd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ digest = { version = "0.8.1", features = ["std"]} rayon = "1.3" chashmap = "2.2" structopt = "0.3" +druid = { git = "https://github.com/xi-editor/druid.git", rev = "47be1da", version = "0.5" } [lib] name = "dupelib" diff --git a/src/lib.rs b/src/lib.rs index 66e4fa3..ac9607c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -121,20 +121,22 @@ fn cull_by_hash(input: CHashMap) -> Vec<(PathBuf, PathBuf, u64)> { .collect::>(); } -fn format_results(input: &Vec<(PathBuf, PathBuf, u64)>) -> String { +fn format_results(input: &Vec<(PathBuf, PathBuf, u64)>) -> Vec { input .par_iter() .map(|item| { let (dupe1, dupe2, bytes_count) = item; - format!("{}: {} | {} \n", bytes_count, dupe1.display(), dupe2.display()) - }) - .reduce(String::new, |mut start, item| { - start.push_str(&item); - start + format!( + "{}: {} | {} \n", + bytes_count, + dupe1.display(), + dupe2.display() + ) }) + .collect::>() } -pub fn detect_dupes(options: Opt) -> usize { +pub fn detect_dupes(options: Opt) -> Vec { let now = Instant::now(); let paths = walk_dirs(options.paths); if options.debug { @@ -160,16 +162,14 @@ pub fn detect_dupes(options: Opt) -> usize { }); } - let output_string = format_results(&confirmed_dupes); + let output_strings = format_results(&confirmed_dupes); if let Some(path) = options.output { - let mut f = File::create(path).unwrap(); - f.write_all(output_string.as_bytes()).unwrap(); - } else { - println!("{}", output_string); + // let mut f = File::create(path).unwrap(); + // f.write_all(output_strings.join("")?).as_bytes().unwrap(); } if options.timing { print_timing_info(now); } - return confirmed_dupes.len(); + return output_strings; } diff --git a/src/main.rs b/src/main.rs index 86e115c..686f7c0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,8 +2,102 @@ use structopt::StructOpt; extern crate dupelib; +use std::any::Any; + +use druid::widget::{Align, Button, Flex, Label, Padding, WidgetExt}; +use druid::{AppLauncher, Widget, WindowDesc}; + + +use druid::kurbo::Point; + +use druid::commands; +use druid::platform_menus; +use druid::{ + Command, Data, FileDialogOptions, FileSpec, LocalizedString, MenuDesc, MenuItem, SysMods, +}; + + +use std::sync::Arc; + +use druid::{ + AppDelegate, Command, DelegateCtx, Env, FileInfo, LocalizedString, Selector, Target, Widget, + WindowDesc, WindowId, +}; + +use druid::kurbo::Size; +use druid::lens::LensExt; +use druid::widget::WidgetExt; +use norad::{GlyphName, Ufo}; + +#[derive(Debug, Default)] +pub struct Delegate; + +impl AppDelegate for Delegate { + fn command( + &mut self, + ctx: &mut DelegateCtx, + _target: &Target, + cmd: &Command, + data: &mut AppState, + _env: &Env, + ) -> bool { + match cmd.selector { + druid::commands::OPEN_FILE => { + let info = cmd.get_object::().expect("api violation"); + dbg!(info); + false + } + + _ => true, + } + } + +} + + fn main() { - let options = dupelib::Opt::from_args(); - let dupe_count = dupelib::detect_dupes(options); - println!("{} dupes detected", dupe_count); + let main_window = WindowDesc::new(ui_builder) + .title(LocalizedString::new("Dupe Detector")) + .menu(make_menu()); + let data = 0_u32; + AppLauncher::with_window(main_window) + .use_simple_logger() + .launch(data) + .expect("launch failed"); +} + +fn ui_builder() -> impl Widget { + // The label text will be computed dynamically based on the current locale and count + let text = + LocalizedString::new("hello-counter").with_arg("count", |data: &u32, _env| (*data).into()); + let label = Label::new(text) + .padding(5.0) + .center(); + + Flex::column() + .with_child(label) } + + +fn make_menu() -> MenuDesc { + let mut menu = MenuDesc::empty(); + + menu.append(file_menu()) +} + +fn file_menu() -> MenuDesc { + MenuDesc::new(LocalizedString::new("common-menu-file-menu")) + .append(platform_menus::mac::file::new_file().disabled()) + .append( + MenuItem::new( + LocalizedString::new("common-menu-file-open"), + Command::new( + commands::SHOW_OPEN_PANEL, + FileDialogOptions::new().select_directories().multi_selection(), + ), + ) + .hotkey(SysMods::Cmd, "o"), + ) + .append_separator() + .append(platform_menus::mac::file::close()) +} \ No newline at end of file diff --git a/tests/integration_test.rs b/tests/integration_test.rs index fef2b52..2712536 100644 --- a/tests/integration_test.rs +++ b/tests/integration_test.rs @@ -13,7 +13,7 @@ fn test_case_dir(case: &str) -> PathBuf { #[test] fn test_base_case() { let options = Default::default(); - assert_eq!(dupelib::detect_dupes(options), 0); + assert_eq!(dupelib::detect_dupes(options).len(), 0); } #[test] @@ -23,7 +23,7 @@ fn test_one_file() { paths: vec![path], ..Default::default() }; - assert_eq!(dupelib::detect_dupes(options), 0); + assert_eq!(dupelib::detect_dupes(options).len(), 0); } #[test] @@ -33,7 +33,7 @@ fn test_ident_files() { paths: vec![path], ..Default::default() }; - assert_eq!(dupelib::detect_dupes(options), 2); + assert_eq!(dupelib::detect_dupes(options).len(), 2); } #[test] @@ -44,5 +44,5 @@ fn test_ident_files_minimum() { minimum: Some(2), ..Default::default() }; - assert_eq!(dupelib::detect_dupes(options), 1); + assert_eq!(dupelib::detect_dupes(options).len(), 1); } From 5292d4de0ed29bb8f9dc714fe984d9723a9afa91 Mon Sep 17 00:00:00 2001 From: mastfissh Date: Wed, 8 Apr 2020 12:59:59 +0200 Subject: [PATCH 02/17] Fix imports --- src/lib.rs | 4 ++-- src/main.rs | 14 ++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index ac9607c..dad192d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,7 +10,7 @@ use chashmap::CHashMap; use rayon::prelude::*; use std::error::Error; use std::fs::File; -use std::io::prelude::*; + use std::path::PathBuf; use std::time::Instant; use std::{fs, io}; @@ -164,7 +164,7 @@ pub fn detect_dupes(options: Opt) -> Vec { let output_strings = format_results(&confirmed_dupes); - if let Some(path) = options.output { + if let Some(_path) = options.output { // let mut f = File::create(path).unwrap(); // f.write_all(output_strings.join("")?).as_bytes().unwrap(); } diff --git a/src/main.rs b/src/main.rs index 686f7c0..3979a99 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,24 +14,24 @@ use druid::commands; use druid::platform_menus; use druid::{ Command, Data, FileDialogOptions, FileSpec, LocalizedString, MenuDesc, MenuItem, SysMods, + AppDelegate, DelegateCtx, Env, FileInfo, Selector, Target, WindowId, Lens }; use std::sync::Arc; -use druid::{ - AppDelegate, Command, DelegateCtx, Env, FileInfo, LocalizedString, Selector, Target, Widget, - WindowDesc, WindowId, -}; use druid::kurbo::Size; use druid::lens::LensExt; -use druid::widget::WidgetExt; -use norad::{GlyphName, Ufo}; #[derive(Debug, Default)] pub struct Delegate; +#[derive(Clone, Data, Default, Lens)] +pub struct AppState { + // pub workspace: Workspace, +} + impl AppDelegate for Delegate { fn command( &mut self, @@ -41,6 +41,7 @@ impl AppDelegate for Delegate { data: &mut AppState, _env: &Env, ) -> bool { + dbg!(cmd); match cmd.selector { druid::commands::OPEN_FILE => { let info = cmd.get_object::().expect("api violation"); @@ -60,6 +61,7 @@ fn main() { .title(LocalizedString::new("Dupe Detector")) .menu(make_menu()); let data = 0_u32; + dbg!("test"); AppLauncher::with_window(main_window) .use_simple_logger() .launch(data) From 28287667249f067aa183b7ac8565f61412ad0599 Mon Sep 17 00:00:00 2001 From: mastfissh Date: Wed, 8 Apr 2020 13:00:33 +0200 Subject: [PATCH 03/17] Fixes --- src/main.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index 3979a99..374972d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,14 +1,14 @@ -use structopt::StructOpt; + extern crate dupelib; -use std::any::Any; + use druid::widget::{Align, Button, Flex, Label, Padding, WidgetExt}; use druid::{AppLauncher, Widget, WindowDesc}; -use druid::kurbo::Point; + use druid::commands; use druid::platform_menus; @@ -18,11 +18,11 @@ use druid::{ }; -use std::sync::Arc; -use druid::kurbo::Size; -use druid::lens::LensExt; + + + #[derive(Debug, Default)] pub struct Delegate; @@ -35,10 +35,10 @@ pub struct AppState { impl AppDelegate for Delegate { fn command( &mut self, - ctx: &mut DelegateCtx, + _ctx: &mut DelegateCtx, _target: &Target, cmd: &Command, - data: &mut AppState, + _data: &mut AppState, _env: &Env, ) -> bool { dbg!(cmd); @@ -82,7 +82,7 @@ fn ui_builder() -> impl Widget { fn make_menu() -> MenuDesc { - let mut menu = MenuDesc::empty(); + let menu = MenuDesc::empty(); menu.append(file_menu()) } From 7f5adf3742f16ae41285a56e4c020bd7d46e4c01 Mon Sep 17 00:00:00 2001 From: mastfissh Date: Wed, 8 Apr 2020 13:32:22 +0200 Subject: [PATCH 04/17] work on events --- src/main.rs | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/main.rs b/src/main.rs index 374972d..811b731 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,7 +14,7 @@ use druid::commands; use druid::platform_menus; use druid::{ Command, Data, FileDialogOptions, FileSpec, LocalizedString, MenuDesc, MenuItem, SysMods, - AppDelegate, DelegateCtx, Env, FileInfo, Selector, Target, WindowId, Lens + AppDelegate, DelegateCtx, Env, FileInfo, Selector, Target, WindowId, Lens, Event }; @@ -53,6 +53,18 @@ impl AppDelegate for Delegate { } } + fn event( + &mut self, + ctx: &mut DelegateCtx, + window_id: WindowId, + event: Event, + data: &mut AppState, + env: &Env + ) -> Option { + dbg!(event); + None + } + } @@ -60,7 +72,7 @@ fn main() { let main_window = WindowDesc::new(ui_builder) .title(LocalizedString::new("Dupe Detector")) .menu(make_menu()); - let data = 0_u32; + let data = AppState {}; dbg!("test"); AppLauncher::with_window(main_window) .use_simple_logger() @@ -68,26 +80,18 @@ fn main() { .expect("launch failed"); } -fn ui_builder() -> impl Widget { - // The label text will be computed dynamically based on the current locale and count - let text = - LocalizedString::new("hello-counter").with_arg("count", |data: &u32, _env| (*data).into()); - let label = Label::new(text) - .padding(5.0) - .center(); - +fn ui_builder() -> impl Widget { Flex::column() - .with_child(label) } -fn make_menu() -> MenuDesc { +fn make_menu() -> MenuDesc { let menu = MenuDesc::empty(); menu.append(file_menu()) } -fn file_menu() -> MenuDesc { +fn file_menu() -> MenuDesc { MenuDesc::new(LocalizedString::new("common-menu-file-menu")) .append(platform_menus::mac::file::new_file().disabled()) .append( From 61259c17e990594ff46073854dc1c6d59011ff8c Mon Sep 17 00:00:00 2001 From: mastfissh Date: Wed, 8 Apr 2020 13:39:19 +0200 Subject: [PATCH 05/17] more cleanup --- src/main.rs | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/src/main.rs b/src/main.rs index 811b731..dbf7de3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,29 +1,15 @@ - - extern crate dupelib; - - use druid::widget::{Align, Button, Flex, Label, Padding, WidgetExt}; use druid::{AppLauncher, Widget, WindowDesc}; - - - use druid::commands; use druid::platform_menus; use druid::{ - Command, Data, FileDialogOptions, FileSpec, LocalizedString, MenuDesc, MenuItem, SysMods, - AppDelegate, DelegateCtx, Env, FileInfo, Selector, Target, WindowId, Lens, Event + AppDelegate, Command, Data, DelegateCtx, Env, Event, FileDialogOptions, FileInfo, FileSpec, + Lens, LocalizedString, MenuDesc, MenuItem, Selector, SysMods, Target, WindowId, }; - - - - - - - #[derive(Debug, Default)] pub struct Delegate; @@ -55,36 +41,34 @@ impl AppDelegate for Delegate { fn event( &mut self, - ctx: &mut DelegateCtx, - window_id: WindowId, + _ctx: &mut DelegateCtx, + _window_id: WindowId, event: Event, - data: &mut AppState, - env: &Env + _data: &mut AppState, + _env: &Env, ) -> Option { dbg!(event); None } - } - fn main() { let main_window = WindowDesc::new(ui_builder) .title(LocalizedString::new("Dupe Detector")) .menu(make_menu()); - let data = AppState {}; + let data = AppState {}; dbg!("test"); AppLauncher::with_window(main_window) .use_simple_logger() .launch(data) .expect("launch failed"); + dbg!("test2"); } fn ui_builder() -> impl Widget { Flex::column() } - fn make_menu() -> MenuDesc { let menu = MenuDesc::empty(); @@ -99,11 +83,13 @@ fn file_menu() -> MenuDesc { LocalizedString::new("common-menu-file-open"), Command::new( commands::SHOW_OPEN_PANEL, - FileDialogOptions::new().select_directories().multi_selection(), + FileDialogOptions::new() + .select_directories() + .multi_selection(), ), ) .hotkey(SysMods::Cmd, "o"), ) .append_separator() .append(platform_menus::mac::file::close()) -} \ No newline at end of file +} From c5fcef376e1f2c4670185be061e27b34a0bf485e Mon Sep 17 00:00:00 2001 From: mastfissh Date: Wed, 8 Apr 2020 14:35:55 +0200 Subject: [PATCH 06/17] working updates --- src/main.rs | 71 ++++++++++++++++++++++++----------------------------- 1 file changed, 32 insertions(+), 39 deletions(-) diff --git a/src/main.rs b/src/main.rs index dbf7de3..2bfc94c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,72 +1,65 @@ extern crate dupelib; -use druid::widget::{Align, Button, Flex, Label, Padding, WidgetExt}; -use druid::{AppLauncher, Widget, WindowDesc}; - use druid::commands; use druid::platform_menus; +use druid::widget::prelude::*; +use druid::widget::{Align, Button, Flex, Label, Padding, WidgetExt}; use druid::{ - AppDelegate, Command, Data, DelegateCtx, Env, Event, FileDialogOptions, FileInfo, FileSpec, - Lens, LocalizedString, MenuDesc, MenuItem, Selector, SysMods, Target, WindowId, + AppDelegate, BoxConstraints, Command, Data, DelegateCtx, Env, Event, FileDialogOptions, + FileInfo, FileSpec, LayoutCtx, Lens, LifeCycle, LocalizedString, MenuDesc, MenuItem, PaintCtx, + Selector, Size, SysMods, Target, WindowId, }; +use druid::{AppLauncher, Widget, WindowDesc}; #[derive(Debug, Default)] pub struct Delegate; -#[derive(Clone, Data, Default, Lens)] +#[derive(Clone, Data, Default, Lens, Copy)] pub struct AppState { // pub workspace: Workspace, } -impl AppDelegate for Delegate { - fn command( +impl Widget for AppState { + fn event(&mut self, ctx: &mut EventCtx, event: &Event, _data: &mut AppState, _env: &Env) { + dbg!(event); + } + + fn lifecycle( &mut self, - _ctx: &mut DelegateCtx, - _target: &Target, - cmd: &Command, - _data: &mut AppState, + ctx: &mut LifeCycleCtx, + event: &LifeCycle, + _data: &AppState, _env: &Env, - ) -> bool { - dbg!(cmd); - match cmd.selector { - druid::commands::OPEN_FILE => { - let info = cmd.get_object::().expect("api violation"); - dbg!(info); - false - } + ) { + dbg!(event); + } - _ => true, - } + fn update(&mut self, _ctx: &mut UpdateCtx, _old_data: &AppState, _data: &AppState, _env: &Env) { + dbg!("t"); } - fn event( + fn layout( &mut self, - _ctx: &mut DelegateCtx, - _window_id: WindowId, - event: Event, - _data: &mut AppState, + _layout_ctx: &mut LayoutCtx, + bc: &BoxConstraints, + _data: &AppState, _env: &Env, - ) -> Option { - dbg!(event); - None + ) -> Size { + bc.constrain((900.0, 900.0)) } + + fn paint(&mut self, ctx: &mut PaintCtx, _data: &AppState, _env: &Env) {} } fn main() { - let main_window = WindowDesc::new(ui_builder) + let main_window = WindowDesc::new(|| AppState {}) .title(LocalizedString::new("Dupe Detector")) .menu(make_menu()); - let data = AppState {}; - dbg!("test"); + AppLauncher::with_window(main_window) .use_simple_logger() - .launch(data) + .launch(AppState {}) .expect("launch failed"); - dbg!("test2"); -} - -fn ui_builder() -> impl Widget { - Flex::column() } fn make_menu() -> MenuDesc { From 3454f9bf79fb138ecf48c6805f7a5cbffe3b0d22 Mon Sep 17 00:00:00 2001 From: mastfissh Date: Wed, 8 Apr 2020 14:36:13 +0200 Subject: [PATCH 07/17] cargo fix --- src/main.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 2bfc94c..360527b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,7 @@ extern crate dupelib; use druid::commands; use druid::platform_menus; use druid::widget::prelude::*; -use druid::widget::{Align, Button, Flex, Label, Padding, WidgetExt}; + use druid::{ AppDelegate, BoxConstraints, Command, Data, DelegateCtx, Env, Event, FileDialogOptions, FileInfo, FileSpec, LayoutCtx, Lens, LifeCycle, LocalizedString, MenuDesc, MenuItem, PaintCtx, @@ -20,13 +20,13 @@ pub struct AppState { } impl Widget for AppState { - fn event(&mut self, ctx: &mut EventCtx, event: &Event, _data: &mut AppState, _env: &Env) { + fn event(&mut self, _ctx: &mut EventCtx, event: &Event, _data: &mut AppState, _env: &Env) { dbg!(event); } fn lifecycle( &mut self, - ctx: &mut LifeCycleCtx, + _ctx: &mut LifeCycleCtx, event: &LifeCycle, _data: &AppState, _env: &Env, @@ -48,7 +48,7 @@ impl Widget for AppState { bc.constrain((900.0, 900.0)) } - fn paint(&mut self, ctx: &mut PaintCtx, _data: &AppState, _env: &Env) {} + fn paint(&mut self, _ctx: &mut PaintCtx, _data: &AppState, _env: &Env) {} } fn main() { From 7aff58323ce7d24abdf31794f215303723ce8c66 Mon Sep 17 00:00:00 2001 From: mastfissh Date: Wed, 8 Apr 2020 14:37:27 +0200 Subject: [PATCH 08/17] Fix warns --- src/main.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 360527b..b3584c7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,9 +5,9 @@ use druid::platform_menus; use druid::widget::prelude::*; use druid::{ - AppDelegate, BoxConstraints, Command, Data, DelegateCtx, Env, Event, FileDialogOptions, - FileInfo, FileSpec, LayoutCtx, Lens, LifeCycle, LocalizedString, MenuDesc, MenuItem, PaintCtx, - Selector, Size, SysMods, Target, WindowId, + BoxConstraints, Command, Data, Env, Event, FileDialogOptions, + LayoutCtx, Lens, LifeCycle, LocalizedString, MenuDesc, MenuItem, PaintCtx, + Size, SysMods, }; use druid::{AppLauncher, Widget, WindowDesc}; From f06514e4864c31ee9afab9e7d2d3d3725d1a92e3 Mon Sep 17 00:00:00 2001 From: mastfissh Date: Thu, 9 Apr 2020 13:45:35 +0200 Subject: [PATCH 09/17] Save paths selected --- src/main.rs | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/main.rs b/src/main.rs index b3584c7..287ce12 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,24 +4,34 @@ use druid::commands; use druid::platform_menus; use druid::widget::prelude::*; +use druid::{AppLauncher, Widget, WindowDesc}; use druid::{ - BoxConstraints, Command, Data, Env, Event, FileDialogOptions, - LayoutCtx, Lens, LifeCycle, LocalizedString, MenuDesc, MenuItem, PaintCtx, - Size, SysMods, + BoxConstraints, Command, Data, Env, Event, FileDialogOptions, LayoutCtx, Lens, LifeCycle, + LocalizedString, MenuDesc, MenuItem, PaintCtx, Size, SysMods, FileInfo }; -use druid::{AppLauncher, Widget, WindowDesc}; -#[derive(Debug, Default)] -pub struct Delegate; +use std::path::PathBuf; +use std::sync::{Arc, Mutex}; -#[derive(Clone, Data, Default, Lens, Copy)] +#[derive(Clone, Data, Default, Lens)] pub struct AppState { - // pub workspace: Workspace, + pub paths: Arc>> } impl Widget for AppState { - fn event(&mut self, _ctx: &mut EventCtx, event: &Event, _data: &mut AppState, _env: &Env) { - dbg!(event); + fn event(&mut self, _ctx: &mut EventCtx, event: &Event, data: &mut AppState, _env: &Env) { + match event { + Event::Command(cmd) => match cmd.selector { + druid::commands::OPEN_FILE => { + let info = cmd.get_object::().expect("api violation"); + let pathbuf = info.path().clone().to_path_buf(); + data.paths.try_lock().unwrap().push(pathbuf); + // dbg!(&data.paths); + } + _ => {} + }, + _ => {} + } } fn lifecycle( @@ -52,13 +62,13 @@ impl Widget for AppState { } fn main() { - let main_window = WindowDesc::new(|| AppState {}) + let main_window = WindowDesc::new(|| AppState::default()) .title(LocalizedString::new("Dupe Detector")) .menu(make_menu()); AppLauncher::with_window(main_window) .use_simple_logger() - .launch(AppState {}) + .launch(AppState::default()) .expect("launch failed"); } From fc4a70bea0ab9dacbc90da28137502a6611ced91 Mon Sep 17 00:00:00 2001 From: mastfissh Date: Thu, 9 Apr 2020 14:02:13 +0200 Subject: [PATCH 10/17] wip on ui --- src/main.rs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 287ce12..3feb73b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,16 +6,19 @@ use druid::widget::prelude::*; use druid::{AppLauncher, Widget, WindowDesc}; use druid::{ - BoxConstraints, Command, Data, Env, Event, FileDialogOptions, LayoutCtx, Lens, LifeCycle, - LocalizedString, MenuDesc, MenuItem, PaintCtx, Size, SysMods, FileInfo + BoxConstraints, Command, Data, Env, Event, FileDialogOptions, FileInfo, LayoutCtx, Lens, + LifeCycle, LocalizedString, MenuDesc, MenuItem, PaintCtx, Size, SysMods, }; +use druid::widget::{Button, Flex, Label}; +use druid::WidgetExt; + use std::path::PathBuf; use std::sync::{Arc, Mutex}; #[derive(Clone, Data, Default, Lens)] pub struct AppState { - pub paths: Arc>> + pub paths: Arc>>, } impl Widget for AppState { @@ -26,7 +29,7 @@ impl Widget for AppState { let info = cmd.get_object::().expect("api violation"); let pathbuf = info.path().clone().to_path_buf(); data.paths.try_lock().unwrap().push(pathbuf); - // dbg!(&data.paths); + dbg!(&data.paths); } _ => {} }, @@ -61,6 +64,19 @@ impl Widget for AppState { fn paint(&mut self, _ctx: &mut PaintCtx, _data: &AppState, _env: &Env) {} } +fn ui_builder() -> impl Widget { + // The label text will be computed dynamically based on the current locale and count + let text = LocalizedString::new("hello-counter"); + let label = Label::new(text).padding(5.0).center(); + let button = Button::new("increment") + .on_click(|_ctx, data, _env| { + dbg!("clicked"); + }) + .padding(5.0); + + Flex::column().with_child(label).with_child(button) +} + fn main() { let main_window = WindowDesc::new(|| AppState::default()) .title(LocalizedString::new("Dupe Detector")) From dfa712dfc95e6a886d3ebf24dc7d2c01e3aa116b Mon Sep 17 00:00:00 2001 From: mastfissh Date: Thu, 9 Apr 2020 17:12:26 +0200 Subject: [PATCH 11/17] Working delegate --- src/main.rs | 63 ++++++++++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 39 deletions(-) diff --git a/src/main.rs b/src/main.rs index 3feb73b..868808d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,13 +2,17 @@ extern crate dupelib; use druid::commands; use druid::platform_menus; -use druid::widget::prelude::*; + +use druid::AppDelegate; +use druid::DelegateCtx; +use druid::Target; use druid::{AppLauncher, Widget, WindowDesc}; use druid::{ - BoxConstraints, Command, Data, Env, Event, FileDialogOptions, FileInfo, LayoutCtx, Lens, - LifeCycle, LocalizedString, MenuDesc, MenuItem, PaintCtx, Size, SysMods, + Command, Data, Env, FileDialogOptions, FileInfo, Lens, LocalizedString, MenuDesc, MenuItem, SysMods, }; +#[derive(Debug, Default)] +pub struct Delegate; use druid::widget::{Button, Flex, Label}; use druid::WidgetExt; @@ -21,55 +25,35 @@ pub struct AppState { pub paths: Arc>>, } -impl Widget for AppState { - fn event(&mut self, _ctx: &mut EventCtx, event: &Event, data: &mut AppState, _env: &Env) { - match event { - Event::Command(cmd) => match cmd.selector { +impl AppDelegate for Delegate { + fn command( + &mut self, + _ctx: &mut DelegateCtx, + _target: &Target, + cmd: &Command, + data: &mut AppState, + _env: &Env, + ) -> bool { + match cmd.selector { druid::commands::OPEN_FILE => { let info = cmd.get_object::().expect("api violation"); let pathbuf = info.path().clone().to_path_buf(); data.paths.try_lock().unwrap().push(pathbuf); dbg!(&data.paths); + false } - _ => {} - }, - _ => {} - } - } - - fn lifecycle( - &mut self, - _ctx: &mut LifeCycleCtx, - event: &LifeCycle, - _data: &AppState, - _env: &Env, - ) { - dbg!(event); + _ => true + } } - - fn update(&mut self, _ctx: &mut UpdateCtx, _old_data: &AppState, _data: &AppState, _env: &Env) { - dbg!("t"); - } - - fn layout( - &mut self, - _layout_ctx: &mut LayoutCtx, - bc: &BoxConstraints, - _data: &AppState, - _env: &Env, - ) -> Size { - bc.constrain((900.0, 900.0)) - } - - fn paint(&mut self, _ctx: &mut PaintCtx, _data: &AppState, _env: &Env) {} } + fn ui_builder() -> impl Widget { // The label text will be computed dynamically based on the current locale and count let text = LocalizedString::new("hello-counter"); let label = Label::new(text).padding(5.0).center(); let button = Button::new("increment") - .on_click(|_ctx, data, _env| { + .on_click(|_ctx, _data, _env| { dbg!("clicked"); }) .padding(5.0); @@ -78,11 +62,12 @@ fn ui_builder() -> impl Widget { } fn main() { - let main_window = WindowDesc::new(|| AppState::default()) + let main_window = WindowDesc::new(|| ui_builder()) .title(LocalizedString::new("Dupe Detector")) .menu(make_menu()); AppLauncher::with_window(main_window) + .delegate(Delegate::default()) .use_simple_logger() .launch(AppState::default()) .expect("launch failed"); From 4a8fb932d3ffb391561b438442a2949c16099a92 Mon Sep 17 00:00:00 2001 From: mastfissh Date: Thu, 9 Apr 2020 19:48:30 +0200 Subject: [PATCH 12/17] Do processing on another thread --- src/lib.rs | 363 +++++++++++++++++++++++++++------------------------- src/main.rs | 101 +++++++++++---- 2 files changed, 266 insertions(+), 198 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index dad192d..6b7d48d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,175 +1,188 @@ -extern crate blake2; -extern crate chashmap; -extern crate rayon; -extern crate structopt; -extern crate walkdir; -use blake2::digest::generic_array::typenum::U64; -use blake2::digest::generic_array::GenericArray; -use blake2::{Blake2b, Digest}; -use chashmap::CHashMap; -use rayon::prelude::*; -use std::error::Error; -use std::fs::File; - -use std::path::PathBuf; -use std::time::Instant; -use std::{fs, io}; -use structopt::StructOpt; -use walkdir::DirEntry; -use walkdir::WalkDir; - -#[derive(StructOpt, Debug, Default)] -pub struct Opt { - #[structopt(name = "paths", parse(from_os_str))] - pub paths: Vec, - - #[structopt(short = "t", long = "timing")] - pub timing: bool, - - #[structopt(short = "d", long = "debug")] - pub debug: bool, - - #[structopt(short = "o", long = "output", parse(from_os_str))] - pub output: Option, - - #[structopt(short = "m", long = "minimum")] - pub minimum: Option, - - #[structopt(short = "s", long = "sort")] - pub sort: bool, -} - -type BoxResult = Result>; -type HashResult = GenericArray; - -// given a path, returns the filesize of the file at that path -fn byte_count_file(path: PathBuf) -> BoxResult { - let metadata = fs::metadata(path)?; - Ok(metadata.len()) -} - -// given a path, returns a hash of all the bytes of the file at that path -fn hash_file(path: PathBuf) -> BoxResult { - let mut file = File::open(path)?; - let mut hasher = Blake2b::new(); - io::copy(&mut file, &mut hasher)?; - Ok(hasher.result()) -} - -fn is_hidden(entry: &DirEntry) -> bool { - entry - .file_name() - .to_str() - .map(|s| s.starts_with('.')) - .unwrap_or(false) -} - -fn print_timing_info(now: Instant) { - println!( - "Time since start was {}.{} secs", - now.elapsed().as_secs(), - now.elapsed().subsec_millis() - ); -} - -fn walk_dirs(input: Vec) -> CHashMap { - let paths = CHashMap::new(); - input.par_iter().for_each(|path| { - for entry in WalkDir::new(path) - .into_iter() - .filter_entry(|e| !is_hidden(e)) - .filter_map(|e| e.ok()) - { - paths.insert(PathBuf::from(entry.path()), ()); - } - }); - return paths; -} - -fn cull_by_filesize(input: CHashMap, minimum: u64) -> CHashMap { - let dupes = CHashMap::new(); - let file_hashes = CHashMap::new(); - input - .into_iter() - .par_bridge() - .for_each(|(current_path, _)| { - if let Ok(bytes_count) = byte_count_file(PathBuf::from(¤t_path)) { - if bytes_count >= minimum { - if let Some(path) = file_hashes.insert(bytes_count, current_path.clone()) { - dupes.insert(current_path.clone(), bytes_count); - dupes.insert(path.to_path_buf(), bytes_count); - } - } - } - }); - return dupes; -} - -fn cull_by_hash(input: CHashMap) -> Vec<(PathBuf, PathBuf, u64)> { - let file_hashes = CHashMap::new(); - return input - .into_iter() - .par_bridge() - .filter_map(|(current_path, bytes_count)| { - if let Ok(data) = hash_file(PathBuf::from(¤t_path)) { - if let Some(path) = file_hashes.insert(data, current_path.clone()) { - return Some((current_path.clone(), path.to_path_buf(), bytes_count)); - } - } - None - }) - .collect::>(); -} - -fn format_results(input: &Vec<(PathBuf, PathBuf, u64)>) -> Vec { - input - .par_iter() - .map(|item| { - let (dupe1, dupe2, bytes_count) = item; - format!( - "{}: {} | {} \n", - bytes_count, - dupe1.display(), - dupe2.display() - ) - }) - .collect::>() -} - -pub fn detect_dupes(options: Opt) -> Vec { - let now = Instant::now(); - let paths = walk_dirs(options.paths); - if options.debug { - println!("{} files found ", paths.len()); - } - - let minimum = options.minimum.unwrap_or(0); - - let paths = cull_by_filesize(paths, minimum); - - if options.debug { - println!("{} potential dupes after filesize cull", paths.len()); - } - - let mut confirmed_dupes = cull_by_hash(paths); - - if options.debug { - println!("{} dupes after full file hashing", confirmed_dupes.len()); - } - if options.sort { - confirmed_dupes.sort_by_cached_key(|confirmed_dup| { - confirmed_dup.2; - }); - } - - let output_strings = format_results(&confirmed_dupes); - - if let Some(_path) = options.output { - // let mut f = File::create(path).unwrap(); - // f.write_all(output_strings.join("")?).as_bytes().unwrap(); - } - if options.timing { - print_timing_info(now); - } - return output_strings; -} +extern crate blake2; +extern crate chashmap; +extern crate rayon; +extern crate structopt; +extern crate walkdir; +use blake2::digest::generic_array::typenum::U64; +use blake2::digest::generic_array::GenericArray; +use blake2::{Blake2b, Digest}; +use chashmap::CHashMap; +use rayon::prelude::*; +use std::error::Error; +use std::fs::File; + +use std::path::PathBuf; +use std::time::Instant; +use std::{fs, io}; +use structopt::StructOpt; +use walkdir::DirEntry; +use walkdir::WalkDir; + +#[derive(StructOpt, Debug, Default)] +pub struct Opt { + #[structopt(name = "paths", parse(from_os_str))] + pub paths: Vec, + + #[structopt(short = "t", long = "timing")] + pub timing: bool, + + #[structopt(short = "d", long = "debug")] + pub debug: bool, + + #[structopt(short = "o", long = "output", parse(from_os_str))] + pub output: Option, + + #[structopt(short = "m", long = "minimum")] + pub minimum: Option, + + #[structopt(short = "s", long = "sort")] + pub sort: bool, +} + +impl Opt { + pub fn from_paths(paths: Vec) -> Opt { + Opt { + paths, + timing: false, + debug: false, + output: None, + minimum: None, + sort: false, + } + } +} + +type BoxResult = Result>; +type HashResult = GenericArray; + +// given a path, returns the filesize of the file at that path +fn byte_count_file(path: PathBuf) -> BoxResult { + let metadata = fs::metadata(path)?; + Ok(metadata.len()) +} + +// given a path, returns a hash of all the bytes of the file at that path +fn hash_file(path: PathBuf) -> BoxResult { + let mut file = File::open(path)?; + let mut hasher = Blake2b::new(); + io::copy(&mut file, &mut hasher)?; + Ok(hasher.result()) +} + +fn is_hidden(entry: &DirEntry) -> bool { + entry + .file_name() + .to_str() + .map(|s| s.starts_with('.')) + .unwrap_or(false) +} + +fn print_timing_info(now: Instant) { + println!( + "Time since start was {}.{} secs", + now.elapsed().as_secs(), + now.elapsed().subsec_millis() + ); +} + +fn walk_dirs(input: Vec) -> CHashMap { + let paths = CHashMap::new(); + input.par_iter().for_each(|path| { + for entry in WalkDir::new(path) + .into_iter() + .filter_entry(|e| !is_hidden(e)) + .filter_map(|e| e.ok()) + { + paths.insert(PathBuf::from(entry.path()), ()); + } + }); + return paths; +} + +fn cull_by_filesize(input: CHashMap, minimum: u64) -> CHashMap { + let dupes = CHashMap::new(); + let file_hashes = CHashMap::new(); + input + .into_iter() + .par_bridge() + .for_each(|(current_path, _)| { + if let Ok(bytes_count) = byte_count_file(PathBuf::from(¤t_path)) { + if bytes_count >= minimum { + if let Some(path) = file_hashes.insert(bytes_count, current_path.clone()) { + dupes.insert(current_path.clone(), bytes_count); + dupes.insert(path.to_path_buf(), bytes_count); + } + } + } + }); + return dupes; +} + +fn cull_by_hash(input: CHashMap) -> Vec<(PathBuf, PathBuf, u64)> { + let file_hashes = CHashMap::new(); + return input + .into_iter() + .par_bridge() + .filter_map(|(current_path, bytes_count)| { + if let Ok(data) = hash_file(PathBuf::from(¤t_path)) { + if let Some(path) = file_hashes.insert(data, current_path.clone()) { + return Some((current_path.clone(), path.to_path_buf(), bytes_count)); + } + } + None + }) + .collect::>(); +} + +fn format_results(input: &Vec<(PathBuf, PathBuf, u64)>) -> Vec { + input + .par_iter() + .map(|item| { + let (dupe1, dupe2, bytes_count) = item; + format!( + "{}: {} | {} \n", + bytes_count, + dupe1.display(), + dupe2.display() + ) + }) + .collect::>() +} + +pub fn detect_dupes(options: Opt) -> Vec { + let now = Instant::now(); + let paths = walk_dirs(options.paths); + if options.debug { + println!("{} files found ", paths.len()); + } + + let minimum = options.minimum.unwrap_or(0); + + let paths = cull_by_filesize(paths, minimum); + + if options.debug { + println!("{} potential dupes after filesize cull", paths.len()); + } + + let mut confirmed_dupes = cull_by_hash(paths); + + if options.debug { + println!("{} dupes after full file hashing", confirmed_dupes.len()); + } + if options.sort { + confirmed_dupes.sort_by_cached_key(|confirmed_dup| { + confirmed_dup.2; + }); + } + + let output_strings = format_results(&confirmed_dupes); + + if let Some(_path) = options.output { + // let mut f = File::create(path).unwrap(); + // f.write_all(output_strings.join("")?).as_bytes().unwrap(); + } + if options.timing { + print_timing_info(now); + } + return output_strings; +} diff --git a/src/main.rs b/src/main.rs index 868808d..e268cc0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,12 @@ extern crate dupelib; - use druid::commands; use druid::platform_menus; +use dupelib::detect_dupes; +use dupelib::Opt; +use std::fmt; +use std::fmt::Display; +use std::fmt::Formatter; +use std::thread; use druid::AppDelegate; use druid::DelegateCtx; @@ -9,7 +14,8 @@ use druid::Target; use druid::{AppLauncher, Widget, WindowDesc}; use druid::{ - Command, Data, Env, FileDialogOptions, FileInfo, Lens, LocalizedString, MenuDesc, MenuItem, SysMods, + Command, Data, Env, FileDialogOptions, FileInfo, Lens, LocalizedString, MenuDesc, MenuItem, + SysMods, }; #[derive(Debug, Default)] pub struct Delegate; @@ -18,11 +24,32 @@ use druid::widget::{Button, Flex, Label}; use druid::WidgetExt; use std::path::PathBuf; -use std::sync::{Arc, Mutex}; +use std::sync::Arc; + +use druid::widget::{List, Scroll}; +use druid::{Color, UnitPoint}; #[derive(Clone, Data, Default, Lens)] pub struct AppState { - pub paths: Arc>>, + pub paths: Arc>, + pub dupes: Arc>, +} + +#[derive(Clone, Data)] +pub struct DisplayablePath { + #[data(same_fn = "PartialEq::eq")] + pathbuf: PathBuf, +} + +impl Display for DisplayablePath { + // This trait requires `fmt` with this exact signature. + fn fmt(&self, f: &mut Formatter) -> fmt::Result { + // Write strictly the first element into the supplied output + // stream: `f`. Returns `fmt::Result` which indicates whether the + // operation succeeded or failed. Note that `write!` uses syntax which + // is very similar to `println!`. + write!(f, "{}", self.pathbuf.as_path().to_string_lossy()) + } } impl AppDelegate for Delegate { @@ -35,30 +62,60 @@ impl AppDelegate for Delegate { _env: &Env, ) -> bool { match cmd.selector { - druid::commands::OPEN_FILE => { - let info = cmd.get_object::().expect("api violation"); - let pathbuf = info.path().clone().to_path_buf(); - data.paths.try_lock().unwrap().push(pathbuf); - dbg!(&data.paths); - false - } - _ => true + druid::commands::OPEN_FILE => { + let info = cmd.get_object::().expect("api violation"); + let pathbuf = info.path().clone().to_path_buf(); + Arc::make_mut(&mut data.paths).push(DisplayablePath { pathbuf }); + true } + _ => true, + } } } - fn ui_builder() -> impl Widget { - // The label text will be computed dynamically based on the current locale and count - let text = LocalizedString::new("hello-counter"); - let label = Label::new(text).padding(5.0).center(); - let button = Button::new("increment") - .on_click(|_ctx, _data, _env| { - dbg!("clicked"); + let button = Button::new("Check") + .on_click(|ctx, data: &mut AppState, _env| { + let paths = data.paths.iter().map(|path| path.pathbuf.clone()).collect(); + let options = Opt::from_paths(paths); + + thread::spawn(|| { + let dupes = detect_dupes(options); + // let cmd = Command::new(); + // ctx.submit_command(druid::commands::HIDE_APPLICATION, None); + dbg!(dupes) + }); }) .padding(5.0); - Flex::column().with_child(label).with_child(button) + Flex::column() + .with_flex_child( + Scroll::new(List::new(|| { + Label::new(|item: &DisplayablePath, _env: &_| format!("List item #{}", item)) + .align_vertical(UnitPoint::LEFT) + .padding(10.0) + .expand() + .height(50.0) + .background(Color::rgb(0.5, 0.5, 0.5)) + })) + .vertical() + .lens(AppState::paths), + 1.0, + ) + .with_child(button) + .with_flex_child( + Scroll::new(List::new(|| { + Label::new(|item: &String, _env: &_| format!("List item #{}", item)) + .align_vertical(UnitPoint::LEFT) + .padding(10.0) + .expand() + .height(50.0) + .background(Color::rgb(0.5, 0.5, 0.5)) + })) + .vertical() + .lens(AppState::dupes), + 1.0, + ) } fn main() { @@ -87,9 +144,7 @@ fn file_menu() -> MenuDesc { LocalizedString::new("common-menu-file-open"), Command::new( commands::SHOW_OPEN_PANEL, - FileDialogOptions::new() - .select_directories() - .multi_selection(), + FileDialogOptions::new().select_directories(), ), ) .hotkey(SysMods::Cmd, "o"), From bcb5fa62c7f62f5680a57843ea245bf90341fb0d Mon Sep 17 00:00:00 2001 From: mastfissh Date: Sat, 11 Apr 2020 01:33:12 +0200 Subject: [PATCH 13/17] Working evented processing --- Cargo.toml | 2 +- src/main.rs | 70 +++++++++++++++++++++++++++++++++++------------------ 2 files changed, 48 insertions(+), 24 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5e009cd..ad9b00a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,6 @@ rayon = "1.3" chashmap = "2.2" structopt = "0.3" druid = { git = "https://github.com/xi-editor/druid.git", rev = "47be1da", version = "0.5" } - [lib] name = "dupelib" path = "src/lib.rs" @@ -21,3 +20,4 @@ path = "src/lib.rs" [[bin]] name = "main" path = "src/main.rs" + diff --git a/src/main.rs b/src/main.rs index e268cc0..98f6556 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,18 @@ extern crate dupelib; + use druid::commands; use druid::platform_menus; +use druid::ExtEventSink; +use druid::Selector; use dupelib::detect_dupes; use dupelib::Opt; use std::fmt; +use std::fmt::Debug; use std::fmt::Display; use std::fmt::Formatter; use std::thread; + use druid::AppDelegate; use druid::DelegateCtx; use druid::Target; @@ -17,8 +22,10 @@ use druid::{ Command, Data, Env, FileDialogOptions, FileInfo, Lens, LocalizedString, MenuDesc, MenuItem, SysMods, }; -#[derive(Debug, Default)] -pub struct Delegate; +#[derive(Default)] +pub struct Delegate { + eventsink: Option, +} use druid::widget::{Button, Flex, Label}; use druid::WidgetExt; @@ -29,7 +36,7 @@ use std::sync::Arc; use druid::widget::{List, Scroll}; use druid::{Color, UnitPoint}; -#[derive(Clone, Data, Default, Lens)] +#[derive(Clone, Data, Default, Lens, Debug)] pub struct AppState { pub paths: Arc>, pub dupes: Arc>, @@ -41,17 +48,29 @@ pub struct DisplayablePath { pathbuf: PathBuf, } +pub const START_DUPE: Selector = Selector::new("start_dupe"); + +pub const FINISH_DUPE: Selector = Selector::new("finish_dupe"); + impl Display for DisplayablePath { - // This trait requires `fmt` with this exact signature. fn fmt(&self, f: &mut Formatter) -> fmt::Result { - // Write strictly the first element into the supplied output - // stream: `f`. Returns `fmt::Result` which indicates whether the - // operation succeeded or failed. Note that `write!` uses syntax which - // is very similar to `println!`. write!(f, "{}", self.pathbuf.as_path().to_string_lossy()) } } +impl Debug for DisplayablePath { + fn fmt(&self, f: &mut Formatter) -> fmt::Result { + write!(f, "{}", self.pathbuf.as_path().to_string_lossy()) + } +} + +fn run_dupe_detect(sink: ExtEventSink, options: Opt) { + thread::spawn(move || { + let dupes = detect_dupes(options); + sink.submit_command(FINISH_DUPE, dupes, None).expect("command failed to submit"); + }); +} + impl AppDelegate for Delegate { fn command( &mut self, @@ -68,6 +87,18 @@ impl AppDelegate for Delegate { Arc::make_mut(&mut data.paths).push(DisplayablePath { pathbuf }); true } + START_DUPE => { + let paths = data.paths.iter().map(|path| path.pathbuf.clone()).collect(); + let options = Opt::from_paths(paths); + run_dupe_detect(self.eventsink.as_ref().unwrap().clone(), options); + true + } + FINISH_DUPE => { + let dupes = cmd.get_object::>().expect("api violation"); + data.dupes = Arc::new(dupes.to_vec()); + // dbg!(dupes); + true + } _ => true, } } @@ -75,16 +106,9 @@ impl AppDelegate for Delegate { fn ui_builder() -> impl Widget { let button = Button::new("Check") - .on_click(|ctx, data: &mut AppState, _env| { - let paths = data.paths.iter().map(|path| path.pathbuf.clone()).collect(); - let options = Opt::from_paths(paths); - - thread::spawn(|| { - let dupes = detect_dupes(options); - // let cmd = Command::new(); - // ctx.submit_command(druid::commands::HIDE_APPLICATION, None); - dbg!(dupes) - }); + .on_click(|ctx, _data: &mut AppState, _env| { + let cmd = Command::new(START_DUPE, 0); + ctx.submit_command(cmd, None); }) .padding(5.0); @@ -117,22 +141,22 @@ fn ui_builder() -> impl Widget { 1.0, ) } - fn main() { + let mut delegate = Delegate::default(); let main_window = WindowDesc::new(|| ui_builder()) .title(LocalizedString::new("Dupe Detector")) .menu(make_menu()); + let app = AppLauncher::with_window(main_window); + delegate.eventsink = Some(app.get_external_handle()); - AppLauncher::with_window(main_window) - .delegate(Delegate::default()) + app.delegate(delegate) .use_simple_logger() - .launch(AppState::default()) + .launch( AppState::default()) .expect("launch failed"); } fn make_menu() -> MenuDesc { let menu = MenuDesc::empty(); - menu.append(file_menu()) } From 2f787c89d49d69317ef1867dd9f92500c4bef114 Mon Sep 17 00:00:00 2001 From: mastfissh Date: Sat, 11 Apr 2020 10:12:36 +0200 Subject: [PATCH 14/17] drop ubuntu temporarily --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ad61002..f09882b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,7 +5,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest, macOS-latest] + os: [windows-latest, macOS-latest] rust: [stable] steps: From 19e6c03b7fbe5b337723890eaac1821b3b1e122c Mon Sep 17 00:00:00 2001 From: mastfissh Date: Sat, 11 Apr 2020 10:40:20 +0200 Subject: [PATCH 15/17] ubuntu deps --- .github/workflows/test.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f09882b..7e76999 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,13 +5,17 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [windows-latest, macOS-latest] + os: [ubuntu-latest, windows-latest, macOS-latest] rust: [stable] steps: - uses: hecrj/setup-rust-action@v1 with: rust-version: ${{ matrix.rust }} + - if: matrix.os = 'ubuntu-latest' + run: | + sudo apt update + sudo apt install libx11-dev libgtk-3-dev - uses: actions/checkout@master - name: Run tests run: cargo test --all From 708fda63acd03af5dfe207b27747c05cc5be4e38 Mon Sep 17 00:00:00 2001 From: mastfissh Date: Sat, 11 Apr 2020 10:42:28 +0200 Subject: [PATCH 16/17] fix deps --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7e76999..7754033 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: - uses: hecrj/setup-rust-action@v1 with: rust-version: ${{ matrix.rust }} - - if: matrix.os = 'ubuntu-latest' + - if: matrix.os == 'ubuntu-latest' run: | sudo apt update sudo apt install libx11-dev libgtk-3-dev From db6c5e63265aa24979086986a626e6652572b5b1 Mon Sep 17 00:00:00 2001 From: mastfissh Date: Sat, 11 Apr 2020 10:48:23 +0200 Subject: [PATCH 17/17] run max pre --- .github/workflows/test.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7754033..c0fc9c9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,6 +16,9 @@ jobs: run: | sudo apt update sudo apt install libx11-dev libgtk-3-dev + - if: matrix.os == 'macOS-latest' + run: | + brew install cairo - uses: actions/checkout@master - name: Run tests run: cargo test --all