diff --git a/.gitignore b/.gitignore index 2526a8b..b577009 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ *.iml .idea/ +pdflatex_stderr.log +pdflatex_stdout.log diff --git a/Cargo.lock b/Cargo.lock index 0c4cf73..db84e0f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,210 +4,237 @@ name = "adler32" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" [[package]] name = "aho-corasick" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d" dependencies = [ - "memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr", ] [[package]] name = "alga" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658f9468113d34781f6ca9d014d174c74b73de870f1e0e3ad32079bbab253b19" dependencies = [ - "approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libm 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num-complex 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "approx", + "libm", + "num-complex", + "num-traits", ] [[package]] name = "ansi_term" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "approx" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" dependencies = [ - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits", ] [[package]] name = "arrayvec" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" [[package]] name = "atty" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi", + "libc", + "winapi 0.3.8", ] [[package]] name = "autocfg" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" [[package]] name = "autocfg" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" [[package]] name = "backtrace" version = "0.3.42" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4b1549d804b6c73f4817df2ba073709e96e426f12987127c48e6745568c350b" dependencies = [ - "backtrace-sys 0.1.32 (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.66 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys", + "cfg-if", + "libc", + "rustc-demangle", ] [[package]] name = "backtrace-sys" version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" dependencies = [ - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "libc", ] [[package]] name = "base64" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder", ] [[package]] name = "bitflags" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] name = "block" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "block-buffer" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ - "block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", + "block-padding", + "byte-tools", + "byteorder", + "generic-array", ] [[package]] name = "block-padding" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" dependencies = [ - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools", ] [[package]] name = "boolinator" version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9" [[package]] name = "byte-tools" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "byteorder" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" [[package]] name = "bytes" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder", + "either", + "iovec", ] [[package]] name = "c2-chacha" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb" dependencies = [ - "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "ppv-lite86", ] [[package]] name = "cairo-rs" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05db47de3b0f09a222fa4bba2eab957d920d4243962a86b2d77ab401e4a359c" 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.8.2 (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.66 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "cairo-sys-rs", + "glib", + "glib-sys", + "gobject-sys", + "libc", ] [[package]] name = "cairo-sys-rs" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff65ba02cac715be836f63429ab00a767d48336efc5497c5637afb53b4f14d63" dependencies = [ - "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys", + "libc", + "pkg-config", ] [[package]] name = "cc" version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" [[package]] name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "clap" version = "2.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" dependencies = [ - "ansi_term 0.11.0 (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.7 (registry+https://github.com/rust-lang/crates.io-index)", - "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ansi_term", + "atty", + "bitflags", + "strsim", + "textwrap", + "unicode-width", + "vec_map", ] [[package]] name = "cloudabi" version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", ] [[package]] @@ -215,8 +242,8 @@ name = "codespan" version = "0.2.1" source = "git+https://github.com/oberien/codespan?rev=dc7b13739165fc58721415ce3120d05cf117ca81#dc7b13739165fc58721415ce3120d05cf117ca81" dependencies = [ - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "failure", + "itertools 0.8.2", ] [[package]] @@ -224,1653 +251,1831 @@ name = "codespan-reporting" version = "0.2.1" source = "git+https://github.com/oberien/codespan?rev=dc7b13739165fc58721415ce3120d05cf117ca81#dc7b13739165fc58721415ce3120d05cf117ca81" dependencies = [ - "codespan 0.2.1 (git+https://github.com/oberien/codespan?rev=dc7b13739165fc58721415ce3120d05cf117ca81)", - "termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "codespan", + "termcolor", ] [[package]] name = "cookie" version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" dependencies = [ - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "time", + "url 1.7.2", ] [[package]] name = "cookie_store" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" dependencies = [ - "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "publicsuffix 1.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie", + "failure", + "idna 0.1.5", + "log", + "publicsuffix", + "serde", + "serde_json", + "time", + "try_from", + "url 1.7.2", ] [[package]] name = "core-foundation" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" dependencies = [ - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys", + "libc", ] [[package]] name = "core-foundation-sys" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" [[package]] name = "crc32fast" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "crossbeam-deque" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca" 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", + "crossbeam-utils 0.7.0", ] [[package]] name = "crossbeam-epoch" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac" dependencies = [ - "autocfg 0.1.7 (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.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.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)", + "autocfg 0.1.7", + "cfg-if", + "crossbeam-utils 0.7.0", + "lazy_static", + "memoffset", + "scopeguard", ] [[package]] name = "crossbeam-queue" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6", ] [[package]] name = "crossbeam-queue" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "crossbeam-utils 0.7.0", ] [[package]] name = "crossbeam-utils" version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" dependencies = [ - "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)", + "cfg-if", + "lazy_static", ] [[package]] name = "crossbeam-utils" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" dependencies = [ - "autocfg 0.1.7 (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)", + "autocfg 0.1.7", + "cfg-if", + "lazy_static", ] [[package]] name = "cssparser" version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" dependencies = [ - "cssparser-macros 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "dtoa-short 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "phf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)", + "cssparser-macros", + "dtoa-short", + "itoa", + "matches", + "phf 0.8.0", + "proc-macro2 1.0.8", + "quote 1.0.2", + "smallvec 1.1.0", + "syn 1.0.14", ] [[package]] name = "cssparser-macros" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" dependencies = [ - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.2", + "syn 1.0.14", ] [[package]] name = "data-url" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d33fe99ccedd6e84bc035f1931bb2e6be79739d6242bd895e7311c886c50dc9c" dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "matches", ] [[package]] name = "derive_more" version = "0.99.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298998b1cf6b5b2c8a7b023dfd45821825ce3ba8a8af55c921a0e734e4653f76" dependencies = [ - "proc-macro2 1.0.8 (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.14 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.8", + "quote 1.0.2", + "syn 1.0.14", ] [[package]] name = "digest" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" dependencies = [ - "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array", ] [[package]] name = "downcast-rs" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ba6eb47c2131e784a38b726eb54c1e1484904f013e576a25354d0124161af6" [[package]] name = "dtoa" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e" [[package]] name = "dtoa-short" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59020b8513b76630c49d918c33db9f4c91638e7d3404a28084083b87e33f76f2" dependencies = [ - "dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "dtoa", ] [[package]] name = "either" version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" [[package]] name = "encoding" version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" dependencies = [ - "encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding-index-japanese", + "encoding-index-korean", + "encoding-index-simpchinese", + "encoding-index-singlebyte", + "encoding-index-tradchinese", ] [[package]] name = "encoding-index-japanese" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" dependencies = [ - "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_index_tests", ] [[package]] name = "encoding-index-korean" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" dependencies = [ - "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_index_tests", ] [[package]] name = "encoding-index-simpchinese" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" dependencies = [ - "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_index_tests", ] [[package]] name = "encoding-index-singlebyte" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" dependencies = [ - "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_index_tests", ] [[package]] name = "encoding-index-tradchinese" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" dependencies = [ - "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_index_tests", ] [[package]] name = "encoding_index_tests" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" [[package]] name = "encoding_rs" version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd8d03faa7fe0c1431609dfad7bbe827af30f82e1e2ae6f7ee4fca6bd764bc28" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "enum-kinds" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f21c374dea848c19071b1504ca5ad03c9ad0d03d2e509e68f6623b8fcac4b5" dependencies = [ - "quote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.12.15 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.4.2", + "syn 0.12.15", ] [[package]] name = "env_logger" version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38" dependencies = [ - "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", - "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "atty", + "humantime", + "log", + "regex", + "termcolor", ] [[package]] name = "error-chain" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab49e9dcb602294bc42f9a7dfc9bc6e936fca4418ea300dbfb84fe16de0b7d9" dependencies = [ - "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.5", ] [[package]] name = "failure" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" dependencies = [ - "backtrace 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace", + "failure_derive", ] [[package]] name = "failure_derive" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08" dependencies = [ - "proc-macro2 1.0.8 (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.14 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.8", + "quote 1.0.2", + "syn 1.0.14", + "synstructure", ] [[package]] name = "fake-simd" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" [[package]] name = "fixedbitset" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" [[package]] name = "flate2" version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bd6d6f4752952feb71363cffc9ebac9411b75b87c6ab6058c40c8900cf43c0f" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "miniz_oxide 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "crc32fast", + "libc", + "miniz_oxide", ] [[package]] name = "float-cmp" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75224bec9bfe1a65e2d34132933f2de7fe79900c96a0174307554244ece8150e" dependencies = [ - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits", ] [[package]] name = "fnv" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" [[package]] name = "foreign-types" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "foreign-types-shared", ] [[package]] name = "foreign-types-shared" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "fragile" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f8140122fa0d5dcb9fc8627cfce2b37cc1500f752636d46ea28bc26785c2f9" [[package]] name = "fuchsia-cprng" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" [[package]] name = "fuchsia-zircon" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "fuchsia-zircon-sys", ] [[package]] name = "fuchsia-zircon-sys" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "futf" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b" dependencies = [ - "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "mac", + "new_debug_unreachable", ] [[package]] name = "futures" version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" [[package]] name = "futures-cpupool" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures", + "num_cpus", ] [[package]] name = "fxhash" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder", ] [[package]] name = "gdk-pixbuf" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9726408ee1bbada83094326a99b9c68fea275f9dbb515de242a69e72051f4fcc" dependencies = [ - "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "gio 0.7.0 (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.8.2 (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.66 (registry+https://github.com/rust-lang/crates.io-index)", + "gdk-pixbuf-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "libc", ] [[package]] name = "gdk-pixbuf-sys" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8991b060a9e9161bafd09bf4a202e6fd404f5b4dd1a08d53a1e84256fb34ab0" 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.66 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", ] [[package]] name = "generic-array" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" dependencies = [ - "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", + "typenum", ] [[package]] name = "getopts" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" dependencies = [ - "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width", ] [[package]] name = "getrandom" version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "wasi", ] [[package]] name = "gio" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6261b5d34c30c2d59f879e643704cf54cb44731f3a2038000b68790c03e360e3" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fragile 0.3.0 (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.8.2 (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.66 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "fragile", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "lazy_static", + "libc", ] [[package]] name = "gio-sys" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fad225242b9eae7ec8a063bb86974aca56885014672375e5775dc0ea3533911" 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.66 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", ] [[package]] name = "glib" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be27232841baa43e0fd5ae003f7941925735b2f733a336dc75f07b9eff415e7b" dependencies = [ - "bitflags 1.2.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)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "glib-sys", + "gobject-sys", + "lazy_static", + "libc", ] [[package]] name = "glib-sys" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95856f3802f446c05feffa5e24859fe6a183a7cb849c8449afc35c86b1e316e2" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "pkg-config", ] [[package]] name = "gobject-sys" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31d1a804f62034eccf370006ccaef3708a71c31d561fee88564abe71177553d9" dependencies = [ - "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys", + "libc", + "pkg-config", ] [[package]] name = "h2" version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder", + "bytes", + "fnv", + "futures", + "http", + "indexmap", + "log", + "slab", + "string", + "tokio-io", ] [[package]] name = "heck" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" dependencies = [ - "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-segmentation", ] [[package]] name = "heradoc" version = "0.1.0" dependencies = [ - "backtrace 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)", - "boolinator 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cairo-rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "codespan 0.2.1 (git+https://github.com/oberien/codespan?rev=dc7b13739165fc58721415ce3120d05cf117ca81)", - "codespan-reporting 0.2.1 (git+https://github.com/oberien/codespan?rev=dc7b13739165fc58721415ce3120d05cf117ca81)", - "enum-kinds 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)", - "isolang 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lexical 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "librsvg 2.47.2 (git+https://gitlab.gnome.org/GNOME/librsvg?rev=6ecab568)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "pulldown-cmark 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "quoted-string 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "reqwest 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "sha2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "single 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "str-concat 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "structopt 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "strum 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "strum_macros 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "svgbob 0.5.0-alpha.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", - "typed-arena 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace", + "boolinator", + "cairo-rs", + "codespan", + "codespan-reporting", + "enum-kinds", + "env_logger", + "isolang", + "itertools 0.9.0", + "lazy_static", + "lexical", + "librsvg", + "log", + "mime", + "pulldown-cmark", + "quoted-string", + "regex", + "reqwest", + "serde", + "serde_json", + "sha2", + "single", + "str-concat", + "structopt", + "strum", + "strum_macros", + "svgbob", + "tempdir", + "toml", + "typed-arena", + "url 1.7.2", + "void", ] [[package]] name = "hermit-abi" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff2656d88f158ce120947499e971d743c05dbcbed62e5bd2f38f1698bbc3772" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "http" version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "fnv", + "itoa", ] [[package]] name = "http-body" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "futures", + "http", + "tokio-buf", ] [[package]] name = "httparse" version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" [[package]] name = "humantime" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" dependencies = [ - "quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "quick-error", ] [[package]] name = "hyper" version = "0.12.35" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" +dependencies = [ + "bytes", + "futures", + "futures-cpupool", + "h2", + "http", + "http-body", + "httparse", + "iovec", + "itoa", + "log", + "net2", + "rustc_version", + "time", + "tokio", + "tokio-buf", + "tokio-executor", + "tokio-io", + "tokio-reactor", + "tokio-tcp", + "tokio-threadpool", + "tokio-timer", + "want", ] [[package]] name = "hyper-tls" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "futures", + "hyper", + "native-tls", + "tokio-io", ] [[package]] name = "idna" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "matches", + "unicode-bidi", + "unicode-normalization", ] [[package]] name = "idna" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "matches", + "unicode-bidi", + "unicode-normalization", ] [[package]] name = "indexmap" version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b54058f0a6ff80b6803da8faf8997cde53872b38f4023728f6830b06cd3c0dc" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", ] [[package]] name = "iovec" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "isolang" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5855a5a1ba5957e064977b94e5cd15ecbe83904a5191576be11615186cd868" dependencies = [ - "phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", + "phf 0.7.24", + "phf_codegen 0.7.24", ] [[package]] name = "itertools" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" dependencies = [ - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "either", ] [[package]] name = "itertools" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" dependencies = [ - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "either", ] [[package]] name = "itoa" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" [[package]] name = "kernel32-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8", + "winapi-build", ] [[package]] name = "language-tags" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "lexical" version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd84e95495f8eddaaa1ad1542e9810a3f0139f18fb985c960e9c74dc5dcf4498" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lexical-core 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "lexical-core", ] [[package]] name = "lexical-core" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41aae02f4cbf67c1f57e1a1fa5418db722b5c9fa4a2c47b44d53d6c31cbe040a" dependencies = [ - "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "static_assertions 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec", + "cfg-if", + "ryu", + "static_assertions", ] [[package]] name = "libc" version = "0.2.66" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" [[package]] name = "libm" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" [[package]] name = "librsvg" version = "2.47.2" source = "git+https://gitlab.gnome.org/GNOME/librsvg?rev=6ecab568#6ecab568ae60699ab2e1be9269e920d7ce69bd1d" dependencies = [ - "cairo-rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "gio 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rsvg_internals 0.0.1 (git+https://gitlab.gnome.org/GNOME/librsvg?rev=6ecab568)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cairo-rs", + "gio", + "glib", + "rsvg_internals", + "url 2.1.1", ] [[package]] name = "locale_config" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", - "objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "objc", + "objc-foundation", + "regex", + "winapi 0.3.8", ] [[package]] name = "lock_api" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79b2de95ecb4691949fea4716ca53cdbcfccb2c612e19644a8bad05edcf9f47b" dependencies = [ - "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard", ] [[package]] name = "log" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "mac" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" [[package]] name = "malloc_buf" version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "markup5ever" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae38d669396ca9b707bfc3db254bc382ddb94f57cc5c235f34623a669a01dab" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "phf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_codegen 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache_codegen 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log", + "phf 0.8.0", + "phf_codegen 0.8.0", + "serde", + "serde_derive", + "serde_json", + "string_cache", + "string_cache_codegen", + "tendril", ] [[package]] name = "matches" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" [[package]] name = "matrixmultiply" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4f7ec66360130972f34830bfad9ef05c6610a43938a467bcc9ab9369ab3478f" dependencies = [ - "rawpointer 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rawpointer", ] [[package]] name = "maybe-uninit" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memchr" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3197e20c7edb283f87c071ddfc7a2cca8f8e0b888c242959846a6fce03c72223" [[package]] name = "memoffset" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" dependencies = [ - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version", ] [[package]] name = "mime" version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "mime_guess" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a0ed03949aef72dbdf3116a383d7b38b4768e6f960528cd6a6044aa9ed68599" dependencies = [ - "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "mime", + "unicase", ] [[package]] name = "miniz_oxide" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f3f74f726ae935c3f514300cc6773a0c9492abc5e972d42ba0c0ebb88757625" dependencies = [ - "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "adler32", ] [[package]] name = "mio" version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "fuchsia-zircon", + "fuchsia-zircon-sys", + "iovec", + "kernel32-sys", + "libc", + "log", + "miow", + "net2", + "slab", + "winapi 0.2.8", ] [[package]] name = "miow" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys", + "net2", + "winapi 0.2.8", + "ws2_32-sys", ] [[package]] name = "nalgebra" version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaa9fddbc34c8c35dd2108515587b8ce0cab396f17977b8c738568e4edb521a2" dependencies = [ - "alga 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", - "matrixmultiply 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num-complex 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num-rational 0.2.3 (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.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", + "alga", + "approx", + "generic-array", + "matrixmultiply", + "num-complex", + "num-rational", + "num-traits", + "rand 0.6.5", + "typenum", ] [[package]] name = "native-tls" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2df1a4c22fd44a62147fd8f13dd0f95c9d8ca7b2610299b2a2f9cf8964274e" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.10.26 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", ] [[package]] name = "ncollide2d" version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd7791f03728b7fa45bd18af5adcb6f162a05e10853f273133547e9e12fa1910" dependencies = [ - "alga 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "nalgebra 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", + "alga", + "approx", + "bitflags", + "downcast-rs", + "either", + "nalgebra", + "num-traits", + "petgraph", + "rand 0.6.5", + "slab", + "smallvec 0.6.13", ] [[package]] name = "net2" version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "winapi 0.3.8", ] [[package]] name = "new_debug_unreachable" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" [[package]] name = "nodrop" version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" [[package]] name = "num-complex" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" 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)", + "autocfg 1.0.0", + "num-traits", ] [[package]] name = "num-integer" version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" 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)", + "autocfg 1.0.0", + "num-traits", ] [[package]] name = "num-rational" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da4dc79f9e6c81bef96148c8f6b8e72ad4541caa4a24373e900a36da07de03a3" 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)", + "autocfg 1.0.0", + "num-integer", + "num-traits", ] [[package]] name = "num-traits" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", ] [[package]] name = "num_cpus" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6" dependencies = [ - "hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi", + "libc", ] [[package]] name = "objc" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ - "malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "malloc_buf", ] [[package]] name = "objc-foundation" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" dependencies = [ - "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", - "objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "block", + "objc", + "objc_id", ] [[package]] name = "objc_id" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" dependencies = [ - "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "objc", ] [[package]] name = "once_cell" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d" [[package]] name = "opaque-debug" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] name = "openssl" version = "0.10.26" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a3cc5799d98e1088141b8e01ff760112bbd9f19d850c124500566ca6901a585" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "foreign-types 0.3.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.66 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "cfg-if", + "foreign-types", + "lazy_static", + "libc", + "openssl-sys", ] [[package]] name = "openssl-probe" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" [[package]] name = "openssl-sys" version = "0.9.53" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465d16ae7fc0e313318f7de5cecf57b2fbe7511fd213978b457e1c96ff46736f" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.7", + "cc", + "libc", + "pkg-config", + "vcpkg", ] [[package]] name = "ordermap" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063" [[package]] name = "pango" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "393fa071b144f8ffb83ede273758983cf414ca3c0b1d2a5a9ce325b3ba3dd786" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "glib 0.8.2 (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.66 (registry+https://github.com/rust-lang/crates.io-index)", - "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "glib", + "glib-sys", + "gobject-sys", + "lazy_static", + "libc", + "pango-sys", ] [[package]] name = "pango-sys" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b93d84907b3cf0819bff8f13598ba72843bee579d5ebc2502e4b0367b4be7d" 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.66 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", ] [[package]] name = "pangocairo" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7486695787f206924b662cb8ca7b3c987fdbbff4ccff3612017cf471aee65162" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cairo-rs 0.7.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.8.2 (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.66 (registry+https://github.com/rust-lang/crates.io-index)", - "pango 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pangocairo-sys 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "cairo-rs", + "cairo-sys-rs", + "glib", + "glib-sys", + "gobject-sys", + "libc", + "pango", + "pango-sys", + "pangocairo-sys", ] [[package]] name = "pangocairo-sys" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3921b31ab776b23e28c8f6e474dda52fdc28bc2689101caeb362ba976719efe" dependencies = [ - "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (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)", + "cairo-sys-rs", + "glib-sys", + "libc", + "pango-sys", + "pkg-config", ] [[package]] name = "parking_lot" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" dependencies = [ - "lock_api 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "lock_api", + "parking_lot_core", + "rustc_version", ] [[package]] name = "parking_lot_core" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (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)", + "cfg-if", + "cloudabi", + "libc", + "redox_syscall", + "rustc_version", + "smallvec 0.6.13", + "winapi 0.3.8", ] [[package]] name = "percent-encoding" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" [[package]] name = "percent-encoding" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "petgraph" version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f" dependencies = [ - "fixedbitset 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "ordermap 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "fixedbitset", + "ordermap", ] [[package]] name = "phf" version = "0.7.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18" dependencies = [ - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.7.24", ] [[package]] name = "phf" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" dependencies = [ - "phf_macros 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.5.16 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_macros", + "phf_shared 0.8.0", + "proc-macro-hack", ] [[package]] name = "phf_codegen" version = "0.7.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e" dependencies = [ - "phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_generator 0.7.24", + "phf_shared 0.7.24", ] [[package]] name = "phf_codegen" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" dependencies = [ - "phf_generator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_generator 0.8.0", + "phf_shared 0.8.0", ] [[package]] name = "phf_generator" version = "0.7.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" dependencies = [ - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.7.24", + "rand 0.6.5", ] [[package]] name = "phf_generator" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" dependencies = [ - "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.8.0", + "rand 0.7.3", ] [[package]] name = "phf_macros" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" dependencies = [ - "phf_generator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.5.16 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.8 (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.14 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2 1.0.8", + "quote 1.0.2", + "syn 1.0.14", ] [[package]] name = "phf_shared" version = "0.7.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" dependencies = [ - "siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "siphasher 0.2.3", ] [[package]] name = "phf_shared" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" dependencies = [ - "siphasher 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "siphasher 0.3.3", ] [[package]] name = "pkg-config" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" [[package]] name = "pom" version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef5cf7f52c12da93c26b63ee0d9f012bc82fb071851c546c030dc6ecb5f2994b" [[package]] name = "ppv-lite86" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" [[package]] name = "precomputed-hash" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "proc-macro-hack" version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e0456befd48169b9f13ef0f0ad46d492cf9d2dbb918bcf38e01eed4ce3ec5e4" [[package]] name = "proc-macro2" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd07deb3c6d1d9ff827999c7f9b04cdfd66b1b17ae508e14fe47b620f2282ae0" dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0", ] [[package]] name = "proc-macro2" version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0", ] [[package]] name = "proc-macro2" version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acb317c6ff86a4e579dfa00fc5e6cca91ecbb4e7eb2df0468805b674eb88548" dependencies = [ - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.2.0", ] [[package]] name = "publicsuffix" version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" dependencies = [ - "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", - "idna 0.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)", - "regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "error-chain", + "idna 0.2.0", + "lazy_static", + "regex", + "url 2.1.1", ] [[package]] name = "pulldown-cmark" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1b74cc784b038a9921fd1a48310cc2e238101aa8ae0b94201e2d85121dd68b5" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "getopts", + "memchr", + "unicase", ] [[package]] name = "quick-error" version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1eca14c727ad12702eb4b6bfb5a232287dcf8385cb8ca83a3eeaf6519c44c408" dependencies = [ - "proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.2.3", ] [[package]] name = "quote" version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", ] [[package]] name = "quote" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" dependencies = [ - "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.8", ] [[package]] name = "quoted-string" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a206a30ce37189d1340e7da2ee0b4d65e342590af676541c23a4f3959ba272e" [[package]] name = "rand" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" dependencies = [ - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (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.8 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi 0.3.8", ] [[package]] name = "rand" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.7", + "libc", + "rand_chacha 0.1.1", + "rand_core 0.4.2", + "rand_hc 0.1.0", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg 0.1.2", + "rand_xorshift", + "winapi 0.3.8", ] [[package]] name = "rand" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_pcg 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom", + "libc", + "rand_chacha 0.2.1", + "rand_core 0.5.1", + "rand_hc 0.2.0", + "rand_pcg 0.2.1", ] [[package]] name = "rand_chacha" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.7", + "rand_core 0.3.1", ] [[package]] name = "rand_chacha" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" dependencies = [ - "c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "c2-chacha", + "rand_core 0.5.1", ] [[package]] name = "rand_core" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" dependencies = [ - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.2", ] [[package]] name = "rand_core" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" [[package]] name = "rand_core" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom", ] [[package]] name = "rand_hc" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1", ] [[package]] name = "rand_hc" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" dependencies = [ - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.5.1", ] [[package]] name = "rand_isaac" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1", ] [[package]] name = "rand_jitter" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "rand_core 0.4.2", + "winapi 0.3.8", ] [[package]] name = "rand_os" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" dependencies = [ - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (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.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "winapi 0.3.8", ] [[package]] name = "rand_pcg" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.7", + "rand_core 0.4.2", ] [[package]] name = "rand_pcg" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" dependencies = [ - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.5.1", ] [[package]] name = "rand_xorshift" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1", ] [[package]] name = "rawpointer" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098" dependencies = [ - "crossbeam-deque 0.7.2 (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)", + "crossbeam-deque", + "either", + "rayon-core", ] [[package]] name = "rayon-core" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9" dependencies = [ - "crossbeam-deque 0.7.2 (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.0 (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)", + "crossbeam-deque", + "crossbeam-queue 0.2.1", + "crossbeam-utils 0.7.0", + "lazy_static", + "num_cpus", ] [[package]] name = "rctree" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be9e29cb19c8fe84169fcb07f8f11e66bc9e6e0280efd4715c54818296f8a4a8" [[package]] name = "rdrand" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1", ] [[package]] name = "redox_syscall" version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" [[package]] name = "regex" version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5508c1941e4e7cb19965abef075d35a9a8b5cdf0846f30b4050e9b55dc55e87" dependencies = [ - "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick", + "memchr", + "regex-syntax", + "thread_local", ] [[package]] name = "regex-syntax" version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e734e891f5b408a29efbf8309e656876276f49ab6a6ac208600b4419bd893d90" [[package]] name = "remove_dir_all" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "reqwest" version = "0.9.24" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie_store 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)", - "flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "mime_guess 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", - "winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", +checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" +dependencies = [ + "base64", + "bytes", + "cookie", + "cookie_store", + "encoding_rs", + "flate2", + "futures", + "http", + "hyper", + "hyper-tls", + "log", + "mime", + "mime_guess", + "native-tls", + "serde", + "serde_json", + "serde_urlencoded", + "time", + "tokio", + "tokio-executor", + "tokio-io", + "tokio-threadpool", + "tokio-timer", + "url 1.7.2", + "uuid", + "winreg", ] [[package]] @@ -1878,1097 +2083,887 @@ name = "rsvg_internals" version = "0.0.1" source = "git+https://gitlab.gnome.org/GNOME/librsvg?rev=6ecab568#6ecab568ae60699ab2e1be9269e920d7ce69bd1d" dependencies = [ - "cairo-rs 0.7.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)", - "cssparser 0.27.2 (registry+https://github.com/rust-lang/crates.io-index)", - "data-url 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "float-cmp 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "gdk-pixbuf 0.7.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)", - "gio 0.7.0 (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.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "locale_config 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "markup5ever 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "nalgebra 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "once_cell 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pango 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pangocairo 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rctree 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "selectors 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "xml-rs 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)", + "cairo-rs", + "cairo-sys-rs", + "cssparser", + "data-url", + "downcast-rs", + "encoding", + "float-cmp", + "gdk-pixbuf", + "gdk-pixbuf-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "itertools 0.8.2", + "language-tags", + "libc", + "locale_config", + "markup5ever", + "nalgebra", + "num-traits", + "once_cell", + "pango", + "pango-sys", + "pangocairo", + "phf 0.7.24", + "pkg-config", + "rayon", + "rctree", + "regex", + "selectors", + "url 2.1.1", + "xml-rs", ] [[package]] name = "rustc-demangle" version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" [[package]] name = "rustc_version" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" dependencies = [ - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "semver", ] [[package]] name = "ryu" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" [[package]] name = "sauron" version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ac3055fbee8a35ca88282102f4d58a50b2465d52689b6fe06ae387c2c1525b6" dependencies = [ - "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)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "sauron_vdom 0.24.0 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "lazy_static", + "log", + "sauron_vdom", + "thiserror", ] [[package]] name = "sauron_vdom" version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65977ca10d0b763d57f2c586199d368dcd6bd422d0ad1ca43e3a20734a8adb7e" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "log", ] [[package]] name = "schannel" version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f550b06b6cba9c8b8be3ee73f391990116bf527450d2556e9b9ce263b9a021" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "winapi 0.3.8", ] [[package]] name = "scopeguard" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" [[package]] name = "security-framework" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ef2429d7cefe5fd28bd1d2ed41c944547d4ff84776f5935b456da44593a16df" dependencies = [ - "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", ] [[package]] name = "security-framework-sys" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31493fc37615debb8c5090a7aeb4a9730bc61e77ab10b9af59f1a202284f895" dependencies = [ - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys", ] [[package]] name = "selectors" version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cssparser 0.27.2 (registry+https://github.com/rust-lang/crates.io-index)", - "derive_more 0.99.9 (registry+https://github.com/rust-lang/crates.io-index)", - "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "phf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_codegen 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "servo_arc 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "thin-slice 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "cssparser", + "derive_more", + "fxhash", + "log", + "matches", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc", + "smallvec 1.1.0", + "thin-slice", ] [[package]] name = "semver" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "semver-parser", ] [[package]] name = "semver-parser" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" dependencies = [ - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" dependencies = [ - "proc-macro2 1.0.8 (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.14 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.8", + "quote 1.0.2", + "syn 1.0.14", ] [[package]] name = "serde_json" -version = "1.0.45" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a" dependencies = [ - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa", + "ryu", + "serde", ] [[package]] name = "serde_urlencoded" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" dependencies = [ - "dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "dtoa", + "itoa", + "serde", + "url 1.7.2", ] [[package]] name = "servo_arc" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" dependencies = [ - "nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "nodrop", + "stable_deref_trait", ] [[package]] name = "sha2" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27044adfd2e1f077f649f59deb9490d3941d674002f7d062870a60ebe9bd47a0" dependencies = [ - "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "block-buffer", + "digest", + "fake-simd", + "opaque-debug", ] [[package]] name = "single" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd5add732a1ab689845591a1b50339cf5310b563e08dc5813c65991f30369ea2" dependencies = [ - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure", ] [[package]] name = "siphasher" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" [[package]] name = "siphasher" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa8f3741c7372e75519bd9346068370c9cdaabcc1f9599cbcf2a2719352286b7" [[package]] name = "slab" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" [[package]] name = "smallvec" version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" dependencies = [ - "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "maybe-uninit", ] [[package]] name = "smallvec" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44e59e0c9fa00817912ae6e4e6e3c4fe04455e75699d06eedc7d85917ed8e8f4" [[package]] name = "stable_deref_trait" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "str-concat" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3468939e48401c4fe3cdf5e5cef50951c2808ed549d1467fde249f1fcb602634" [[package]] name = "string" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", ] [[package]] name = "string_cache" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2940c75beb4e3bf3a494cef919a747a2cb81e52571e212bfbd185074add7208a" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "new_debug_unreachable", + "phf_shared 0.8.0", + "precomputed-hash", + "serde", ] [[package]] name = "string_cache_codegen" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f24c8e5e19d22a726626f1a5e16fe15b132dcf21d10177fa5a45ce7962996b97" dependencies = [ - "phf_generator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro2 1.0.8", + "quote 1.0.2", ] [[package]] name = "strsim" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "structopt" version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16c2cdbf9cc375f15d1b4141bc48aeef444806655cd0e904207edc8d68d86ed7" dependencies = [ - "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "structopt-derive 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", + "clap", + "structopt-derive", ] [[package]] name = "structopt-derive" version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53010261a84b37689f9ed7d395165029f9cc7abb9f56bbfe86bee2597ed25107" dependencies = [ - "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", + "heck", + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", ] [[package]] name = "strum" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6c3a2071519ab6a48f465808c4c1ffdd00dfc8e93111d02b4fc5abab177676e" [[package]] name = "strum_macros" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8baacebd7b7c9b864d83a6ba7a246232983e277b86fa5cdec77f565715a4b136" dependencies = [ - "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", + "heck", + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", ] [[package]] name = "svgbob" version = "0.5.0-alpha.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44bfc246633d2bbfaec823f5278edc631bbcb06ab25055589466d69ba2803bb4" dependencies = [ - "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "nalgebra 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ncollide2d 0.19.2 (registry+https://github.com/rust-lang/crates.io-index)", - "pom 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sauron 0.24.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.8.2", + "lazy_static", + "nalgebra", + "ncollide2d", + "pom", + "sauron", + "unicode-width", ] [[package]] name = "syn" version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c97c05b8ebc34ddd6b967994d5c6e9852fa92f8b82b3858c39451f97346dcce5" dependencies = [ - "proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.2.3", + "quote 0.4.2", + "unicode-xid 0.1.0", ] [[package]] name = "syn" version = "0.15.44" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", + "quote 0.6.13", + "unicode-xid 0.1.0", ] [[package]] name = "syn" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af6f3550d8dff9ef7dc34d384ac6f107e5d31c8f57d9f28e0081503f547ac8f5" dependencies = [ - "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.8", + "quote 1.0.2", + "unicode-xid 0.2.0", ] [[package]] name = "synstructure" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" dependencies = [ - "proc-macro2 1.0.8 (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.14 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.8", + "quote 1.0.2", + "syn 1.0.14", + "unicode-xid 0.2.0", ] [[package]] name = "tempdir" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" dependencies = [ - "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.6", + "remove_dir_all", ] [[package]] name = "tempfile" version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "rand 0.7.3", + "redox_syscall", + "remove_dir_all", + "winapi 0.3.8", ] [[package]] name = "tendril" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707feda9f2582d5d680d733e38755547a3e8fb471e7ba11452ecfd9ce93a5d3b" dependencies = [ - "futf 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "utf-8 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futf", + "mac", + "utf-8", ] [[package]] name = "termcolor" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" dependencies = [ - "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util", ] [[package]] name = "textwrap" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" dependencies = [ - "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width", ] [[package]] name = "thin-slice" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b3d3d2ff68104100ab257bb6bb0cb26c901abe4bd4ba15961f3bf867924012" dependencies = [ - "thiserror-impl 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "thiserror-impl", ] [[package]] name = "thiserror-impl" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca972988113b7715266f91250ddb98070d033c62a011fa0fcc57434a649310dd" dependencies = [ - "proc-macro2 1.0.8 (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.14 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.8", + "quote 1.0.2", + "syn 1.0.14", ] [[package]] name = "thread_local" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", ] [[package]] name = "time" version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "redox_syscall", + "winapi 0.3.8", ] [[package]] name = "tokio" version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "futures", + "mio", + "num_cpus", + "tokio-current-thread", + "tokio-executor", + "tokio-io", + "tokio-reactor", + "tokio-tcp", + "tokio-threadpool", + "tokio-timer", ] [[package]] name = "tokio-buf" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "either", + "futures", ] [[package]] name = "tokio-current-thread" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "futures", + "tokio-executor", ] [[package]] name = "tokio-executor" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca6df436c42b0c3330a82d855d2ef017cd793090ad550a6bc2184f4b933532ab" dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6", + "futures", ] [[package]] name = "tokio-io" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "futures", + "log", ] [[package]] name = "tokio-reactor" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6732fe6b53c8d11178dcb77ac6d9682af27fc6d4cb87789449152e5377377146" dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (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)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6", + "futures", + "lazy_static", + "log", + "mio", + "num_cpus", + "parking_lot", + "slab", + "tokio-executor", + "tokio-io", + "tokio-sync", ] [[package]] name = "tokio-sync" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d06554cce1ae4a50f42fba8023918afa931413aded705b560e29600ccf7c6d76" dependencies = [ - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv", + "futures", ] [[package]] name = "tokio-tcp" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "futures", + "iovec", + "mio", + "tokio-io", + "tokio-reactor", ] [[package]] name = "tokio-threadpool" version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c32ffea4827978e9aa392d2f743d973c1dfa3730a2ed3f22ce1e6984da848c" dependencies = [ - "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (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)", - "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque", + "crossbeam-queue 0.1.2", + "crossbeam-utils 0.6.6", + "futures", + "lazy_static", + "log", + "num_cpus", + "slab", + "tokio-executor", ] [[package]] name = "tokio-timer" version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1739638e364e558128461fc1ad84d997702c8e31c2e6b18fb99842268199e827" dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6", + "futures", + "slab", + "tokio-executor", ] [[package]] name = "toml" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" dependencies = [ - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde", ] [[package]] name = "try-lock" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "try_from" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "typed-arena" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9b2228007eba4120145f785df0f6c92ea538f5a3635a612ecf4e334c8c1446d" [[package]] name = "typenum" version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" [[package]] name = "unicase" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" dependencies = [ - "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.9.1", ] [[package]] name = "unicode-bidi" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "matches", ] [[package]] name = "unicode-normalization" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" dependencies = [ - "smallvec 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.1.0", ] [[package]] name = "unicode-segmentation" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" [[package]] name = "unicode-width" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" [[package]] name = "unicode-xid" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" [[package]] name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" [[package]] name = "url" version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" dependencies = [ - "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.1.5", + "matches", + "percent-encoding 1.0.1", ] [[package]] name = "url" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" dependencies = [ - "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.2.0", + "matches", + "percent-encoding 2.1.0", ] [[package]] name = "utf-8" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" [[package]] name = "uuid" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" dependencies = [ - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5", ] [[package]] name = "vcpkg" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" [[package]] name = "vec_map" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" [[package]] name = "version_check" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" [[package]] name = "version_check" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" [[package]] name = "void" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "want" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "futures", + "log", + "try-lock", ] [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "winapi" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" [[package]] name = "winapi" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] name = "winapi-build" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ccfbf554c6ad11084fb7517daca16cfdcaccbdadba4fc336f032a8b12c2ad80" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "winreg" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "ws2_32-sys" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8", + "winapi-build", ] [[package]] name = "xml-rs" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" - -[metadata] -"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" -"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d" -"checksum alga 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "658f9468113d34781f6ca9d014d174c74b73de870f1e0e3ad32079bbab253b19" -"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" -"checksum approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" -"checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" -"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" -"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" -"checksum backtrace 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)" = "b4b1549d804b6c73f4817df2ba073709e96e426f12987127c48e6745568c350b" -"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" -"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" -"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -"checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" -"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -"checksum block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" -"checksum boolinator 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9" -"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" -"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" -"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -"checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb" -"checksum cairo-rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e05db47de3b0f09a222fa4bba2eab957d920d4243962a86b2d77ab401e4a359c" -"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 clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum codespan 0.2.1 (git+https://github.com/oberien/codespan?rev=dc7b13739165fc58721415ce3120d05cf117ca81)" = "" -"checksum codespan-reporting 0.2.1 (git+https://github.com/oberien/codespan?rev=dc7b13739165fc58721415ce3120d05cf117ca81)" = "" -"checksum cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" -"checksum cookie_store 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" -"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" -"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" -"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" -"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.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" -"checksum crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" -"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" -"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" -"checksum cssparser 0.27.2 (registry+https://github.com/rust-lang/crates.io-index)" = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" -"checksum cssparser-macros 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" -"checksum data-url 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d33fe99ccedd6e84bc035f1931bb2e6be79739d6242bd895e7311c886c50dc9c" -"checksum derive_more 0.99.9 (registry+https://github.com/rust-lang/crates.io-index)" = "298998b1cf6b5b2c8a7b023dfd45821825ce3ba8a8af55c921a0e734e4653f76" -"checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -"checksum downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "52ba6eb47c2131e784a38b726eb54c1e1484904f013e576a25354d0124161af6" -"checksum dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e" -"checksum dtoa-short 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "59020b8513b76630c49d918c33db9f4c91638e7d3404a28084083b87e33f76f2" -"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" -"checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" -"checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" -"checksum encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" -"checksum encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" -"checksum encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" -"checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" -"checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" -"checksum encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)" = "cd8d03faa7fe0c1431609dfad7bbe827af30f82e1e2ae6f7ee4fca6bd764bc28" -"checksum enum-kinds 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d0f21c374dea848c19071b1504ca5ad03c9ad0d03d2e509e68f6623b8fcac4b5" -"checksum env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)" = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38" -"checksum error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ab49e9dcb602294bc42f9a7dfc9bc6e936fca4418ea300dbfb84fe16de0b7d9" -"checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" -"checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08" -"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" -"checksum fixedbitset 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" -"checksum flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6bd6d6f4752952feb71363cffc9ebac9411b75b87c6ab6058c40c8900cf43c0f" -"checksum float-cmp 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75224bec9bfe1a65e2d34132933f2de7fe79900c96a0174307554244ece8150e" -"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 fragile 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f8140122fa0d5dcb9fc8627cfce2b37cc1500f752636d46ea28bc26785c2f9" -"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum futf 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b" -"checksum futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)" = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" -"checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" -"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -"checksum gdk-pixbuf 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9726408ee1bbada83094326a99b9c68fea275f9dbb515de242a69e72051f4fcc" -"checksum gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d8991b060a9e9161bafd09bf4a202e6fd404f5b4dd1a08d53a1e84256fb34ab0" -"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" -"checksum getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)" = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" -"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" -"checksum gio 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6261b5d34c30c2d59f879e643704cf54cb44731f3a2038000b68790c03e360e3" -"checksum gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4fad225242b9eae7ec8a063bb86974aca56885014672375e5775dc0ea3533911" -"checksum glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "be27232841baa43e0fd5ae003f7941925735b2f733a336dc75f07b9eff415e7b" -"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 h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" -"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" -"checksum hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eff2656d88f158ce120947499e971d743c05dbcbed62e5bd2f38f1698bbc3772" -"checksum http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" -"checksum http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" -"checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" -"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -"checksum hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)" = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" -"checksum hyper-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" -"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" -"checksum indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b54058f0a6ff80b6803da8faf8997cde53872b38f4023728f6830b06cd3c0dc" -"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -"checksum isolang 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9e5855a5a1ba5957e064977b94e5cd15ecbe83904a5191576be11615186cd868" -"checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" -"checksum itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" -"checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" -"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" -"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -"checksum lexical 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dd84e95495f8eddaaa1ad1542e9810a3f0139f18fb985c960e9c74dc5dcf4498" -"checksum lexical-core 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "41aae02f4cbf67c1f57e1a1fa5418db722b5c9fa4a2c47b44d53d6c31cbe040a" -"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" -"checksum libm 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" -"checksum librsvg 2.47.2 (git+https://gitlab.gnome.org/GNOME/librsvg?rev=6ecab568)" = "" -"checksum locale_config 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934" -"checksum lock_api 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "79b2de95ecb4691949fea4716ca53cdbcfccb2c612e19644a8bad05edcf9f47b" -"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" -"checksum mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" -"checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -"checksum markup5ever 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aae38d669396ca9b707bfc3db254bc382ddb94f57cc5c235f34623a669a01dab" -"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" -"checksum matrixmultiply 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d4f7ec66360130972f34830bfad9ef05c6610a43938a467bcc9ab9369ab3478f" -"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" -"checksum memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3197e20c7edb283f87c071ddfc7a2cca8f8e0b888c242959846a6fce03c72223" -"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" -"checksum mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" -"checksum mime_guess 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1a0ed03949aef72dbdf3116a383d7b38b4768e6f960528cd6a6044aa9ed68599" -"checksum miniz_oxide 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6f3f74f726ae935c3f514300cc6773a0c9492abc5e972d42ba0c0ebb88757625" -"checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" -"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum nalgebra 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)" = "aaa9fddbc34c8c35dd2108515587b8ce0cab396f17977b8c738568e4edb521a2" -"checksum native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b2df1a4c22fd44a62147fd8f13dd0f95c9d8ca7b2610299b2a2f9cf8964274e" -"checksum ncollide2d 0.19.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fd7791f03728b7fa45bd18af5adcb6f162a05e10853f273133547e9e12fa1910" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" -"checksum new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" -"checksum nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" -"checksum num-complex 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" -"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" -"checksum num-rational 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "da4dc79f9e6c81bef96148c8f6b8e72ad4541caa4a24373e900a36da07de03a3" -"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 objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" -"checksum objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -"checksum once_cell 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d" -"checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" -"checksum openssl 0.10.26 (registry+https://github.com/rust-lang/crates.io-index)" = "3a3cc5799d98e1088141b8e01ff760112bbd9f19d850c124500566ca6901a585" -"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" -"checksum openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)" = "465d16ae7fc0e313318f7de5cecf57b2fbe7511fd213978b457e1c96ff46736f" -"checksum ordermap 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063" -"checksum pango 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "393fa071b144f8ffb83ede273758983cf414ca3c0b1d2a5a9ce325b3ba3dd786" -"checksum pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "86b93d84907b3cf0819bff8f13598ba72843bee579d5ebc2502e4b0367b4be7d" -"checksum pangocairo 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7486695787f206924b662cb8ca7b3c987fdbbff4ccff3612017cf471aee65162" -"checksum pangocairo-sys 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a3921b31ab776b23e28c8f6e474dda52fdc28bc2689101caeb362ba976719efe" -"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" -"checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" -"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" -"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" -"checksum petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f" -"checksum phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18" -"checksum phf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -"checksum phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e" -"checksum phf_codegen 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -"checksum phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" -"checksum phf_generator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -"checksum phf_macros 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -"checksum phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" -"checksum phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" -"checksum pom 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef5cf7f52c12da93c26b63ee0d9f012bc82fb071851c546c030dc6ecb5f2994b" -"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" -"checksum precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" -"checksum proc-macro-hack 0.5.16 (registry+https://github.com/rust-lang/crates.io-index)" = "7e0456befd48169b9f13ef0f0ad46d492cf9d2dbb918bcf38e01eed4ce3ec5e4" -"checksum proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cd07deb3c6d1d9ff827999c7f9b04cdfd66b1b17ae508e14fe47b620f2282ae0" -"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3acb317c6ff86a4e579dfa00fc5e6cca91ecbb4e7eb2df0468805b674eb88548" -"checksum publicsuffix 1.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" -"checksum pulldown-cmark 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d1b74cc784b038a9921fd1a48310cc2e238101aa8ae0b94201e2d85121dd68b5" -"checksum quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -"checksum quote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1eca14c727ad12702eb4b6bfb5a232287dcf8385cb8ca83a3eeaf6519c44c408" -"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" -"checksum quoted-string 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5a206a30ce37189d1340e7da2ee0b4d65e342590af676541c23a4f3959ba272e" -"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" -"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -"checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -"checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" -"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" -"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -"checksum rand_pcg 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -"checksum rawpointer 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" -"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 rctree 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "be9e29cb19c8fe84169fcb07f8f11e66bc9e6e0280efd4715c54818296f8a4a8" -"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" -"checksum regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b5508c1941e4e7cb19965abef075d35a9a8b5cdf0846f30b4050e9b55dc55e87" -"checksum regex-syntax 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e734e891f5b408a29efbf8309e656876276f49ab6a6ac208600b4419bd893d90" -"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" -"checksum reqwest 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)" = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" -"checksum rsvg_internals 0.0.1 (git+https://gitlab.gnome.org/GNOME/librsvg?rev=6ecab568)" = "" -"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" -"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" -"checksum sauron 0.24.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2ac3055fbee8a35ca88282102f4d58a50b2465d52689b6fe06ae387c2c1525b6" -"checksum sauron_vdom 0.24.0 (registry+https://github.com/rust-lang/crates.io-index)" = "65977ca10d0b763d57f2c586199d368dcd6bd422d0ad1ca43e3a20734a8adb7e" -"checksum schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "87f550b06b6cba9c8b8be3ee73f391990116bf527450d2556e9b9ce263b9a021" -"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" -"checksum security-framework 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8ef2429d7cefe5fd28bd1d2ed41c944547d4ff84776f5935b456da44593a16df" -"checksum security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e31493fc37615debb8c5090a7aeb4a9730bc61e77ab10b9af59f1a202284f895" -"checksum selectors 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" -"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 serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" -"checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" -"checksum serde_json 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)" = "eab8f15f15d6c41a154c1b128a22f2dfabe350ef53c40953d84e36155c91192b" -"checksum serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" -"checksum servo_arc 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" -"checksum sha2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "27044adfd2e1f077f649f59deb9490d3941d674002f7d062870a60ebe9bd47a0" -"checksum single 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd5add732a1ab689845591a1b50339cf5310b563e08dc5813c65991f30369ea2" -"checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" -"checksum siphasher 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fa8f3741c7372e75519bd9346068370c9cdaabcc1f9599cbcf2a2719352286b7" -"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.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44e59e0c9fa00817912ae6e4e6e3c4fe04455e75699d06eedc7d85917ed8e8f4" -"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" -"checksum static_assertions 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -"checksum str-concat 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3468939e48401c4fe3cdf5e5cef50951c2808ed549d1467fde249f1fcb602634" -"checksum string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" -"checksum string_cache 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2940c75beb4e3bf3a494cef919a747a2cb81e52571e212bfbd185074add7208a" -"checksum string_cache_codegen 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f24c8e5e19d22a726626f1a5e16fe15b132dcf21d10177fa5a45ce7962996b97" -"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" -"checksum structopt 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "16c2cdbf9cc375f15d1b4141bc48aeef444806655cd0e904207edc8d68d86ed7" -"checksum structopt-derive 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "53010261a84b37689f9ed7d395165029f9cc7abb9f56bbfe86bee2597ed25107" -"checksum strum 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f6c3a2071519ab6a48f465808c4c1ffdd00dfc8e93111d02b4fc5abab177676e" -"checksum strum_macros 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8baacebd7b7c9b864d83a6ba7a246232983e277b86fa5cdec77f565715a4b136" -"checksum svgbob 0.5.0-alpha.5 (registry+https://github.com/rust-lang/crates.io-index)" = "44bfc246633d2bbfaec823f5278edc631bbcb06ab25055589466d69ba2803bb4" -"checksum syn 0.12.15 (registry+https://github.com/rust-lang/crates.io-index)" = "c97c05b8ebc34ddd6b967994d5c6e9852fa92f8b82b3858c39451f97346dcce5" -"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -"checksum syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "af6f3550d8dff9ef7dc34d384ac6f107e5d31c8f57d9f28e0081503f547ac8f5" -"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" -"checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" -"checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" -"checksum tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "707feda9f2582d5d680d733e38755547a3e8fb471e7ba11452ecfd9ce93a5d3b" -"checksum termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" -"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -"checksum thin-slice 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" -"checksum thiserror 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "54b3d3d2ff68104100ab257bb6bb0cb26c901abe4bd4ba15961f3bf867924012" -"checksum thiserror-impl 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972988113b7715266f91250ddb98070d033c62a011fa0fcc57434a649310dd" -"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" -"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" -"checksum tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" -"checksum tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" -"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" -"checksum tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "ca6df436c42b0c3330a82d855d2ef017cd793090ad550a6bc2184f4b933532ab" -"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" -"checksum tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "6732fe6b53c8d11178dcb77ac6d9682af27fc6d4cb87789449152e5377377146" -"checksum tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d06554cce1ae4a50f42fba8023918afa931413aded705b560e29600ccf7c6d76" -"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" -"checksum tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c32ffea4827978e9aa392d2f743d973c1dfa3730a2ed3f22ce1e6984da848c" -"checksum tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "1739638e364e558128461fc1ad84d997702c8e31c2e6b18fb99842268199e827" -"checksum toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" -"checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" -"checksum try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b" -"checksum typed-arena 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9b2228007eba4120145f785df0f6c92ea538f5a3635a612ecf4e334c8c1446d" -"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" -"checksum unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -"checksum unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" -"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.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" -"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -"checksum url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" -"checksum utf-8 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" -"checksum uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" -"checksum vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" -"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" -"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" -"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" -"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" -"checksum want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" -"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" -"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"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 winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" -"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -"checksum xml-rs 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b07db065a5cf61a7e4ba64f29e67db906fb1787316516c4e6e5ff0fea1efcd8a" +checksum = "b07db065a5cf61a7e4ba64f29e67db906fb1787316516c4e6e5ff0fea1efcd8a" diff --git a/Cargo.toml b/Cargo.toml index 4ab18ee..f1b1584 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,7 @@ typed-arena = "1.4.1" url = "1.7.1" reqwest = "0.9.2" serde = { version = "1.0.89", features = ["derive"] } +serde_json = "1.0.61" toml = "0.5.0" log = "0.4.5" env_logger = "0.5.13" diff --git a/examples/crate/.gitignore b/examples/crate/.gitignore new file mode 100644 index 0000000..2526a8b --- /dev/null +++ b/examples/crate/.gitignore @@ -0,0 +1,5 @@ +/target +**/*.rs.bk + +*.iml +.idea/ diff --git a/examples/crate/Cargo.lock b/examples/crate/Cargo.lock new file mode 100644 index 0000000..ba84263 --- /dev/null +++ b/examples/crate/Cargo.lock @@ -0,0 +1,5 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "example-crate" +version = "0.1.0" diff --git a/examples/crate/Cargo.toml b/examples/crate/Cargo.toml new file mode 100644 index 0000000..d18608c --- /dev/null +++ b/examples/crate/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "example-crate" +version = "0.1.0" +authors = ["Andreas Molzer "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/examples/crate/src/lib.rs b/examples/crate/src/lib.rs new file mode 100644 index 0000000..21d9924 --- /dev/null +++ b/examples/crate/src/lib.rs @@ -0,0 +1,142 @@ +#![allow(dead_code)] +#![allow(unused_variables)] + +/// Documented module abc. +pub mod abc { + /// A simple type. + pub struct SimpleType; +} + +/// A struct with repr annotation. +/// +/// # Usage +/// +/// Just throw some struct on the wall: +/// ```rust +/// use example_crate::KindOfReprC; +/// let x = KindOfReprC; +/// ``` +/// +/// ## Deep section +/// ### Deeper section +/// #### I'm a dwarf +#[repr(C)] +pub struct KindOfReprC(pub u8); + +/// This is used as a return type. +pub struct ReturnType; + +/// An enum with different variants. +pub enum AnEnum { + VariantA, + VariantB, + VariantStruct { + a: ReturnType, + b: usize, + }, +} + +/// Really, a simple union, basically MaybeUninit. +pub union TestUnion { + /// Use this to make everything be uninitialized. + pub a: (), + pub b: usize, +} + +/// This is a simple typdef, don't worry. +pub type TypeDef = KindOfReprC; + +pub struct WithGenerics { + _kay: core::marker::PhantomData<(A, B)>, +} + +/// A trait demonstrating advanced bounds. +pub trait WhatThe: Clone +where + F: std::fmt::Debug +{} + +/// An amazing trait item with a few features. +pub trait ThisIsATrait: Clone { + /// An associated constant. + const CONSTANT: usize; + /// An associated type. + type Type: Copy; + /// An ordinary method taking `&self`. + fn method(&self, param: usize); + /// A generic method with explicit bound. + fn generic(&self, t: T) -> usize + where T: Copy; + /// An ordinary static method. + fn static_method(a: usize); + /// A method that should have an unsafe qualifier. + unsafe fn unsafe_method(); + /// A method that should have extern "C". + extern "C" fn extern_method(); + /// A method provided by default by the trait. + fn provided(&self) -> usize { + 0 + } +} + +pub trait EasyToImpl { + /// A type that must be declared. + type ToDeclare: Clone; + /// A constant attribute that needs to be defined. + const An_ATTRIBTE: usize; + /// A method you do need to impl. + fn method_to_impl(&self); + /// A provided method you do not need to impl. + fn method_not_to_impl(&self) {} +} + +impl KindOfReprC { + pub const CONSTANT: usize = 0; + + /// An associated method of KindOfReprC + pub fn new() -> Self { + KindOfReprC(0) + } +} + +pub mod imports { + pub use crate::KindOfReprC; + /// Glob imports, anyone? + pub use crate::AnEnum::*; +} + +/// Implements the EasyToImpl trait for KindOfReprC. +impl EasyToImpl for KindOfReprC { + type ToDeclare = usize; + const An_ATTRIBTE: usize = 0; + fn method_to_impl(&self) {} +} + +/// A normal function. +pub fn function_item(param: usize) -> ReturnType { + ReturnType +} + +/// A function with a very long signature. +pub fn complicated_function( + long_parameter_name_but_still_okay: usize, + oh_no_a_second_parameter: usize, + and_a_third_one_definitely_makes_the_signature_long: usize, +) -> usize { + 0 +} + +/// A function with a non-Rust ABI. +pub extern "C" fn extern_c() {} + +/// A static, not a constant. +pub static A_STATIC: KindOfReprC = KindOfReprC(0); + +/// A constant with some arbitrary type. +pub const A_CONST: KindOfReprC = KindOfReprC(0u8); +/// A literal number. +pub const A_CONST_LITERAL: u8 = 0u8; +/// Wow, more literals. +pub const A_STR_LITERAL: &'static str = "string literal"; +/// So hidden from public view. +const PRIVATE_CONST: u8 = 0; diff --git a/examples/references.bib b/examples/references.bib new file mode 100644 index 0000000..2d20fe1 --- /dev/null +++ b/examples/references.bib @@ -0,0 +1,18 @@ +@online{foo, + year = {2018}, + author = {{oberien}}, + title = {{Heradoc - Markdown to Latex / Pdf Converter}}, + url = {https://example.com/}, + urldate = {2018-09-18}, +} +@online{bar, + year = {1337}, + author = {{Author}}, + title = {Title}, + url = {url}, +} +@online{wikipedia-markdown, + title = {Markdown Logo}, + urldate = 2019-08-18, + url = {https://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Markdown-mark.svg/208px-Markdown-mark.svg.png}, +} diff --git a/examples/rustdoc.md b/examples/rustdoc.md new file mode 100644 index 0000000..4779b30 --- /dev/null +++ b/examples/rustdoc.md @@ -0,0 +1 @@ +![](rustdoc:crate) diff --git a/examples/rustdoc.pdf b/examples/rustdoc.pdf new file mode 100644 index 0000000..3920c73 Binary files /dev/null and b/examples/rustdoc.pdf differ diff --git a/src/backend/latex/complex/header.rs b/src/backend/latex/complex/header.rs index 865e367..0c07f7f 100644 --- a/src/backend/latex/complex/header.rs +++ b/src/backend/latex/complex/header.rs @@ -3,7 +3,7 @@ use std::io::Write; use crate::backend::{Backend, CodeGenUnit, StatefulCodeGenUnit, latex::Beamer}; use crate::config::Config; -use crate::error::Result; +use crate::error::{Error, Result}; use crate::frontend::range::{WithRange, SourceRange}; use crate::generator::event::{Event, Header}; use crate::generator::Generator; @@ -19,7 +19,26 @@ impl<'a> CodeGenUnit<'a, Header<'a>> for HeaderGen<'a> { gen: &mut Generator<'a, impl Backend<'a>, impl Write>, ) -> Result { let WithRange(Header { label, level }, _range) = header; - write!(gen.get_out(), "\\{}section{{", "sub".repeat(level as usize - 1))?; + + if level > 3 { + if level > 6 { + gen.diagnostics() + .error("Latex backed does not support header nesting more than 6 levels.") + .emit(); + + return Err(Error::Diagnostic); + } + + const MORE_HEADERS: [&str; 3] = [ + "heradocsectionfour", + "heradocsectionfive", + "heradocsectionsix", + ]; + + write!(gen.get_out(), "\\{}{{", MORE_HEADERS[level as usize - 4])?; + } else { + write!(gen.get_out(), "\\{}section{{", "sub".repeat(level as usize - 1))?; + } Ok(HeaderGen { label }) } diff --git a/src/backend/latex/document/article.rs b/src/backend/latex/document/article.rs index f1395cb..afa892d 100644 --- a/src/backend/latex/document/article.rs +++ b/src/backend/latex/document/article.rs @@ -71,6 +71,7 @@ impl<'a> Backend<'a> for Article { // TODO: itemizespacing preamble::write_documentclass(cfg, out, "scrartcl", "")?; preamble::write_packages(cfg, out)?; + preamble::write_deep_headers(cfg, out)?; preamble::write_fixes(cfg, out)?; writeln!(out)?; diff --git a/src/backend/latex/document/thesis.rs b/src/backend/latex/document/thesis.rs index 86f22c1..0079f8c 100644 --- a/src/backend/latex/document/thesis.rs +++ b/src/backend/latex/document/thesis.rs @@ -141,7 +141,7 @@ fn gen_abstract(path: PathBuf, abstract_name: &str, cfg: &Config, out: &mut impl } }; let input = Input::File(path); - let events = gen.get_events(markdown, context, input); + let events = gen.get_events(markdown.into(), context, input); gen.generate_body(events)?; Ok(()) } diff --git a/src/backend/latex/preamble.rs b/src/backend/latex/preamble.rs index 8325c48..2497907 100644 --- a/src/backend/latex/preamble.rs +++ b/src/backend/latex/preamble.rs @@ -141,6 +141,31 @@ pub fn write_fixes(cfg: &Config, out: &mut impl Write) -> Result<()> { Ok(()) } +pub fn write_deep_headers(cfg: &Config, out: &mut impl Write) -> Result<()> { + fn write_simple_header(name: &str, into: &mut impl Write, font: &str, level: i32) -> Result<()> { + writeln!(into, "{}", "\\makeatletter")?; + write!(into, r#"\newcommand\{}"#, name)?; + write!(into, "{}{}{}{}", r#"{\@startsection{"#, name, "}{", level)?; + write!(into, "{}", r#"}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\sffamily"#)?; + write!(into, "{}", font)?; + write!(into, "{}", r#"} + } + \newcommand{"#)?; + write!(into, r#"\{}mark"#, name)?; + writeln!(into, "{}", r#"}[1]{}"#)?; + writeln!(into, "{}", "\\makeatother")?; + Ok(()) + } + + write_simple_header("heradocsectionfour", out, "\\fontsize{14.4pt}{\\f@baselineskip}\\fontseries{b}\\selectfont", 4)?; + write_simple_header("heradocsectionfive", out, "\\fontsize{12pt}{\\f@baselineskip}\\fontseries{b}\\selectfont", 5)?; + write_simple_header("heradocsectionsix", out, "\\fontsize{12pt}{\\f@baselineskip}\\fontshape{it}\\selectfont", 6)?; + Ok(()) +} + /// Allows configuration of the short author field when writing the maketitle info. /// /// Some document types like beamer support a short author field like `\author[short-author]{author}`. @@ -165,7 +190,7 @@ pub fn write_maketitle_info(cfg: &Config, short_author: ShortAuthor, out: &mut i } if cfg.titlehead.is_some() || cfg.logo_university.is_some() { match cfg.document_type { - DocumentType::Article | DocumentType::Report | DocumentType::Thesis => { + DocumentType::Article | DocumentType::Report | DocumentType::Thesis | DocumentType::RustDoc => { writeln!(out, "\\titlehead{{")?; let mut joiner = OutJoiner::new(&mut *out, "\\\\"); if let Some(titlehead) = &cfg.titlehead { diff --git a/src/backend/mod.rs b/src/backend/mod.rs index 3a268d7..6216126 100644 --- a/src/backend/mod.rs +++ b/src/backend/mod.rs @@ -43,6 +43,13 @@ pub fn generate<'a>( Ok(()) } +pub fn generate_rust_docs<'a>( + cfg: &'a Config, backend: impl Backend<'a>, arena: &'a Arena, what_cargo: String, + out: impl Write, stderr: Arc>, +) -> FatalResult<()> { + todo!() +} + #[rustfmt::skip] pub trait Backend<'a>: Sized + Debug { // MediumCodeGenUnits are used for leaf-events, which don't contain any further events. diff --git a/src/config/mod.rs b/src/config/mod.rs index 728e32f..3113f60 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -61,6 +61,8 @@ pub struct FileConfig { /// Defaults to tex for stdout. #[structopt(short = "t", long = "to", long = "out-type", long = "output-type")] pub output_type: Option, + #[structopt(short = "c", long = "cache", long = "cache-dir")] + pub cache_dir: Option, /// Type of the document. #[structopt(long)] @@ -247,6 +249,11 @@ pub struct Config { /// directory. This prevents content injection from untrusted sources and is currently the /// result of choosing this path randomly. TODO: Make this restriction explicit. pub temp_dir: PathBuf, + /// Space for downloaded (or generated?) input files. + /// + /// Defaults to the `temp_dir` if not otherwise configured. + /// TODO: Similar restrictions as to `temp_dir` apply. + pub cache_dir: PathBuf, pub input: FileOrStdio, pub document_folder: PathBuf, pub project_root: PathBuf, @@ -454,8 +461,15 @@ impl Config { Config { output, - out_dir: args.out_dir.unwrap_or_else(|| tempdir.path().to_owned()), + out_dir: args.out_dir + .unwrap_or_else(|| tempdir.path().to_owned()), temp_dir: tempdir_path, + cache_dir: { + let configured = infile.cache_dir + .or(file.cache_dir) + .unwrap_or_else(|| tempdir.path().to_owned()); + project_root.join(configured) + }, input: args.input, document_folder, project_root, @@ -480,7 +494,7 @@ impl Config { .unwrap_or(MaybeUnknown::Known(CitationStyle::Ieee)), figures: args.fileconfig.figures.or(infile.figures).or(file.figures).unwrap_or_else( || match document_type { - DocumentType::Article | DocumentType::Beamer => false, + DocumentType::Article | DocumentType::Beamer | DocumentType::RustDoc => false, DocumentType::Thesis | DocumentType::Report => true, }, ), @@ -692,6 +706,7 @@ pub enum DocumentType { Report, Thesis, Beamer, + RustDoc, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Display, EnumString)] diff --git a/src/frontend/event.rs b/src/frontend/event.rs index 7ecce8c..7576459 100644 --- a/src/frontend/event.rs +++ b/src/frontend/event.rs @@ -5,7 +5,7 @@ pub use pulldown_cmark::Alignment; use enum_kinds::EnumKind; use crate::frontend::range::WithRange; -use crate::resolve::{Command, ResolveSecurity}; +use crate::resolve::{Command, Include as ResolvedInclude, ResolveSecurity}; // extension of pulldown_cmark::Event with custom types #[derive(Debug, EnumKind)] @@ -27,6 +27,8 @@ pub enum Event<'a> { Include(Include<'a>), /// Include to be resolved by the resolver ResolveInclude(Cow<'a, str>), + /// An include generated by an internal frontend, to simulate file inclusion. + SyntheticInclude(ResolvedInclude, Include<'a>, Cow<'a, str>), Label(Cow<'a, str>), SoftBreak, HardBreak, @@ -151,6 +153,7 @@ pub struct Include<'a> { pub scale: Option>>, pub width: Option>>, pub height: Option>>, + pub adjust_headers: bool, } #[derive(Debug, Clone)] diff --git a/src/frontend/mod.rs b/src/frontend/mod.rs index 44d34c0..8aa69a4 100644 --- a/src/frontend/mod.rs +++ b/src/frontend/mod.rs @@ -15,6 +15,7 @@ mod convert_cow; mod event; pub mod range; mod refs; +pub mod rustdoc; mod size; mod table_layout; @@ -443,6 +444,7 @@ impl<'a> Frontend<'a> { scale: cskvp.take_double("scale"), width: cskvp.take_double("width"), height: cskvp.take_double("height"), + adjust_headers: false, }), svgbob_range)); return; }, @@ -840,6 +842,7 @@ impl<'a> Frontend<'a> { scale: cskvp.take_double("scale"), width: cskvp.take_double("width"), height: cskvp.take_double("height"), + adjust_headers: false, }), range, )) diff --git a/src/frontend/rustdoc/mod.rs b/src/frontend/rustdoc/mod.rs new file mode 100644 index 0000000..4310d1f --- /dev/null +++ b/src/frontend/rustdoc/mod.rs @@ -0,0 +1,1507 @@ +use std::borrow::Cow; +use std::collections::{HashSet, VecDeque}; +use std::fs::File; +use std::fmt::Write as _; +use std::sync::Arc; +use std::path::PathBuf; +use std::process::Command; + +use itertools::Itertools as _; + +use crate::config::Config; +use crate::diagnostics::Diagnostics; +use crate::error::{Fatal, FatalResult}; +use crate::frontend::{self, Event, Include, Tag}; +use crate::frontend::range::WithRange; +use crate::resolve::{Context, Include as ResolvedInclude, ResolveSecurity}; + +/// Contains the type definitions, all implementing Deserialize. +mod types; + +use types::{Item, ItemEnum}; + +#[derive(Debug)] +pub struct Rustdoc<'a> { + cfg: &'a Config, + diagnostics: Arc>, + krate: types::Crate, + /// The dynamic state. Implements the actual traversal methods, taking references to the crate + /// data. + appender: RustdocAppender<'a>, +} + +#[derive(Debug)] +struct RustdocAppender<'a> { + context: Context, + simulated_source_path: PathBuf, + /// Stack of started, but not yet finished, portions of the documentation. + stack: Vec, + /// A buffer of events, yielded before continuing with the stack. + buffered: VecDeque>, + diagnostics: Arc>, +} + +pub enum Crate { + Local(PathBuf), +} + +/// Denotes some part of the crate which we have not yet fully documented. +#[derive(Debug)] +enum Traversal { + /// Initially gather crate state, and put root item on stack. + Root, + /// Traverse into an item, dispatching on its kind. + Item(types::Id), +} + +impl<'a> Iterator for Rustdoc<'a> { + type Item = Event<'a>; + fn next(&mut self) -> Option { + loop { + if let Some(buffered) = self.appender.buffered.pop_front() { + return Some(buffered); + } + + if let Some(traverse) = self.appender.stack.pop() { + self.traverse(traverse); + } else { + return None; + } + } + } +} + +impl Crate { + /// Invoke rustdoc to generate the json for this target. + pub fn generate(&self, diag: &Diagnostics<'_>) -> FatalResult { + match self { + Crate::Local(path) => { + let metadata = Command::new("cargo") + .args(&["metadata", "--format-version", "1"]) + .current_dir(&path) + .output()?; + + if !metadata.status.success() { + diag + .error("Cargo metadata failed for crate") + .note(String::from_utf8_lossy(&metadata.stderr)) + .emit(); + return Err(Fatal::Output(std::io::Error::new( + std::io::ErrorKind::InvalidData, + "Metadata call failed", + ))); + } + + let meta: types::WorkspaceMetadata = match serde_json::from_slice(&metadata.stdout) { + Ok(meta) => meta, + Err(err) => { + diag + .error("Failed to parse cargo metadata") + .emit(); + return Err(Fatal::Output(err.into())); + } + }; + + let mut target = PathBuf::from(meta.target_directory); + target.push("doc"); + let krate = meta.workspace_members[0].split(' ').next().unwrap(); + + let format = Command::new("cargo") + .args(&["+nightly", "rustdoc", "-p"]) + .arg(&krate) + .args(&["--", "--output-format", "json"]) + .current_dir(&path) + .output()?; + + if !format.status.success() { + diag + .error("Compiling rustdoc failed") + .note(String::from_utf8_lossy(&metadata.stdout)) + .note(String::from_utf8_lossy(&metadata.stderr)) + .note(format!("Compiling `{}` in `{}`", krate, path.display())) + .emit(); + return Err(Fatal::Output(std::io::Error::new( + std::io::ErrorKind::InvalidData, + "Metadata call failed", + ))); + } + + target.push({ + // FIXME: support actually renamed library targets? + let lib_name = format!("{}.json", krate); + lib_name.replace("-", "_") + }); + + let file = match File::open(&target) { + Ok(file) => file, + Err(err) => { + diag + .error("Failed to open rustdoc output data") + .note(target.display().to_string()) + .emit(); + return Err(Fatal::Output(err)); + } + }; + + match serde_json::from_reader(file) { + Ok(krate) => Ok(krate), + Err(err) => { + diag + .error("Cargo metadata failed for crate") + .note(String::from_utf8_lossy(&format.stderr)) + .note(err.to_string()) + .emit(); + Err(Fatal::Output(err.into())) + } + } + } + } + } +} + +impl<'a> Rustdoc<'a> { + pub fn new( + cfg: &'a Config, + krate: types::Crate, + diagnostics: Arc>, + context: Context, + ) -> Rustdoc<'a> { + Rustdoc { + cfg, + diagnostics: Arc::clone(&diagnostics), + krate, + appender: RustdocAppender::new(cfg, diagnostics, context), + } + } + + pub fn context(&self) -> &Context { + &self.appender.context + } + + pub fn diagnostics(&self) -> Arc> { + self.diagnostics.clone() + } +} + +impl<'a> Rustdoc<'a> { + /// Get the next item while traversing a particular item. + /// This will also push more items or a remaining tail to its stack. + fn traverse(&mut self, what: Traversal) { + match what { + Traversal::Root => self.appender.root(&self.krate), + Traversal::Item(id) => self.append_item_by_id(&id), + } + } + + fn append_item_by_id(&mut self, id: &types::Id) { + if let Some(item) = self.krate.index.get(id) { + let krate = &self.krate; + match item { + Item { inner: ItemEnum::ModuleItem(inner), .. } => { + self.appender.module(krate, item, inner); + }, + Item { inner: ItemEnum::StructItem(inner), .. } => { + self.appender.struct_(krate, item, inner); + }, + Item { inner: ItemEnum::EnumItem(inner), .. } => { + self.appender.enum_(krate, item, inner); + }, + Item { inner: ItemEnum::ConstantItem(inner), .. } => { + self.appender.constant(krate, item, inner); + }, + Item { inner: ItemEnum::StaticItem(inner), .. } => { + self.appender.static_(krate, item, inner); + }, + Item { inner: ItemEnum::FunctionItem(inner), .. } => { + self.appender.function(krate, item, inner); + }, + Item { inner: ItemEnum::TraitItem(inner), .. } => { + self.appender.trait_(krate, item, inner); + }, + Item { inner: ItemEnum::ImplItem(inner), .. } => { + self.appender.impl_(krate, item, inner); + }, + Item { inner: ItemEnum::TypedefItem(inner), .. } => { + self.appender.typedef(krate, item, inner); + }, + Item { inner: ItemEnum::ImportItem(inner), .. } => { + self.appender.import(krate, item, inner); + }, + Item { inner: ItemEnum::ExternCrateItem { name, rename }, .. } => { + self.appender.extern_item(krate, item, name, rename.as_ref()); + }, + Item { kind: types::ItemKind::Primitive, .. } + | Item { kind: types::ItemKind::Keyword, .. } => {}, + _ => eprintln!("Unimplemented {:?}", item), + } + } else { + self.invalid_item(Traversal::Item(id.clone())); + } + } + + /// Invoked when we encounter an unexpected item/reference. + fn invalid_item(&mut self, what: Traversal) { + let mut builder = self.appender.diagnostics + .bug("Unexpected item in rustdoc json output") + .note(format!("Traversing {:?}", what)); + + if let Traversal::Item(id) = what { + if let Some(item) = self.krate.index.get(&id) { + if let Some(name) = &item.name { + builder = builder.note(name); + } + + builder = builder.note(format!("Source Span {:?}", item.source)); + } + } + + builder.emit(); + } +} + +impl<'a> RustdocAppender<'a> { + fn new( + cfg: &'a Config, + diagnostics: Arc>, + context: Context, + ) -> Self { + RustdocAppender { + context, + simulated_source_path: cfg.temp_dir.clone(), + stack: vec![Traversal::Root], + buffered: VecDeque::new(), + diagnostics, + } + } + + fn root(&mut self, krate: &types::Crate) { + let label = self.label_for_id(&krate.root, krate).unwrap(); + let header = frontend::Header { + label: WithRange(Cow::Owned(label), (0..0).into()), + level: 1, + }; + + self.buffered.push_back(Event::Start(Tag::Header(header.clone()))); + self.buffered.push_back(Event::Text({ + let root = krate.paths.get(&krate.root).unwrap(); + let lib_name = root.path[0].clone(); + Cow::Owned(lib_name) + })); + self.buffered.push_back(Event::End(Tag::Header(header))); + + if krate.includes_private { + self.buffered.push_back(Event::Text(Cow::Borrowed( + "Note: This development documentation includes private items which are not accessible from the outside.", + ))); + } + + self.stack.push(Traversal::Item(krate.root.clone())); + } + + // Handle the individual items. + // Each methods types the crate environment, the full item, and its specialized enum internals. + + fn module(&mut self, krate: &types::Crate, item: &Item, module: &types::Module) { + let summary = krate.paths.get(&item.id) + // FIXME: this should fail and diagnose the rendering process, not panic. + .expect("Bad item ID"); + let label = self.label_for_item_at_path(&summary.path); + + let header = frontend::Header { + label: WithRange(Cow::Owned(label), (0..0).into()), + level: 2, + }; + + // Add a header. + self.buffered.push_back(Event::Start(Tag::Header(header.clone()))); + self.buffered.push_back(Event::Text({ + let qualifier = if module.is_crate { "Crate" } else { "Module" }; + let meta = Self::codify_visibility(&item.visibility); + let module_name = self.name_for_item_at_path(&summary.path); + Cow::Owned(format!("{} {}{}", qualifier, meta, module_name)) + })); + self.buffered.push_back(Event::End(Tag::Header(header))); + + // Describe all children in text. + self.buffered.push_back(Event::Start(Tag::List)); + for child in &module.items { + self.buffered.push_back(Event::Start(Tag::Item)); + if let Some(target) = krate.paths.get(child) { + let child_label = self.label_for_item_at_path(&target.path); + + let link = frontend::InterLink { + label: Cow::Owned(child_label), + uppercase: false, + }; + + self.buffered.push_back(Event::Start(Tag::InterLink(link.clone()))); + self.buffered.push_back(Event::Text({ + let item_name = self.name_for_item_at_path(&target.path); + Cow::Owned(item_name) + })); + self.buffered.push_back(Event::End(Tag::InterLink(link))); + } else if let Some(Item { name: Some(name), .. }) = krate.index.get(child) { + self.buffered.push_back(Event::Text(name.clone().into())); + } else if let Some(item) = krate.index.get(child) { + eprintln!("Encountered weird module child: {:?}", item); + } else { + eprintln!("Encountered weird module child with no item: {:?}", child); + } + + self.buffered.push_back(Event::End(Tag::Item)); + } + self.buffered.push_back(Event::End(Tag::List)); + + // And queue to dispatch into children. + for child in module.items.iter().rev() { + self.stack.push(Traversal::Item(child.clone())) + } + } + + fn struct_(&mut self, krate: &types::Crate, item: &Item, struct_: &types::Struct) { + let summary = krate.paths.get(&item.id) + // FIXME: this should fail and diagnose the rendering process, not panic. + .expect("Bad item ID"); + let name = item.name + .as_ref() + .expect("Struct without a name"); + + // Avoid allocating too much below.. + if struct_.fields.len() >= 1_000_000 { + panic!("Number of fields too large, considering opening a pull request to turn this into an iterative procedure."); + } + + let meta = Self::codify_visibility(&item.visibility); + + let mut def: String = item.attrs + .iter() + .map(String::as_str) + .interleave_shortest(std::iter::repeat("\n")) + .collect(); + + let (header_title, title) = match item.kind { + types::ItemKind::Union => ("Union", "union"), + types::ItemKind::Struct => ("Struct", "struct"), + _ => unreachable!("Unexpected struct kind"), + }; + + self.append_header_for_inner_item(header_title, item, summary); + + write!(&mut def, "{}{} {}", meta, title, name) + .expect("Writing to string succeeds"); + def.push_str(&self.codify_generics(krate, &struct_.generics)); + let (start_tag, end_tag) = match struct_.struct_type { + types::StructType::Plain => ("{\n", "}"), + types::StructType::Tuple => ("(\n", ")"), + types::StructType::Unit => ("", ";"), + }; + + def.push_str(start_tag); + let mut field_documentation = vec![]; + for field_id in &struct_.fields { + match krate.index.get(field_id) { + Some(Item { + inner: ItemEnum::StructFieldItem(field), + name: Some(name), + visibility, + docs, + .. + }) => { + let meta = Self::codify_visibility(visibility); + let type_name = self.codify_type(krate, field); + def.push_str(" "); + def.push_str(&meta); + if let types::StructType::Tuple = struct_.struct_type {} else { + def.push_str(name); + def.push_str(": "); + } + def.push_str(&type_name); + def.push_str(",\n"); + field_documentation.push((name, field, type_name, docs)); + } + Some(other) => { + self.diagnostics + .warning(format!("Unhandled variant item: {:?}", other)) + .note(format!("In enum {}", self.name_for_item_at_path(&summary.path))) + .emit(); + } + None => unreachable!("Enum item does not exist?"), + } + } + + if struct_.fields_stripped { + def.push_str(" // some fields omitted\n"); + } + def.push_str(end_tag); + + self.buffered.push_back(Event::Start(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + self.buffered.push_back(Event::Text(Cow::Owned(def))); + self.buffered.push_back(Event::End(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + + self.append_item_docs(item); + + // FIXME: we would like a level-4 header.. + if !field_documentation.is_empty() { + self.buffered.push_back(Event::Start(Tag::Paragraph)); + self.buffered.push_back(Event::Start(Tag::InlineStrong)); + self.buffered.push_back(Event::Text(Cow::Borrowed("Fields"))); + self.buffered.push_back(Event::End(Tag::InlineStrong)); + self.buffered.push_back(Event::End(Tag::Paragraph)); + } + + for (name, _field_type, type_name, docs) in field_documentation { + self.buffered.push_back(Event::Start(Tag::Paragraph)); + + self.buffered.push_back(Event::Start(Tag::InlineCode)); + self.buffered.push_back(Event::Text(Cow::Owned(name.clone()))); + self.buffered.push_back(Event::Text(Cow::Borrowed(": "))); + // FIXME: link to the type, if appropriate. + // self.buffered.push_back(Event::Start(Tag::InterLink(field_type_link.clone()))); + self.buffered.push_back(Event::Text(Cow::Owned(type_name.clone()))); + // self.buffered.push_back(Event::End(Tag::InterLink(field_type_link.clone()))); + self.buffered.push_back(Event::End(Tag::InlineCode)); + + if let Some(docs) = docs { + self.buffered.push_back(Event::Text(Cow::Borrowed(" "))); + // FIXME: treat as recursive markdown? + self.append_docs(docs.clone()); + } + + self.buffered.push_back(Event::End(Tag::Paragraph)); + } + + self.append_impls(krate, item, &struct_.impls); + } + + fn constant(&mut self, krate: &types::Crate, item: &Item, constant: &types::Constant) { + let summary = krate.paths.get(&item.id) + // FIXME: this should fail and diagnose the rendering process, not panic. + .expect("Bad item ID"); + self.append_header_for_inner_item("Constant", item, summary); + + let meta = Self::codify_visibility(&item.visibility); + let mut def = format!("{}const ", meta); + match &item.name { + Some(name) => def.push_str(name), + // FIXME: error handling. + _ => panic!("Const without a name"), + } + def.push_str(": "); + def.push_str(&self.codify_type(krate, &constant.type_)); + def.push_str(" = "); + // TODO: what about constant.value?? + def.push_str(&constant.expr); + def.push(';'); + + self.buffered.push_back(Event::Start(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + self.buffered.push_back(Event::Text(Cow::Owned(def))); + self.buffered.push_back(Event::End(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + + self.append_item_docs(item); + } + + fn static_(&mut self, krate: &types::Crate, item: &Item, constant: &types::Static) { + let summary = krate.paths.get(&item.id) + // FIXME: this should fail and diagnose the rendering process, not panic. + .expect("Bad item ID"); + self.append_header_for_inner_item("Static", item, summary); + + let meta = Self::codify_visibility(&item.visibility); + let mut def = format!("{}static ", meta); + if constant.mutable { + def.push_str("mut "); + } + match &item.name { + Some(name) => def.push_str(name), + // FIXME: error handling. + _ => panic!("Static without a name"), + } + def.push_str(": "); + def.push_str(&self.codify_type(krate, &constant.type_)); + // TODO: or don't ignore `expr`? + def.push(';'); + + self.buffered.push_back(Event::Start(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + self.buffered.push_back(Event::Text(Cow::Owned(def))); + self.buffered.push_back(Event::End(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + + self.append_item_docs(item); + } + + fn function(&mut self, krate: &types::Crate, item: &Item, function: &types::Function) { + let summary = krate.paths.get(&item.id) + // FIXME: this should fail and diagnose the rendering process, not panic. + .expect("Bad item ID"); + let name = item.name + .as_ref() + .expect("Unnamed method"); + self.append_header_for_inner_item("Function", item, summary); + + let meta = Self::codify_visibility(&item.visibility); + let header = self.codify_qualifiers(&function.header); + let abi = Self::codify_abi(&function.abi); + let signature = self.codify_fn_decl(krate, &function.decl); + // FIXME: generics, bounds. + let def = format!("{}{}{}fn {}{}", meta, header, abi, name, signature); + + self.buffered.push_back(Event::Start(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + self.buffered.push_back(Event::Text(Cow::Owned(def))); + self.buffered.push_back(Event::End(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + + self.append_item_docs(item); + } + + fn enum_(&mut self, krate: &types::Crate, item: &Item, enum_: &types::Enum) { + let summary = krate.paths.get(&item.id) + // FIXME: this should fail and diagnose the rendering process, not panic. + .expect("Bad item ID"); + + // Avoid allocating too much below.. + if enum_.variants.len() >= 1_000_000 { + panic!("Number of variants too large, considering opening a pull request to turn this into an iterative procedure."); + } + + let meta = Self::codify_visibility(&item.visibility); + let enum_name = self.name_for_item_at_path(&summary.path); + + let mut def: String = item.attrs + .iter() + .map(String::as_str) + .interleave_shortest(std::iter::repeat("\n")) + .collect(); + + write!(&mut def, "{}enum {}", meta, enum_name) + .expect("Writing to string succeeds"); + def.push_str(&self.codify_generics(krate, &enum_.generics)); + def.push_str(" {\n"); + self.append_header_for_inner_item("Enum", item, summary); + + let mut variant_documentation = vec![]; + for variant_id in &enum_.variants { + if let Some(Item { + inner: ItemEnum::VariantItem(variant), + name: Some(name), + visibility, + docs, + .. + }) = krate.index.get(variant_id) { + // Enum items do not have visibility for now.. + let _ = Self::codify_visibility(visibility); + // FIXME: Different variant kinds. + writeln!(&mut def, " {},", name) + .expect("Writing to string succeeds"); + variant_documentation.push((name, variant, docs)); + } else { + // FIXME: should not occur. + } + } + + if enum_.variants_stripped { + def.push_str(" // some variants omitted\n"); + } + def.push('}'); + + self.buffered.push_back(Event::Start(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + self.buffered.push_back(Event::Text(Cow::Owned(def))); + self.buffered.push_back(Event::End(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + + self.append_item_docs(item); + + // FIXME: we would like a level-4 header.. + if !variant_documentation.is_empty() { + self.buffered.push_back(Event::Start(Tag::Paragraph)); + self.buffered.push_back(Event::Start(Tag::InlineStrong)); + self.buffered.push_back(Event::Text(Cow::Borrowed("Variants"))); + self.buffered.push_back(Event::End(Tag::InlineStrong)); + self.buffered.push_back(Event::End(Tag::Paragraph)); + } + + for (name, _variant, docs) in variant_documentation { + self.buffered.push_back(Event::Start(Tag::Paragraph)); + + self.buffered.push_back(Event::Start(Tag::InlineCode)); + // FIXME: struct variants, including links. + self.buffered.push_back(Event::Text(Cow::Owned(name.clone()))); + self.buffered.push_back(Event::End(Tag::InlineCode)); + + if let Some(docs) = docs { + self.buffered.push_back(Event::Text(Cow::Borrowed(" "))); + self.append_docs(docs.clone()); + } + + self.buffered.push_back(Event::End(Tag::Paragraph)); + } + + self.append_impls(krate, item, &enum_.impls); + } + + fn trait_(&mut self, krate: &types::Crate, item: &Item, trait_: &types::Trait) { + let summary = krate.paths.get(&item.id) + // FIXME: this should fail and diagnose the rendering process, not panic. + .expect("Bad item ID"); + + // Avoid allocating too much below.. + if trait_.items.len() >= 1_000_000 { + panic!("Number of fields too large, considering opening a pull request to turn this into an iterative procedure."); + } + + let vis = Self::codify_visibility(&item.visibility); + let safe = if trait_.is_unsafe { "unsafe " } else { "" }; + let auto = if trait_.is_auto { "auto " } else { "" }; + let trait_name = item.name.as_ref() + .expect("Trait without name"); + + let mut def: String = item.attrs + .iter() + .map(String::as_str) + .interleave_shortest(std::iter::repeat("\n")) + .collect(); + + write!(&mut def, "{}{}{}trait {}", vis, safe, auto, trait_name) + .expect("Writing to string succeeds"); + + let generic_params = trait_.generics.params + .iter() + .map(|param| self.codify_generic_param(krate, param)) + .intersperse(String::from(", ")); + + if !trait_.generics.params.is_empty() { + def.push('<'); + def.push_str(&generic_params.collect::()); + def.push('>'); + } + + let mut bounds = trait_.bounds + .iter() + .map(|bound| self.codify_generic_bound(krate, bound)); + + if let Some(first) = bounds.next() { + if trait_.bounds.len() > 2 { + def.push_str("\n : "); + def.push_str(&first); + let bounds = bounds + .intersperse(String::from("\n + ")) + .collect::(); + def.push_str(&bounds); + } else { + def.push_str(": "); + def.push_str(&first); + for rest in bounds { + def.push_str(" + "); + def.push_str(&rest); + } + } + } + + let predicates = trait_.generics.where_predicates + .iter() + .map(|pred| self.codify_generic_predicate(krate, pred)) + .intersperse(String::from(",\n ")); + + if !trait_.generics.where_predicates.is_empty() { + def.push_str("\nwhere\n "); + def.push_str(&predicates.collect::()); + def.push_str("\n"); + } else { + def.push(' '); + } + + self.append_header_for_inner_item("Trait", item, summary); + + // TODO: print replication of definition. + let mut trait_items = vec![]; + // FIXME: bounds + def.push_str("{\n"); + for item_id in &trait_.items { + match krate.index.get(item_id) { + Some(Item { + inner: ItemEnum::AssocTypeItem { bounds, default }, + name: Some(name), + docs, + .. + }) => { + def.push_str(" type "); + def.push_str(name); + let mut bounds = bounds.iter(); + if let Some(first) = bounds.next() { + def.push_str(": "); + def.push_str(&self.codify_generic_bound(krate, first)); + for rest in bounds { + def.push_str(" + "); + def.push_str(&self.codify_generic_bound(krate, rest)); + } + } + if let Some(type_) = default { + def.push_str(" = "); + def.push_str(&self.codify_type(krate, type_)); + } + def.push_str(";\n"); + + trait_items.push((name, docs)); + } + Some(Item { + inner: ItemEnum::AssocConstItem { type_, default }, + name: Some(name), + docs, + .. + }) => { + def.push_str(" "); + def.push_str(name); + def.push_str(": "); + let type_ = self.codify_type(krate, type_); + def.push_str(&type_); + if let Some(default) = &default { + def.push_str(" = "); + def.push_str(default); + } + def.push_str(";\n"); + + trait_items.push((name, docs)); + } + Some(Item { + inner: ItemEnum::MethodItem(method), + name: Some(name), + docs, + .. + }) => { + def.push_str(" "); + def.push_str(&self.codify_qualifiers(&method.header)); + def.push_str("fn "); + def.push_str(name); + // FIXME: generics + let type_ = self.codify_fn_decl(krate, &method.decl); + def.push_str(&type_); + // FIXME(rustdoc): show if it is defaulted?; as alternative for this terminator if so. + def.push_str(";\n"); + + trait_items.push((name, docs)); + } + Some(other) => { + self.diagnostics + .warning(format!("Unhandled trait item: {:?}", other)) + .note(format!("In {}", self.name_for_item_at_path(&summary.path))) + .emit(); + } + None => unreachable!("Trait item does not exist?"), + } + } + def.push('}'); + + self.buffered.push_back(Event::Start(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + self.buffered.push_back(Event::Text(Cow::Owned(def))); + self.buffered.push_back(Event::End(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + + self.append_item_docs(item); + + // TODO: differentiate between constants, types, required methods, provided methods + // FIXME: we would like a level-4 header.. + if !trait_items.is_empty() { + self.buffered.push_back(Event::Start(Tag::Paragraph)); + self.buffered.push_back(Event::Start(Tag::InlineStrong)); + self.buffered.push_back(Event::Text(Cow::Borrowed("Associated items"))); + self.buffered.push_back(Event::End(Tag::InlineStrong)); + self.buffered.push_back(Event::End(Tag::Paragraph)); + } + + // FIXME: add full declaration with links. + for (name, docs) in trait_items { + self.buffered.push_back(Event::Start(Tag::Paragraph)); + + self.buffered.push_back(Event::Start(Tag::InlineCode)); + // FIXME: struct variants, including links. + self.buffered.push_back(Event::Text(Cow::Owned(name.clone()))); + self.buffered.push_back(Event::End(Tag::InlineCode)); + + if let Some(docs) = docs { + self.buffered.push_back(Event::Text(Cow::Borrowed(" "))); + self.append_docs(docs.clone()) + } + + self.buffered.push_back(Event::End(Tag::Paragraph)); + } + } + + fn impl_(&mut self, krate: &types::Crate, item: &Item, impl_: &types::Impl) { + let mut impl_header = String::from("impl"); + impl_header.push_str(&self.codify_generics(krate, &impl_.generics)); + // FIXME: generics + impl_header.push(' '); + if let Some(trait_) = &impl_.trait_ { + if impl_.negative { + impl_header.push('!'); + } + impl_header.push_str(&self.codify_type(krate, trait_)); + impl_header.push_str(" for "); + } + impl_header.push_str(&self.codify_type(krate, &impl_.for_)); + + self.buffered.push_back(Event::Start(Tag::Paragraph)); + self.buffered.push_back(Event::Start(Tag::InlineCode)); + self.buffered.push_back(Event::Text(Cow::Owned(impl_header))); + self.buffered.push_back(Event::End(Tag::InlineCode)); + self.buffered.push_back(Event::End(Tag::Paragraph)); + + if let Some(docs) = &item.docs { + self.buffered.push_back(Event::Start(Tag::Paragraph)); + self.buffered.push_back(Event::Text(docs.clone().into())); + self.buffered.push_back(Event::End(Tag::Paragraph)); + } + + let mut impl_items = vec![]; + + for item_id in &impl_.items { + match krate.index.get(item_id) { + Some(Item { + inner: ItemEnum::TypedefItem(typedef), + name: Some(name), + visibility, + docs, + .. + }) => { + let meta = Self::codify_visibility(visibility); + let mut def = format!(" {}type ", meta); + def.push_str(name); + def.push_str(" = "); + def.push_str(&self.codify_type(krate, &typedef.type_)); + def.push_str(";\n"); + + impl_items.push((name, def, docs)); + } + Some(Item { + inner: ItemEnum::ConstantItem(const_), + name: Some(name), + visibility, + docs, + .. + }) => { + let meta = Self::codify_visibility(visibility); + let mut def = format!(" {}const ", meta); + def.push_str(name); + def.push_str(": "); + def.push_str(&self.codify_type(krate, &const_.type_)); + def.push_str(" = "); + def.push_str(&const_.expr); + def.push_str(";\n"); + + impl_items.push((name, def, docs)); + } + // FIXME(rustdoc): this is only due to an internal bug in rustdoc where associated + // constants ( impl Type { pub const A: usize = 0 ) appear as AssocConstItem + // instead which would be more appropriate for a trait. + Some(Item { + inner: ItemEnum::AssocConstItem { type_, default: Some(const_def) }, + name: Some(name), + visibility, + docs, + .. + }) => { + let meta = Self::codify_visibility(visibility); + let mut def = format!(" {}const ", meta); + def.push_str(name); + def.push_str(": "); + def.push_str(&self.codify_type(krate, type_)); + def.push_str(" = "); + def.push_str(const_def); + def.push_str(";\n"); + + impl_items.push((name, def, docs)); + } + Some(Item { + inner: ItemEnum::MethodItem(method), + name: Some(name), + visibility, + docs, + .. + }) => { + let meta = Self::codify_visibility(visibility); + let mut def = format!(" {}", meta); + def.push_str(&self.codify_qualifiers(&method.header)); + def.push_str(" fn"); + def.push_str(name); + def.push_str(&self.codify_generics(krate, &method.generics)); + def.push_str(&self.codify_fn_decl(krate, &method.decl)); + + impl_items.push((name, def, docs)); + } + Some(Item { + inner: ItemEnum::FunctionItem(function), + name: Some(name), + visibility, + docs, + .. + }) => { + let meta = Self::codify_visibility(visibility); + let mut def = format!(" {}", meta); + def.push_str(&self.codify_qualifiers(&function.header)); + def.push_str(" fn"); + def.push_str(name); + def.push_str(&self.codify_generics(krate, &function.generics)); + def.push_str(&self.codify_fn_decl(krate, &function.decl)); + + impl_items.push((name, def, docs)); + } + Some(other) => { + self.diagnostics + .warning(format!("Unhandled impl item: {:?}", other)) + .emit(); + } + None => unreachable!("Trait item does not exist?"), + } + } + + for (_name, definition, docs) in impl_items { + self.buffered.push_back(Event::Start(Tag::Paragraph)); + self.buffered.push_back(Event::Start(Tag::InlineCode)); + self.buffered.push_back(Event::Text(Cow::Owned(definition))); + self.buffered.push_back(Event::End(Tag::InlineCode)); + self.buffered.push_back(Event::End(Tag::Paragraph)); + + if let Some(docs) = &docs { + self.buffered.push_back(Event::Start(Tag::Paragraph)); + self.buffered.push_back(Event::Text(docs.clone().into())); + self.buffered.push_back(Event::End(Tag::Paragraph)); + } + } + } + + fn typedef(&mut self, krate: &types::Crate, item: &Item, typedef: &types::Typedef) { + let summary = krate.paths.get(&item.id) + // FIXME: this should fail and diagnose the rendering process, not panic. + .expect("Bad item ID"); + let name = item.name + .as_ref() + .expect("Typedef without name"); + + self.append_header_for_inner_item("Typedef", item, summary); + + let meta = Self::codify_visibility(&item.visibility); + let mut def = format!("{}type ", meta); + def.push_str(name); + def.push_str(" = "); + def.push_str(&self.codify_type(krate, &typedef.type_)); + def.push(';'); + + self.buffered.push_back(Event::Start(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + self.buffered.push_back(Event::Text(Cow::Owned(def))); + self.buffered.push_back(Event::End(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + + self.append_item_docs(item); + } + + fn label_for_id(&self, path: &types::Id, krate: &types::Crate) -> Option { + match krate.paths.get(path) { + Some(summary) => Some(self.label_for_item_at_path(&summary.path)), + None => None, + } + } + + fn codify_visibility(visibility: &types::Visibility) -> String { + match visibility { + types::Visibility::Public => "pub ".to_string(), + types::Visibility::Default => "".to_string(), + types::Visibility::Crate => "pub(crate) ".to_string(), + types::Visibility::Restricted { parent: _, path } => { + format!("pub({}) ", path) + }, + } + } + + fn append_docs(&mut self, docs: String) { + // Include recursively as Markdown. + let include = ResolvedInclude::Markdown( + self.simulated_source_path.clone(), + self.context.clone(), + ); + + let parameter = Include { + // Important: Scope sections under it. + adjust_headers: true, + // Rest of parameters are default. + resolve_security: ResolveSecurity::Default, + label: None, + caption: None, + title: None, + alt_text: None, + // FIXME: need a good way to express this? + dst: "/".into(), + scale: None, + width: None, + height: None, + }; + let source = docs.into(); + self.buffered.push_back(Event::SyntheticInclude(include, parameter, source)); + } + + fn append_item_docs(&mut self, item: &types::Item) { + if let Some(docs) = &item.docs { + self.buffered.push_back(Event::Start(Tag::Paragraph)); + self.append_docs(docs.clone()); + self.buffered.push_back(Event::End(Tag::Paragraph)); + } + } + + fn codify_abi(abi: &str) -> String { + match abi { + "\"Rust\"" => String::new(), + other => format!("extern {} ", other), + } + } + + fn codify_type(&self, krate: &types::Crate, type_: &types::Type) -> String { + #[allow(clippy::enum_glob_use)] + use types::Type::*; + match type_ { + ResolvedPath { name, args, param_names, .. } => { + // FIXME: when name is empty, then the type should be named through its path! + // That happens in things such as: + // ``` + // impl

Deref for Type

{ + // type Target =

::SomeType; + // } + // ``` + // + // Here the Target is described as a QualifiedPath and the `trait_` attribute + // refers to the `Trait` via a ResolvedPath without a name. + let mut name = name.clone(); + match args.as_ref().map(|a| &**a) { + None => {}, + Some(types::GenericArgs::AngleBracketed { args, bindings }) => { + let str_args = args + .iter() + .map(|arg| self.codify_generic_arg(krate, arg)); + + let str_bindings = bindings + .iter() + .map(|arg| self.codify_generic_binding(krate, arg)); + + let str_all = str_args + .chain(str_bindings) + .intersperse(String::from(", ")); + + if !args.is_empty() || !bindings.is_empty() { + name.push('<'); + name.push_str(&str_all.collect::()); + name.push('>'); + } + }, + Some(types::GenericArgs::Parenthesized { .. }) => { + self.diagnostics + .warning("Encountered parenthesized type arguments, those are unimplemented") + .emit(); + }, + } + name + }, + Generic(st) | Primitive(st) => st.clone(), + Tuple(items) => { + let mut items = items.iter(); + let first = match items.next() { + None => return "()".into(), + Some(first) => first, + }; + let mut name = format!("({}", self.codify_type(krate, first)); + for type_ in items { + name.push(','); + name.push_str(&self.codify_type(krate, type_)); + } + name.push(')'); + name + }, + Slice(inner) => format!("[{}]", self.codify_type(krate, inner)), + Array { type_, len } => { + format!("[{}; {}]", self.codify_type(krate, type_), len) + }, + // ImplTrait.. + Never => "!".into(), + Infer => "_".into(), + RawPointer { mutable, type_ } => { + let qualifier = if *mutable { "mut" } else { "const" }; + format!("*{} {}", qualifier, self.codify_type(krate, type_)) + } + BorrowedRef { lifetime, mutable, type_ } => { + let lifetime = lifetime.as_ref().map_or_else(String::new, |st| format!("{} ", st)); + let qualifier = if *mutable { "mut " } else { "" }; + let type_ = self.codify_type(krate, type_); + format!("&{}{}{}", lifetime, qualifier, type_) + } + QualifiedPath { name, self_type, trait_ } => { + let self_type = self.codify_type(krate, self_type); + let trait_ = self.codify_type(krate, trait_); + format!("<{} as {}>::{}", self_type, trait_, name) + } + ImplTrait(bounds) => { + let mut bounds = bounds.iter(); + if let Some(first) = bounds.next() { + let mut bound = String::from("impl "); + bound.push_str(&self.codify_generic_bound(krate, first)); + for rest in bounds { + bound.push_str(" + "); + bound.push_str(&self.codify_generic_bound(krate, rest)); + } + bound + } else { + unreachable!("impl type without any named bounds"); + } + } + FunctionPointer(fnptr) => { + // FIXME: for<'a> lifetime parameters. + let mut base = self.codify_qualifiers(&fnptr.header); + if !fnptr.abi.is_empty() { + base.push_str("extern "); + base.push_str(&fnptr.abi); + base.push(' '); + } + base.push_str(&self.codify_fn_decl(krate, &fnptr.decl)); + base + } + } + } + + fn import(&mut self, krate: &types::Crate, item: &types::Item, import: &types::Import) { + let summary = krate.paths.get(&item.id) + // FIXME: this should fail and diagnose the rendering process, not panic. + .expect("Bad item ID"); + + self.append_header_for_inner_item("Import", item, summary); + + let mut def = Self::codify_visibility(&item.visibility); + def.push_str("use "); + def.push_str(&import.span); + def.push_str(";"); + + self.buffered.push_back(Event::Start(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + self.buffered.push_back(Event::Text(Cow::Owned(def))); + self.buffered.push_back(Event::End(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + + if let Some(docs) = &item.docs { + self.buffered.push_back(Event::Start(Tag::Paragraph)); + self.buffered.push_back(Event::Text(docs.clone().into())); + self.buffered.push_back(Event::End(Tag::Paragraph)); + } + } + + // FIXME(rustdoc) for some reason this also represents re-exports right now. + // pub mod inner { pub struct Outer; } + // pub use inner::Outer; + fn extern_item(&mut self, krate: &types::Crate, item: &types::Item, import: &String, rename: Option<&String>) { + let header = frontend::Header { + label: WithRange(Cow::Borrowed(""), (0..0).into()), + level: 2, + }; + + let meta = Self::codify_visibility(&item.visibility); + self.buffered.push_back(Event::Start(Tag::Header(header.clone()))); + self.buffered.push_back(Event::Text({ + Cow::Owned(format!("Re-export {}{}", meta, import)) + })); + self.buffered.push_back(Event::End(Tag::Header(header.clone()))); + + let mut def = Self::codify_visibility(&item.visibility); + def.push_str("use "); + def.push_str(&import); + if let Some(rename) = rename { + def.push_str(" as "); + def.push_str(rename); + } + def.push_str(";"); + + self.buffered.push_back(Event::Start(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + self.buffered.push_back(Event::Text(Cow::Owned(def))); + self.buffered.push_back(Event::End(Tag::CodeBlock(Self::RUST_CODE_BLOCK))); + + if let Some(docs) = &item.docs { + self.buffered.push_back(Event::Start(Tag::Paragraph)); + self.buffered.push_back(Event::Text(docs.clone().into())); + self.buffered.push_back(Event::End(Tag::Paragraph)); + } + } + + fn codify_fn_decl(&self, krate: &types::Crate, decl: &types::FnDecl) -> String { + let inputs: Vec<_> = decl.inputs + .iter() + .map(|(name, type_)| { + format!("{}: {}", name, self.codify_type(krate, type_)) + }) + .collect(); + + let in_len: usize = inputs.iter().map(|st| st.chars().count()).sum(); + + let output = if let Some(type_) = &decl.output { + format!(" -> {}", self.codify_type(krate, type_)) + } else { + "".into() + }; + + let out_len: usize = output.chars().count(); + + // FIXME: this simplistic model counts unicode code points. + // It would be more accurate to use something else. + + // We have three styles: + // * (arg, arg, arg) -> Output + // * (arg, arg, arg) + // -> Output + // * ( + // arg1, + // arg2, + // ) -> Output + // * + // Break around (), break between args, break before output. + let (list_break, arg_break, out_break) = if in_len + out_len < 80 { + // Same line for everything, arguments and output + (false, false, false) + } else if in_len < 120 { + (true, false, true) + } else { + (true, true, false) + }; + + let mut decl = String::from("("); + if list_break { + decl.push_str("\n "); + } + let mut inputs = inputs.into_iter(); + if let Some(first) = inputs.next() { + decl.push_str(&first); + for rest in inputs { + if arg_break { + decl.push_str(",\n "); + } else { + decl.push_str(", "); + } + decl.push_str(&rest); + } + } + if list_break { + decl.push('\n'); + } + decl.push(')'); + if out_break { + decl.push_str("\n "); + } + decl.push_str(&output); + decl + } + + fn codify_generics(&self, krate: &types::Crate, bound: &types::Generics) -> String { + let generics = bound.params + .iter() + .map(|param| self.codify_generic_param(krate, param)) + .intersperse(String::from(", ")); + + let predicates = bound.where_predicates + .iter() + .map(|pred| self.codify_generic_predicate(krate, pred)) + .intersperse(String::from(",\n ")); + + match (bound.params.is_empty(), bound.where_predicates.is_empty()) { + (false, false) => format!( + "<{}>\nwhere\n {}", + generics.collect::(), + predicates.collect::() + ), + (true, false) => format!("\nwhere\n {}", predicates.collect::()), + (false, true) => format!("<{}>", generics.collect::()), + (true, true) => String::new(), + } + } + + fn codify_qualifiers(&self, quals: &HashSet) -> String { + let mut quals = quals.clone(); + let mut stringified = String::new(); + + if quals.remove(&types::Qualifiers::Async) { + stringified.push_str(" async"); + } + + if quals.remove(&types::Qualifiers::Const) { + stringified.push_str(" const"); + } + + if quals.remove(&types::Qualifiers::Unsafe) { + stringified.push_str(" unsafe"); + } + + if let Some(non_space) = stringified.find(|c| c != ' ') { + let _ = stringified.drain(..non_space); + } + + stringified + } + + fn codify_generic_param(&self, krate: &types::Crate, param: &types::GenericParamDef) -> String { + match ¶m.kind { + types::GenericParamDefKind::Lifetime => param.name.clone(), + types::GenericParamDefKind::Type { bounds, default } => { + let str_bounds = bounds + .iter() + .map(|bound| self.codify_generic_bound(krate, bound)) + .intersperse(String::from(" + ")); + let mut def = param.name.clone(); + if !bounds.is_empty() { + def.push_str(": "); + def.push_str(&str_bounds.collect::()); + } + if let Some(default) = default { + def.push_str(" = "); + def.push_str(&self.codify_type(krate, default)); + } + def + }, + types::GenericParamDefKind::Const(const_) => { + format!("const {}: {}", ¶m.name, self.codify_type(krate, const_)) + }, + } + } + + fn codify_generic_predicate(&self, krate: &types::Crate, predicate: &types::WherePredicate) -> String { + match predicate { + types::WherePredicate::BoundPredicate { ty, bounds } => { + let bound: String = bounds + .iter() + .map(|bound| self.codify_generic_bound(krate, bound)) + .intersperse(String::from(" + ")) + .collect(); + format!("{}: {}", self.codify_type(krate, ty), bound) + }, + types::WherePredicate::RegionPredicate { lifetime, bounds } => { + let bound: String = bounds + .iter() + .map(|bound| self.codify_generic_bound(krate, bound)) + .intersperse(String::from(" + ")) + .collect(); + format!("{}: {}", lifetime, bound) + }, + types::WherePredicate::EqPredicate { lhs: _, rhs: _ } => { + self.diagnostics + .warning("Equality bounds are not yet supported and will be ignored") + .emit(); + String::new() + }, + } + } + + fn codify_generic_arg(&self, krate: &types::Crate, arg: &types::GenericArg) -> String { + match arg { + types::GenericArg::Lifetime(lifetime) => lifetime.clone(), + types::GenericArg::Type(type_) => self.codify_type(krate, type_), + types::GenericArg::Const(constant) => { + format!("{{{}}}", constant.expr) + }, + } + } + + fn codify_generic_binding(&self, krate: &types::Crate, binding: &types::TypeBinding) -> String { + match &binding.binding { + types::TypeBindingKind::Equality(rhs) => { + format!("{}={}", &binding.name, &self.codify_type(krate, rhs)) + } + types::TypeBindingKind::Constraint(bounds) => { + let str_bounds = bounds + .iter() + .map(|bound| self.codify_generic_bound(krate, bound)) + .intersperse(String::from(" + ")); + + if bounds.is_empty() { + self.diagnostics + .warning("Generic constraint binding has no bounds?") + .emit(); + String::new() + } else { + format!("{}: {}", &binding.name, &str_bounds.collect::()) + } + } + } + } + + fn codify_generic_bound(&self, krate: &types::Crate, bound: &types::GenericBound) -> String { + match bound { + types::GenericBound::Outlives(lifetime) => lifetime.clone(), + types::GenericBound::TraitBound { trait_, generic_params, modifier } => { + if let types::TraitBoundModifier::None = modifier {} else { + // FIXME: implement this + self.diagnostics + .warning("Trait bound modifiers are not implemented") + .note(format!("Printing {:?}", modifier)) + .emit(); + }; + + if !generic_params.is_empty() { + // FIXME: implement this + self.diagnostics + .warning("Generic parameters are not implemented") + .note(format!("Omitting {} parameters for {:?}", generic_params.len(), trait_)) + .emit(); + } + + self.codify_type(krate, trait_) + } + } + } + + fn name_for_item_at_path(&self, path: &[String]) -> String { + path.join("::") + } + + fn label_for_item_at_path(&self, path: &[String]) -> String { + path.join("-") + } + + fn append_header_for_inner_item( + &mut self, + kind: &str, + item: &Item, + summary: &types::ItemSummary, + ) { + let label = self.label_for_item_at_path(&summary.path); + + let header = frontend::Header { + label: WithRange(Cow::Owned(label.clone()), (0..0).into()), + level: 2, + }; + + let meta = Self::codify_visibility(&item.visibility); + self.buffered.push_back(Event::Start(Tag::Header(header.clone()))); + self.buffered.push_back(Event::Text({ + let const_name = self.name_for_item_at_path(&summary.path); + Cow::Owned(format!("{} {}{}", kind, meta, const_name)) + })); + self.buffered.push_back(Event::End(Tag::Header(header.clone()))); + } + + fn append_impls( + &mut self, + krate: &types::Crate, + item: &Item, + impls: &[types::Id], + ) { + // FIXME: differentiate by kind with headers + // let mut intrinsic = vec![]; + // let mut well_known = vec![]; + // let mut other_traits = vec![]; + + if !impls.is_empty() { + self.buffered.push_back(Event::Start(Tag::Paragraph)); + self.buffered.push_back(Event::Start(Tag::InlineStrong)); + self.buffered.push_back(Event::Text(Cow::Borrowed("Implementations"))); + self.buffered.push_back(Event::End(Tag::InlineStrong)); + self.buffered.push_back(Event::End(Tag::Paragraph)); + } + + for impl_ in impls.iter().rev() { + self.stack.push(Traversal::Item(impl_.clone())); + } + } + + const RUST_CODE_BLOCK: frontend::CodeBlock<'static> = frontend::CodeBlock { + label: None, + caption: None, + language: Some(WithRange( + Cow::Borrowed("rust"), + crate::frontend::range::SourceRange { + start: 0, + end: 0, + } + )), + }; +} diff --git a/src/frontend/rustdoc/types.rs b/src/frontend/rustdoc/types.rs new file mode 100644 index 0000000..46b5cbc --- /dev/null +++ b/src/frontend/rustdoc/types.rs @@ -0,0 +1,551 @@ +// Adopted from: rust-lang/rust, c254a15906d6ad64821659b50c4265c96b113159, src/librustdoc/json/types.rs +//! Rustdoc's JSON output interface +//! +//! These types are the public API exposed through the `--output-format json` flag. The [`Crate`] +//! struct is the root of the JSON blob and all other items are contained within. + +/// Parser cargo metadata json output, format 1. +#[derive(Deserialize)] +pub struct WorkspaceMetadata { + pub packages: Vec, + pub target_directory: String, + pub workspace_members: Vec, +} + +#[derive(Deserialize)] +pub struct CrateMetadata { + pub name: String, + #[serde(default)] + pub version: Option, + #[serde(default)] + pub description: Option, + pub authors: Vec, + #[serde(default)] + pub readme: Option, +} + +use std::path::PathBuf; + +use std::collections::{HashMap, HashSet}; +use serde::Deserialize; + +/// A `Crate` is the root of the emitted JSON blob. It contains all type/documentation information +/// about the language items in the local crate, as well as info about external items to allow +/// tools to find or link to them. +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Crate { + /// A single version number to be used in the future when making backwards incompatible changes + /// to the JSON output. + #[serde(rename = "format_version")] + pub _compatible_version: CompatibleVersion, + /// The id of the root [`Module`] item of the local crate. + pub root: Id, + /// The version string given to `--crate-version`, if any. + pub crate_version: Option, + /// Whether or not the output includes private items. + pub includes_private: bool, + /// A collection of all items in the local crate as well as some external traits and their + /// items that are referenced locally. + pub index: HashMap, + /// Maps IDs to fully qualified paths and other info helpful for generating links. + pub paths: HashMap, + /// Maps `crate_id` of items to a crate name and html_root_url if it exists. + pub external_crates: HashMap, +} + +#[derive(Clone, Debug, PartialEq)] +pub struct CompatibleVersion(u32); + +impl<'de> Deserialize<'de> for CompatibleVersion { + fn deserialize>(d: D) + -> Result + { + const NIGHTLY_AT_2021_02_19: u32 = 4; + match u32::deserialize(d)? { + num @ NIGHTLY_AT_2021_02_19 => Ok(CompatibleVersion(num)), + other => { + use serde::de::{Error, Unexpected}; + let unexpected = Unexpected::Unsigned(other.into()); + Err(D::Error::invalid_value(unexpected, &"the exact version 4")) + } + } + } +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct ExternalCrate { + pub name: String, + pub html_root_url: Option, +} + +/// For external (not defined in the local crate) items, you don't get the same level of +/// information. This struct should contain enough to generate a link/reference to the item in +/// question, or can be used by a tool that takes the json output of multiple crates to find +/// the actual item definition with all the relevant info. +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct ItemSummary { + /// Can be used to look up the name and html_root_url of the crate this item came from in the + /// `external_crates` map. + pub crate_id: u32, + /// The list of path components for the fully qualified path of this item (e.g. + /// `["std", "io", "lazy", "Lazy"]` for `std::io::lazy::Lazy`). + pub path: Vec, + /// Whether this item is a struct, trait, macro, etc. + pub kind: ItemKind, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Item { + /// The unique identifier of this item. Can be used to find this item in various mappings. + pub id: Id, + /// This can be used as a key to the `external_crates` map of [`Crate`] to see which crate + /// this item came from. + pub crate_id: u32, + /// Some items such as impls don't have names. + pub name: Option, + /// The source location of this item (absent if it came from a macro expansion or inline + /// assembly). + pub source: Option, + /// By default all documented items are public, but you can tell rustdoc to output private items + /// so this field is needed to differentiate. + pub visibility: Visibility, + /// The full markdown docstring of this item. Absent if there is no documentation at all, + /// Some("") if there is some documentation but it is empty (EG `#[doc = ""]`). + pub docs: Option, + /// This mapping resolves [intra-doc links](https://github.com/rust-lang/rfcs/blob/master/text/1946-intra-rustdoc-links.md) from the docstring to their IDs + pub links: HashMap, + /// Stringified versions of the attributes on this item (e.g. `"#[inline]"`) + pub attrs: Vec, + pub deprecation: Option, + pub kind: ItemKind, + pub inner: ItemEnum, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Span { + /// The path to the source file for this span relative to the path `rustdoc` was invoked with. + pub filename: PathBuf, + /// Zero indexed Line and Column of the first character of the `Span` + pub begin: (usize, usize), + /// Zero indexed Line and Column of the last character of the `Span` + pub end: (usize, usize), +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Deprecation { + pub since: Option, + pub note: Option, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum Visibility { + Public, + /// For the most part items are private by default. The exceptions are associated items of + /// public traits and variants of public enums. + Default, + Crate, + /// For `pub(in path)` visibility. `parent` is the module it's restricted to and `path` is how + /// that module was referenced (like `"super::super"` or `"crate::foo::bar"`). + Restricted { + parent: Id, + path: String, + }, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum GenericArgs { + /// <'a, 32, B: Copy, C = u32> + AngleBracketed { args: Vec, bindings: Vec }, + /// Fn(A, B) -> C + Parenthesized { inputs: Vec, output: Option }, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum GenericArg { + Lifetime(String), + Type(Type), + Const(Constant), +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Constant { + #[serde(rename = "type")] + pub type_: Type, + pub expr: String, + pub value: Option, + pub is_literal: bool, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct TypeBinding { + pub name: String, + pub binding: TypeBindingKind, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum TypeBindingKind { + Equality(Type), + Constraint(Vec), +} + +#[derive(Clone, Debug, PartialEq, Eq, Hash, Deserialize)] +pub struct Id(pub String); + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum ItemKind { + Module, + ExternCrate, + Import, + Struct, + StructField, + Union, + Enum, + Variant, + Function, + Typedef, + OpaqueTy, + Constant, + Trait, + TraitAlias, + Method, + Impl, + Static, + ForeignType, + Macro, + ProcAttribute, + ProcDerive, + AssocConst, + AssocType, + Primitive, + Keyword, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(untagged)] +pub enum ItemEnum { + ModuleItem(Module), + ExternCrateItem { + name: String, + rename: Option, + }, + ImportItem(Import), + + StructItem(Struct), + UnionItem(Union), + StructFieldItem(Type), + EnumItem(Enum), + VariantItem(Variant), + + FunctionItem(Function), + + TraitItem(Trait), + TraitAliasItem(TraitAlias), + MethodItem(Method), + ImplItem(Impl), + + TypedefItem(Typedef), + OpaqueTyItem(OpaqueTy), + ConstantItem(Constant), + + StaticItem(Static), + + /// `type`s from an extern block + ForeignTypeItem, + + /// Declarative macro_rules! macro + MacroItem(String), + ProcMacroItem(ProcMacro), + + AssocConstItem { + #[serde(rename = "type")] + type_: Type, + /// e.g. `const X: usize = 5;` + default: Option, + }, + AssocTypeItem { + bounds: Vec, + /// e.g. `type X = usize;` + default: Option, + }, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Module { + pub is_crate: bool, + pub items: Vec, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Union { + pub generics: Generics, + pub fields_stripped: bool, + pub fields: Vec, + pub impls: Vec, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Struct { + pub struct_type: StructType, + pub generics: Generics, + pub fields_stripped: bool, + pub fields: Vec, + pub impls: Vec, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Enum { + pub generics: Generics, + pub variants_stripped: bool, + pub variants: Vec, + pub impls: Vec, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +#[serde(tag = "variant_kind", content = "variant_inner")] +pub enum Variant { + Plain, + Tuple(Vec), + Struct(Vec), +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum StructType { + Plain, + Tuple, + Unit, +} + +#[non_exhaustive] +#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Hash)] +#[serde(rename_all = "snake_case")] +pub enum Qualifiers { + Const, + Unsafe, + Async, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Function { + pub decl: FnDecl, + pub generics: Generics, + pub header: HashSet, + pub abi: String, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Method { + pub decl: FnDecl, + pub generics: Generics, + pub header: HashSet, + pub abi: Option, + pub has_body: bool, +} + +#[derive(Clone, Debug, Default, Deserialize, PartialEq)] +pub struct Generics { + pub params: Vec, + pub where_predicates: Vec, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct GenericParamDef { + pub name: String, + pub kind: GenericParamDefKind, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum GenericParamDefKind { + Lifetime, + Type { bounds: Vec, default: Option }, + Const(Type), +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum WherePredicate { + BoundPredicate { ty: Type, bounds: Vec }, + RegionPredicate { lifetime: String, bounds: Vec }, + EqPredicate { lhs: Type, rhs: Type }, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum GenericBound { + TraitBound { + #[serde(rename = "trait")] + trait_: Type, + /// Used for HRTBs + generic_params: Vec, + modifier: TraitBoundModifier, + }, + Outlives(String), +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum TraitBoundModifier { + None, + Maybe, + MaybeConst, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +#[serde(tag = "kind", content = "inner")] +pub enum Type { + /// Structs, enums, and traits + ResolvedPath { + name: String, + id: Id, + args: Option>, + param_names: Vec, + }, + /// Parameterized types + Generic(String), + /// Fixed-size numeric types (plus int/usize/float), char, arrays, slices, and tuples + Primitive(String), + /// `extern "ABI" fn` + FunctionPointer(Box), + /// `(String, u32, Box)` + Tuple(Vec), + /// `[u32]` + Slice(Box), + /// [u32; 15] + Array { + #[serde(rename = "type")] + type_: Box, + len: String, + }, + /// `impl TraitA + TraitB + ...` + ImplTrait(Vec), + /// `!` + Never, + /// `_` + Infer, + /// `*mut u32`, `*u8`, etc. + RawPointer { + mutable: bool, + #[serde(rename = "type")] + type_: Box, + }, + /// `&'a mut String`, `&str`, etc. + BorrowedRef { + lifetime: Option, + mutable: bool, + #[serde(rename = "type")] + type_: Box, + }, + /// `::Name` or associated types like `T::Item` where `T: Iterator` + QualifiedPath { + name: String, + self_type: Box, + #[serde(rename = "trait")] + trait_: Box, + }, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct FunctionPointer { + pub decl: FnDecl, + pub generic_params: Vec, + pub header: HashSet, + pub abi: String, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct FnDecl { + pub inputs: Vec<(String, Type)>, + pub output: Option, + pub c_variadic: bool, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Trait { + pub is_auto: bool, + pub is_unsafe: bool, + pub items: Vec, + pub generics: Generics, + pub bounds: Vec, + pub implementors: Vec, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct TraitAlias { + pub generics: Generics, + pub params: Vec, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Impl { + pub is_unsafe: bool, + pub generics: Generics, + pub provided_trait_methods: Vec, + #[serde(rename = "trait")] + pub trait_: Option, + #[serde(rename = "for")] + pub for_: Type, + pub items: Vec, + pub negative: bool, + pub synthetic: bool, + pub blanket_impl: Option, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +pub struct Import { + /// The full path being imported. + pub span: String, + /// May be different from the last segment of `source` when renaming imports: + /// `use source as name;` + pub name: String, + /// The ID of the item being imported. + pub id: Option, // FIXME is this actually ever None? + /// Whether this import uses a glob: `use source::*;` + pub glob: bool, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct ProcMacro { + pub kind: MacroKind, + pub helpers: Vec, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum MacroKind { + /// A bang macro `foo!()`. + Bang, + /// An attribute macro `#[foo]`. + Attr, + /// A derive macro `#[derive(Foo)]` + Derive, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Typedef { + #[serde(rename = "type")] + pub type_: Type, + pub generics: Generics, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct OpaqueTy { + pub bounds: Vec, + pub generics: Generics, +} + +#[derive(Clone, Debug, Deserialize, PartialEq)] +pub struct Static { + #[serde(rename = "type")] + pub type_: Type, + pub mutable: bool, + pub expr: String, +} diff --git a/src/generator/code_gen_units.rs b/src/generator/code_gen_units.rs index f710a90..9bd0454 100644 --- a/src/generator/code_gen_units.rs +++ b/src/generator/code_gen_units.rs @@ -40,7 +40,7 @@ pub enum StackElement<'a, B: Backend<'a>> { Graphviz(B::Graphviz), // resolve context - Context(Context, Arc>), + Context(Context, Arc>, i32), } use self::StackElement::*; diff --git a/src/generator/event.rs b/src/generator/event.rs index d3c8938..9b04595 100644 --- a/src/generator/event.rs +++ b/src/generator/event.rs @@ -22,6 +22,7 @@ pub use crate::frontend::{ Table, TaskListMarker, Url, + rustdoc::Rustdoc, }; pub use pulldown_cmark::Alignment; @@ -40,6 +41,7 @@ pub enum Event<'a> { InlineHtml(Cow<'a, str>), Latex(Cow<'a, str>), IncludeMarkdown(Box>), + IncludeRustdoc(Box>), FootnoteReference(FootnoteReference<'a>), BiberReferences(Vec>), /// Url without content @@ -197,7 +199,7 @@ impl<'a> From> for Event<'a> { FeEvent::Url(url) => Event::Url(url), FeEvent::InterLink(interlink) => Event::InterLink(interlink), FeEvent::Include(_img) => unreachable!("Include is handled by Generator"), - FeEvent::ResolveInclude(_include) => { + FeEvent::ResolveInclude(_) | FeEvent::SyntheticInclude(..) => { unreachable!("ResolveInclude is handled by Generator") }, FeEvent::Label(label) => Event::Label(label), diff --git a/src/generator/iter.rs b/src/generator/iter.rs index 4d0f200..ef594b2 100644 --- a/src/generator/iter.rs +++ b/src/generator/iter.rs @@ -1,4 +1,5 @@ use std::collections::VecDeque; +use std::borrow::Cow; use std::fs; use std::io::Write; use std::iter::Fuse; @@ -8,12 +9,15 @@ use crate::diagnostics::Input; use crate::error::{Error, FatalResult, Result}; use crate::frontend::{Event as FeEvent, EventKind as FeEventKind, Frontend, Include as FeInclude, Graphviz}; use crate::frontend::range::WithRange; +use crate::frontend::rustdoc::{Crate, Rustdoc}; use crate::generator::event::{Event, Tag, Image, Pdf, Svg}; use crate::generator::Generator; use crate::resolve::{Include, ContextType, ResolveSecurity}; -pub struct Iter<'a> { - frontend: Fuse>, +type FeEvents<'a> = dyn Iterator>> + 'a; + +pub struct MarkdownIter<'a> { + frontend: Fuse>>, peek: VecDeque<(WithRange>, FeEventKind)>, /// Contains the kind of the last FeEvent returned from `Self::next()`. /// @@ -22,9 +26,27 @@ pub struct Iter<'a> { last_kind: FeEventKind, } -impl<'a> Iter<'a> { +enum IncludeSource<'a> { + Resolve, + Image(FeInclude<'a>), + Synthetic { + parameter: FeInclude<'a>, + source: Cow<'a, str>, + }, +} + +impl<'a> MarkdownIter<'a> { pub fn new(frontend: Frontend<'a>) -> Self { - Iter { frontend: frontend.fuse(), peek: VecDeque::new(), last_kind: FeEventKind::Start } + let frontend: Box> = Box::new(frontend); + MarkdownIter { frontend: frontend.fuse(), peek: VecDeque::new(), last_kind: FeEventKind::Start } + } + + pub fn with_rustdoc(rustdoc: Rustdoc<'a>) -> Self { + let frontend: Box> = Box::new(rustdoc.map(|event| { + WithRange(event, (0..0).into()) + })); + + MarkdownIter { frontend: frontend.fuse(), peek: VecDeque::new(), last_kind: FeEventKind::Start } } /// Retrieves and converts the next event that needs to be handled. @@ -88,6 +110,7 @@ impl<'a> Iter<'a> { | FeEventKind::InterLink | FeEventKind::Include | FeEventKind::ResolveInclude + | FeEventKind::SyntheticInclude | FeEventKind::Label | FeEventKind::SoftBreak | FeEventKind::HardBreak @@ -117,56 +140,89 @@ impl<'a> Iter<'a> { match event { FeEvent::Include(image) => { let include = gen.resolve(image.resolve_security, &image.dst, range)?; - self.convert_include(WithRange(include, range), Some(image), gen) + let source = IncludeSource::Image(image); + self.convert_include(WithRange(include, range), source, gen) }, FeEvent::ResolveInclude(include) => { let include = gen.resolve(ResolveSecurity::Default, &include, range)?; - self.convert_include(WithRange(include, range), None, gen) + self.convert_include(WithRange(include, range), IncludeSource::Resolve, gen) + }, + FeEvent::SyntheticInclude(include, parameter, source) => { + let source = IncludeSource::Synthetic { parameter, source }; + self.convert_include(WithRange(include, range), source, gen) }, e => Ok(e.into()), } } fn convert_include( - &mut self, WithRange(include, range): WithRange, image: Option>, + &mut self, WithRange(include, range): WithRange, source: IncludeSource<'a>, gen: &mut Generator<'a, impl Backend<'a>, impl Write>, ) -> Result> { - let (label, caption, title, alt_text, scale, width, height) = - if let Some(FeInclude { - resolve_security: _, - label, - caption, - title, - alt_text, - dst: _dst, - scale, - width, - height, - }) = image - { - (label, caption, title, alt_text, scale, width, height) - } else { - Default::default() + let mut synthetic_source = None; + let (label, caption, title, alt_text, scale, width, height, adjust_headers) = + match source { + IncludeSource::Image(FeInclude { + resolve_security: _, + label, + caption, + title, + alt_text, + dst: _dst, + scale, + width, + height, + adjust_headers, + }) => { + (label, caption, title, alt_text, scale, width, height, adjust_headers) + }, + IncludeSource::Synthetic { + parameter: FeInclude { + resolve_security: _, + label, + caption, + title, + alt_text, + dst: _dst, + scale, + width, + height, + adjust_headers, + }, + source, + } => { + synthetic_source = Some(source); + (label, caption, title, alt_text, scale, width, height, adjust_headers) + }, + IncludeSource::Resolve => { + Default::default() + }, }; match include { Include::Command(command) => Ok(command.into()), Include::Markdown(path, context) => { - let markdown = fs::read_to_string(&path).map_err(|err| { - gen.diagnostics() - .error("error reading markdown include file") - .with_error_section(range, "in this include") - .error(format!("cause: {}", err)) - .note(format!("reading from path {}", path.display())) - .emit(); - Error::Diagnostic - })?; + let markdown = if let Some(markdown) = synthetic_source { + markdown + } else { + let source = fs::read_to_string(&path).map_err(|err| { + gen.diagnostics() + .error("error reading markdown include file") + .with_error_section(range, "in this include") + .error(format!("cause: {}", err)) + .note(format!("reading from path {}", path.display())) + .emit(); + Error::Diagnostic + })?; + Cow::Owned(source) + }; let input = match context.typ() { ContextType::Remote => Input::Url(context.url().clone()), ContextType::LocalRelative | ContextType::LocalAbsolute => { Input::File(path) }, }; - let events = gen.get_events(markdown, context, input); + let mut events = gen.get_events(markdown, context, input); + events.adjust_header_levels = adjust_headers; Ok(Event::IncludeMarkdown(Box::new(events))) }, Include::Image(path) => { @@ -181,6 +237,10 @@ impl<'a> Iter<'a> { height, })) }, + Include::Rustdoc(path, context) => { + let events = gen.get_rustdoc(Crate::Local(path), context)?; + Ok(Event::IncludeRustdoc(Box::new(events))) + }, Include::Svg(path) => { Ok(Event::Svg(Svg { label, diff --git a/src/generator/mod.rs b/src/generator/mod.rs index 877489d..8703f33 100644 --- a/src/generator/mod.rs +++ b/src/generator/mod.rs @@ -1,3 +1,4 @@ +use std::borrow::Cow; use std::fmt; use std::fs; use std::io::Write; @@ -9,8 +10,9 @@ use codespan_reporting::termcolor::StandardStream; use crate::backend::{Backend, StatefulCodeGenUnit}; use crate::config::{Config, FileOrStdio}; use crate::diagnostics::{Diagnostics, Input}; -use crate::frontend::Frontend; +use crate::frontend::{Frontend, Tag}; use crate::frontend::range::{SourceRange, WithRange}; +use crate::frontend::rustdoc::{Crate, Rustdoc}; use crate::resolve::{Context, Include, Resolver, ResolveSecurity}; mod code_gen_units; @@ -23,7 +25,7 @@ pub use self::stack::Stack; use self::code_gen_units::StackElement; use self::event::Event; use crate::error::{Error, FatalResult, Result}; -use crate::generator::iter::Iter; +use crate::generator::iter::MarkdownIter; pub struct Generator<'a, B: Backend<'a>, W: Write> { arena: &'a Arena, @@ -34,18 +36,22 @@ pub struct Generator<'a, B: Backend<'a>, W: Write> { resolver: Resolver, template: Option, stderr: Arc>, + header_level_adjustment: i32, + latest_header_level: i32, } pub struct Events<'a> { - events: Iter<'a>, + events: MarkdownIter<'a>, diagnostics: Arc>, context: Context, + /// Whether to generate all events with an adjusted header level. + adjust_header_levels: bool, } impl<'a> fmt::Debug for Events<'a> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("Events") - .field("events", &"Iter") + .field("events", &"MarkdownIter") .field("diagnostics", &self.diagnostics) .field("context", &self.context) .finish() @@ -67,18 +73,29 @@ impl<'a, B: Backend<'a>, W: Write> Generator<'a, B, W> { cfg, default_out, stack: Vec::new(), - resolver: Resolver::new(cfg.project_root.clone(), cfg.document_folder.clone(), cfg.temp_dir.clone()), + resolver: Resolver::new(cfg.project_root.clone(), cfg.document_folder.clone(), cfg.cache_dir.clone()), template, stderr, + header_level_adjustment: 0, + latest_header_level: 0 } } - pub fn get_events(&mut self, markdown: String, context: Context, input: Input) -> Events<'a> { - let markdown = self.arena.alloc(markdown); + pub fn get_events(&mut self, markdown: Cow<'a, str>, context: Context, input: Input) -> Events<'a> { + let markdown = match markdown { + Cow::Owned(markdown) => self.arena.alloc(markdown), + Cow::Borrowed(borrowed) => borrowed, + }; let diagnostics = Arc::new(Diagnostics::new(markdown, input, Arc::clone(&self.stderr))); let frontend = Frontend::new(self.cfg, markdown, Arc::clone(&diagnostics)); - let events = Iter::new(frontend); - Events { events, diagnostics, context } + let events = MarkdownIter::new(frontend); + Events { events, diagnostics, context, adjust_header_levels: false } + } + + pub fn get_rustdoc(&mut self, target: Crate, context: Context) -> FatalResult> { + let target = target.generate(self.diagnostics())?; + let diagnostics = Arc::new(Diagnostics::new("", Input::Stdin, Arc::clone(&self.stderr))); + Ok(Rustdoc::new(self.cfg, target, diagnostics, context)) } pub fn generate(&mut self, markdown: String) -> FatalResult<()> { @@ -88,7 +105,7 @@ impl<'a, B: Backend<'a>, W: Write> Generator<'a, B, W> { FileOrStdio::File(path) => Input::File(path.clone()), FileOrStdio::StdIo => Input::Stdin, }; - let events = self.get_events(markdown, context, input); + let events = self.get_events(markdown.into(), context, input); if let Some(template) = self.template.take() { let body_index = template.find("\nHERADOCBODY\n").expect("HERADOCBODY not found in template"); @@ -106,9 +123,45 @@ impl<'a, B: Backend<'a>, W: Write> Generator<'a, B, W> { } pub fn generate_body(&mut self, events: Events<'a>) -> FatalResult<()> { - self.stack.push(StackElement::Context(events.context, events.diagnostics)); - let mut events = events.events; + // Store the level adjustment. + let context = StackElement::Context(events.context, events.diagnostics, self.header_level_adjustment); + + self.header_level_adjustment = self.latest_header_level; + self.generate_markdown_in(events.events, context)?; + + Ok(()) + } + + pub fn generate_rustdoc(&mut self, events: Rustdoc<'a>) -> FatalResult<()> { + // TODO: we should push some context.. + let context = StackElement::Context( + events.context().clone(), + events.diagnostics(), + self.header_level_adjustment); + self.generate_markdown_in(MarkdownIter::with_rustdoc(events), context)?; + + Ok(()) + } + + fn generate_markdown_in(&mut self, events: MarkdownIter<'a>, context: StackElement<'a, B>) -> FatalResult<()> { + self.stack.push(context); + self.generate_markdown(events)?; + + match self.stack.pop() { + Some(StackElement::Context(_, _, header_level_adjustment)) => { + self.header_level_adjustment = header_level_adjustment; + }, + element => panic!( + "Expected context as stack element after body generation is finished, got {:?}", + element + ), + } + + Ok(()) + } + + fn generate_markdown(&mut self, mut events: MarkdownIter<'a>) -> FatalResult<()> { while let Some(WithRange(event, range)) = events.next(self)? { let peek = events.peek(self)?; match self.visit_event(WithRange(event, range), self.cfg, peek) { @@ -117,13 +170,6 @@ impl<'a, B: Backend<'a>, W: Write> Generator<'a, B, W> { Err(Error::Fatal(fatal)) => return Err(fatal), } } - match self.stack.pop() { - Some(StackElement::Context(..)) => (), - element => panic!( - "Expected context as stack element after body generation is finished, got {:?}", - element - ), - } Ok(()) } @@ -140,6 +186,10 @@ impl<'a, B: Backend<'a>, W: Write> Generator<'a, B, W> { match event { Event::End(_) => unreachable!(), Event::Start(tag) => { + let tag = self.adjust_tag_from_context(tag); + if let Tag::Header(header) = &tag { + self.latest_header_level = header.level; + } let state = StackElement::new(self.cfg, WithRange(tag, range), self)?; self.stack.push(state); }, @@ -148,6 +198,7 @@ impl<'a, B: Backend<'a>, W: Write> Generator<'a, B, W> { Event::InlineHtml(html) => B::Text::new(config, WithRange(html, range), self)?.finish(self, peek)?, Event::Latex(latex) => B::Latex::new(config, WithRange(latex, range), self)?.finish(self, peek)?, Event::IncludeMarkdown(events) => self.generate_body(*events)?, + Event::IncludeRustdoc(events) => self.generate_rustdoc(*events)?, Event::FootnoteReference(fnote) => { B::FootnoteReference::new(config, WithRange(fnote, range), self)?.finish(self, peek)? }, @@ -177,6 +228,16 @@ impl<'a, B: Backend<'a>, W: Write> Generator<'a, B, W> { Ok(()) } + /// Adjust the tag based on the context of this potentially included file within the full + /// document. + fn adjust_tag_from_context(&mut self, mut tag: Tag<'a>) -> Tag<'a> { + if let Tag::Header(header) = &mut tag { + header.level += self.header_level_adjustment; + } + + tag + } + pub fn stack(&mut self) -> Stack<'a, '_, B, W> { Stack::new(&mut self.default_out, &mut self.stack) } @@ -199,7 +260,7 @@ impl<'a, B: Backend<'a>, W: Write> Generator<'a, B, W> { for state in self.stack.iter_mut().rev() { if context.is_none() { match state { - StackElement::Context(ctx, diagnostics) => context = Some((ctx, diagnostics)), + StackElement::Context(ctx, diagnostics, _) => context = Some((ctx, diagnostics)), _ => (), } } else if out.is_none() { diff --git a/src/generator/stack.rs b/src/generator/stack.rs index b030e66..857e629 100644 --- a/src/generator/stack.rs +++ b/src/generator/stack.rs @@ -32,7 +32,7 @@ impl<'a: 'b, 'b, B: Backend<'a> + 'b, W: Write> Stack<'a, 'b, B, W> { .iter_mut() .rev() .filter_map(|state| match state { - StackElement::Context(_, diagnostics) => Some(diagnostics), + StackElement::Context(_, diagnostics, _) => Some(diagnostics), _ => None, }) .next() diff --git a/src/main.rs b/src/main.rs index b563764..d3c60e1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -108,7 +108,7 @@ fn main() { } None => FileConfig::default(), }; - let tmpdir = TempDir::new("heradoc").expect("can't create tempdir"); + let tmpdir = std::mem::ManuallyDrop::new(TempDir::new("heradoc").expect("can't create tempdir")); let cfg = Config::new(args, infile, file, cfgfile_folder, &tmpdir); if cfg.out_dir != cfg.temp_dir { // While initializing the config, some files may already be downloaded. @@ -165,6 +165,10 @@ fn gen_latex(cfg: &Config, markdown: String, out: impl Write) { OutType::Pdf | OutType::Latex => backend::generate(cfg, Beamer::new(), &Arena::new(), markdown, out, stderr), OutType::Mp4 => backend::generate(cfg, SlidesFfmpegEspeak::new(), &Arena::new(), markdown, out, stderr), }, + DocumentType::RustDoc => { + let input = markdown; + backend::generate_rust_docs(cfg, Report::new(), &Arena::new(), input, out, stderr) + } DocumentType::Report => backend::generate(cfg, Report::new(), &Arena::new(), markdown, out, stderr), DocumentType::Thesis => backend::generate(cfg, Thesis::new(), &Arena::new(), markdown, out, stderr), }; diff --git a/src/resolve/include.rs b/src/resolve/include.rs index 5d37924..6e86a29 100644 --- a/src/resolve/include.rs +++ b/src/resolve/include.rs @@ -8,7 +8,7 @@ use url::{Url, ParseError}; use super::BASE_URL; /// Represents the current context we're including from -#[derive(Debug, PartialEq, Eq)] +#[derive(Clone, Debug, PartialEq, Eq)] pub struct Context { /// Full URL to the file / content /// @@ -84,6 +84,7 @@ pub enum Include { Svg(PathBuf), Pdf(PathBuf), Graphviz(PathBuf), + Rustdoc(PathBuf, Context), } /// A direct command to the generator. diff --git a/src/resolve/target.rs b/src/resolve/target.rs index 594e724..1755975 100644 --- a/src/resolve/target.rs +++ b/src/resolve/target.rs @@ -73,6 +73,17 @@ enum TargetInner { /// /// Ex: `![](https://foo.bar/baz.md)` Remote(Url), + /// An URL with the custom rustdoc scheme. + /// + /// There must be a cargo project and a `Cargo.toml` at the target directory. It will point to + /// the first crate in the workspace for now. Planned is to use the domain for selecting the + /// target crate in the future, including maybe retrieving a particular version from the + /// registry? + /// + /// Ex: `![](rustdoc:/path/to/Cargo.toml)` + Rustdoc(PathBuf), + /// An URL with rustdoc scheme but relative to our workspace. + RustdocRelative(PathBuf), } impl<'a, 'd> Target<'a, 'd> { @@ -111,6 +122,53 @@ impl<'a, 'd> Target<'a, 'd> { return Err(Error::Diagnostic); } }, + "rustdoc" => match url.host_str() { + None => { + match context.url.join(url.path()) { + Ok(url) => TargetInner::RustdocRelative(url.path_segments().unwrap().collect()), + Err(err) => {// There is no extra information. + diagnostics + .error("error interpreting relative file path of rustdoc source") + .with_info_section(range, "defined here") + .note(format!("malformed reference: {}", err)) + .emit(); + return Err(Error::Diagnostic); + } + } + } + Some("") => { + let mut url = url.clone(); + // There are a few special cases for file: + // We want to use them here as well. + // url.set_host(None); + url.set_scheme("file") + .expect("Can update to file scheme because rustdoc is not a special scheme."); + // !!! FIXME: Workaround for https://github.com/servo/rust-url/issues/553 + // For some reason an internal state is not updated so we still have + // inconsistent information referring to a remote. + let url = Url::parse(url.as_str()) + .expect("Roundtrip with updated host"); + match url.to_file_path() { + Ok(path) => TargetInner::Rustdoc(path), + Err(()) => { + diagnostics + .error("error converting path to cargo project") + .with_info_section(range, "defined here") + .help("this could be due to a malformed path") + .emit(); + return Err(Error::Diagnostic); + } + } + } + Some(domain) => { + diagnostics + .error("rustdoc URLs must not provide a domain") + .with_error_section(range, "defined here") + .note(format!("uses the domain `{}`", domain)) + .emit(); + return Err(Error::Diagnostic); + } + }, "file" => match url.to_file_path() { Ok(path) => TargetInner::LocalAbsolute(path), Err(()) => { @@ -160,6 +218,11 @@ impl<'a, 'd> Target<'a, 'd> { inner @ TargetInner::Implementation(_) => inner, inner @ TargetInner::Remote(_) => inner, TargetInner::LocalAbsolute(abs) => TargetInner::LocalAbsolute(canonicalize(abs)?), + TargetInner::Rustdoc(abs) => TargetInner::Rustdoc(canonicalize(abs)?), + TargetInner::RustdocRelative(rel) => { + assert!(rel.is_relative(), "TargetInner::RustdocRelative not relative before canonicalizing: {:?}", rel); + TargetInner::RustdocRelative(canonicalize(meta.project_root.join(rel))?) + }, TargetInner::LocalDocumentRelative(rel) => { assert!(rel.is_relative(), "TargetInner::LocalDocumentRelative not relative before canonicalizing: {:?}", rel); TargetInner::LocalDocumentRelative(canonicalize(meta.document_root.join(rel))?) @@ -197,12 +260,16 @@ impl <'a, 'd> TargetCanonicalized<'a, 'd> { (ContextType::LocalRelative, TargetInner::Implementation(_)) | (ContextType::LocalRelative, TargetInner::LocalProjectRelative(_)) | (ContextType::LocalRelative, TargetInner::LocalDocumentRelative(_)) - | (ContextType::LocalRelative, TargetInner::Remote(_)) => (), + | (ContextType::LocalRelative, TargetInner::Remote(_)) + | (ContextType::LocalRelative, TargetInner::Rustdoc(_)) + | (ContextType::LocalRelative, TargetInner::RustdocRelative(_)) => (), (ContextType::LocalAbsolute, TargetInner::Implementation(_)) => (), (ContextType::LocalAbsolute, TargetInner::LocalProjectRelative(_)) | (ContextType::LocalAbsolute, TargetInner::LocalDocumentRelative(_)) - | (ContextType::LocalAbsolute, TargetInner::Remote(_)) => { + | (ContextType::LocalAbsolute, TargetInner::Remote(_)) + | (ContextType::LocalAbsolute, TargetInner::Rustdoc(_)) + | (ContextType::LocalAbsolute, TargetInner::RustdocRelative(_)) => { meta.diagnostics .error("permission denied") .with_error_section(meta.range, "trying to include this") @@ -337,6 +404,9 @@ impl<'a, 'd> TargetChecked<'a, 'd> { None => to_include(path, context, meta.range, meta.diagnostics), } }, + TargetInner::Rustdoc(path) | TargetInner::RustdocRelative(path) => { + Ok(Include::Rustdoc(path, Context::from_url(meta.url))) + }, } } } diff --git a/src/resolve/tests.rs b/src/resolve/tests.rs index c1613ed..57e84e5 100644 --- a/src/resolve/tests.rs +++ b/src/resolve/tests.rs @@ -54,6 +54,7 @@ fn prepare() -> (TempDir, SourceRange, Resolver, Diagnostics<'static>) { let _ = File::create(tmpdir.path().join("chapters/chapter2.md")).expect("Can't create chapters/chapter2.md"); let _ = File::create(tmpdir.path().join("images/image.png")).expect("Can't create images/image.png"); fs::create_dir(tmpdir.path().join("downloads")).expect("can't create downloads directory"); + fs::create_dir(tmpdir.path().join("crate")).expect("can't create crate directory"); let range = SourceRange { start: 0, end: 0 }; let diagnostics = Diagnostics::new("", Input::Stdin, Arc::new(Mutex::new(StandardStream::stderr(ColorChoice::Auto)))); let resolver = Resolver::new(tmpdir.path().to_owned(), tmpdir.path().join("chapters"), tmpdir.path().join("download")); @@ -254,6 +255,29 @@ fn commands() { assert_match!(listings, Include::Command(Command::ListOfListings)); } +#[test] +fn rustdoc() { + let (project_root, range, resolver, diagnostics) = prepare(); + let ctx = Context::from_path("chapters/").expect("can't create context"); + let abs_path = project_root.path().join("crate"); + + let relative = resolver + .resolve(ResolveSecurity::Default, &ctx, "rustdoc:../crate", range, &diagnostics) + .expect("Success resolving `rustdoc:../crate`"); + let project = resolver + .resolve(ResolveSecurity::Default, &ctx, "rustdoc:/crate", range, &diagnostics) + .expect("Success resolving `rustdoc:/crate`"); + + let absolute = format!("rustdoc://{}", abs_path.display()); + let absolute = resolver + .resolve(ResolveSecurity::Default, &ctx, &absolute, range, &diagnostics) + .expect("Success resolving `rustdoc:///path/crate`"); + + assert_match!(relative, Include::Rustdoc(path) if *path == abs_path); + assert_match!(project, Include::Rustdoc(path) if *path == abs_path); + assert_match!(absolute, Include::Rustdoc(path) if *path == abs_path); +} + #[test] fn http_resolves_needs_internet() { let (_project_root, range, resolver, diagnostics) = prepare();