diff --git a/Cargo.lock b/Cargo.lock index 17fcffb..8ad844c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -22,33 +22,17 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" name = "badge" version = "0.2.0" dependencies = [ - "base64 0.12.3", + "base64", "once_cell", "rusttype", ] -[[package]] -name = "base64" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" -dependencies = [ - "byteorder", - "safemem", -] - [[package]] name = "base64" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" -[[package]] -name = "bitflags" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" - [[package]] name = "bitflags" version = "1.2.1" @@ -95,6 +79,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" dependencies = [ "byteorder", + "either", "iovec", ] @@ -154,14 +139,14 @@ version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" dependencies = [ - "bitflags 1.2.1", + "bitflags", ] [[package]] name = "core-foundation" -version = "0.2.3" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" dependencies = [ "core-foundation-sys", "libc", @@ -169,12 +154,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.2.3" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d" -dependencies = [ - "libc", -] +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "crates-index" @@ -218,7 +200,7 @@ dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "lazy_static 1.4.0", + "lazy_static", "maybe-uninit", "memoffset", "scopeguard", @@ -243,7 +225,7 @@ checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" dependencies = [ "autocfg", "cfg-if", - "lazy_static 1.4.0", + "lazy_static", ] [[package]] @@ -275,6 +257,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + [[package]] name = "fake-simd" version = "0.1.2" @@ -302,19 +290,13 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" -[[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", + "bitflags", "fuchsia-zircon-sys", ] @@ -349,16 +331,27 @@ dependencies = [ "typenum", ] +[[package]] +name = "getrandom" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + [[package]] name = "git2" version = "0.13.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e094214efbc7fdbbdee952147e493b00e99a4e52817492277e98967ae918165" dependencies = [ - "bitflags 1.2.1", + "bitflags", "libc", "libgit2-sys", - "log 0.4.11", + "log", "openssl-probe", "openssl-sys", "url", @@ -370,6 +363,24 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +[[package]] +name = "h2" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" +dependencies = [ + "byteorder", + "bytes", + "fnv", + "futures", + "http", + "indexmap", + "log", + "slab", + "string", + "tokio-io", +] + [[package]] name = "hashbrown" version = "0.9.1" @@ -403,6 +414,29 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "http" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" +dependencies = [ + "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", + "futures", + "http", + "tokio-buf", +] + [[package]] name = "httparse" version = "1.3.4" @@ -411,44 +445,45 @@ checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" [[package]] name = "hyper" -version = "0.11.27" +version = "0.12.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34a590ca09d341e94cddf8e5af0bbccde205d5fbc2fa3c09dd67c7f85cea59d7" +checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" dependencies = [ - "base64 0.9.3", "bytes", "futures", "futures-cpupool", + "h2", + "http", + "http-body", "httparse", "iovec", - "language-tags", - "log 0.4.11", - "mime", + "itoa", + "log", "net2", - "percent-encoding 1.0.1", - "relay", + "rustc_version", "time", - "tokio-core", + "tokio", + "tokio-buf", + "tokio-executor", "tokio-io", - "tokio-proto", - "tokio-service", - "unicase", + "tokio-reactor", + "tokio-tcp", + "tokio-threadpool", + "tokio-timer", "want", ] [[package]] name = "hyper-tls" -version = "0.1.4" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1bd5e518d3065840ab315dbbf44e4420e5f7d80e2cb93fa6ffffc50522378" +checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" dependencies = [ + "bytes", "futures", "hyper", "native-tls", - "tokio-core", "tokio-io", - "tokio-service", - "tokio-tls", ] [[package]] @@ -507,18 +542,6 @@ dependencies = [ "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 = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" - [[package]] name = "lazy_static" version = "1.4.0" @@ -586,15 +609,6 @@ dependencies = [ "scopeguard", ] -[[package]] -name = "log" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" -dependencies = [ - "log 0.4.11", -] - [[package]] name = "log" version = "0.4.11" @@ -667,12 +681,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - [[package]] name = "mio" version = "0.6.22" @@ -685,10 +693,10 @@ dependencies = [ "iovec", "kernel32-sys", "libc", - "log 0.4.11", + "log", "miow", "net2", - "slab 0.4.2", + "slab", "winapi 0.2.8", ] @@ -717,17 +725,20 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.1.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f74dbadc8b43df7864539cedb7bc91345e532fdd913cfdc23ad94f4d2d40fbc0" +checksum = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" dependencies = [ - "lazy_static 0.2.11", + "lazy_static", "libc", + "log", "openssl", + "openssl-probe", + "openssl-sys", "schannel", "security-framework", "security-framework-sys", - "tempdir", + "tempfile", ] [[package]] @@ -784,13 +795,14 @@ checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] name = "openssl" -version = "0.9.24" +version = "0.10.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3605c298474a3aa69de92d21139fb5e2a81688d308262359d85cdd0d12a7985" +checksum = "8d575eff3665419f9b83678ff2815858ad9d11567e082f5ac1814baba4e2bcb4" dependencies = [ - "bitflags 0.9.1", + "bitflags", + "cfg-if", "foreign-types", - "lazy_static 1.4.0", + "lazy_static", "libc", "openssl-sys", ] @@ -845,16 +857,10 @@ dependencies = [ "libc", "redox_syscall", "rustc_version", - "smallvec 0.6.13", + "smallvec", "winapi 0.3.9", ] -[[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" @@ -919,6 +925,12 @@ dependencies = [ "serde", ] +[[package]] +name = "ppv-lite86" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c36fa947111f5c62a733b652544dd0016a43ce89619538a8ef92724a6f501a20" + [[package]] name = "proc-macro2" version = "1.0.23" @@ -939,49 +951,43 @@ dependencies = [ [[package]] name = "rand" -version = "0.3.23" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ + "getrandom", "libc", - "rand 0.4.6", + "rand_chacha", + "rand_core", + "rand_hc", ] [[package]] -name = "rand" -version = "0.4.6" +name = "rand_chacha" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ - "fuchsia-cprng", - "libc", - "rand_core 0.3.1", - "rdrand", - "winapi 0.3.9", + "ppv-lite86", + "rand_core", ] [[package]] name = "rand_core" -version = "0.3.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "rand_core 0.4.2", + "getrandom", ] [[package]] -name = "rand_core" -version = "0.4.2" +name = "rand_hc" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" dependencies = [ - "rand_core 0.3.1", + "rand_core", ] [[package]] @@ -999,15 +1005,6 @@ dependencies = [ "serde", ] -[[package]] -name = "relay" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1576e382688d7e9deecea24417e350d3062d97e32e45d70b1cde65994ff1489a" -dependencies = [ - "futures", -] - [[package]] name = "remove_dir_all" version = "0.5.3" @@ -1068,12 +1065,6 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - [[package]] name = "sass-rs" version = "0.2.2" @@ -1102,7 +1093,7 @@ version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" dependencies = [ - "lazy_static 1.4.0", + "lazy_static", "winapi 0.3.9", ] @@ -1120,10 +1111,11 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "security-framework" -version = "0.1.16" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa44ee9c54ce5eecc9de7d5acbad112ee58755239381f687e564004ba4a2332" +checksum = "64808902d7d99f78eaddd2b4e2509713babc3dc3c85ad6f4c447680f3c01e535" dependencies = [ + "bitflags", "core-foundation", "core-foundation-sys", "libc", @@ -1132,9 +1124,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "0.1.16" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5421621e836278a0b139268f36eee0dc7e389b784dc3f79d8f11aabadf41bead" +checksum = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405" dependencies = [ "core-foundation-sys", "libc", @@ -1255,12 +1247,6 @@ dependencies = [ "try_future", ] -[[package]] -name = "slab" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" - [[package]] name = "slab" version = "0.4.2" @@ -1285,12 +1271,6 @@ dependencies = [ "slog", ] -[[package]] -name = "smallvec" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8cbcd6df1e117c2210e13ab5109635ad68a929fcbb8964dc965b76cb5ee013" - [[package]] name = "smallvec" version = "0.6.13" @@ -1309,6 +1289,15 @@ dependencies = [ "serde", ] +[[package]] +name = "string" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" +dependencies = [ + "bytes", +] + [[package]] name = "syn" version = "1.0.42" @@ -1321,19 +1310,17 @@ dependencies = [ ] [[package]] -name = "take" -version = "0.1.0" +name = "tempfile" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b157868d8ac1f56b64604539990685fa7611d8fa9e5476cf0c02cf34d32917c5" - -[[package]] -name = "tempdir" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" +checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" dependencies = [ - "rand 0.4.6", + "cfg-if", + "libc", + "rand", + "redox_syscall", "remove_dir_all", + "winapi 0.3.9", ] [[package]] @@ -1363,7 +1350,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", - "wasi", + "wasi 0.10.0+wasi-snapshot-preview1", "winapi 0.3.9", ] @@ -1397,6 +1384,17 @@ dependencies = [ "tokio-uds", ] +[[package]] +name = "tokio-buf" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" +dependencies = [ + "bytes", + "either", + "futures", +] + [[package]] name = "tokio-codec" version = "0.1.2" @@ -1417,7 +1415,7 @@ dependencies = [ "bytes", "futures", "iovec", - "log 0.4.11", + "log", "mio", "scoped-tls", "tokio", @@ -1466,25 +1464,7 @@ checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" dependencies = [ "bytes", "futures", - "log 0.4.11", -] - -[[package]] -name = "tokio-proto" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fbb47ae81353c63c487030659494b295f6cb6576242f907f203473b191b0389" -dependencies = [ - "futures", - "log 0.3.9", - "net2", - "rand 0.3.23", - "slab 0.3.0", - "smallvec 0.2.1", - "take", - "tokio-core", - "tokio-io", - "tokio-service", + "log", ] [[package]] @@ -1495,12 +1475,12 @@ checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" dependencies = [ "crossbeam-utils", "futures", - "lazy_static 1.4.0", - "log 0.4.11", + "lazy_static", + "log", "mio", "num_cpus", "parking_lot", - "slab 0.4.2", + "slab", "tokio-executor", "tokio-io", "tokio-sync", @@ -1549,10 +1529,10 @@ dependencies = [ "crossbeam-queue", "crossbeam-utils", "futures", - "lazy_static 1.4.0", - "log 0.4.11", + "lazy_static", + "log", "num_cpus", - "slab 0.4.2", + "slab", "tokio-executor", ] @@ -1564,22 +1544,10 @@ checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" dependencies = [ "crossbeam-utils", "futures", - "slab 0.4.2", + "slab", "tokio-executor", ] -[[package]] -name = "tokio-tls" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "772f4b04e560117fe3b0a53e490c16ddc8ba6ec437015d91fa385564996ed913" -dependencies = [ - "futures", - "native-tls", - "tokio-core", - "tokio-io", -] - [[package]] name = "tokio-udp" version = "0.1.6" @@ -1588,7 +1556,7 @@ checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" dependencies = [ "bytes", "futures", - "log 0.4.11", + "log", "mio", "tokio-codec", "tokio-io", @@ -1605,7 +1573,7 @@ dependencies = [ "futures", "iovec", "libc", - "log 0.4.11", + "log", "mio", "mio-uds", "tokio-codec", @@ -1624,9 +1592,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.1.0" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2aa4715743892880f70885373966c83d73ef1b0838a664ef0c76fffd35e7c2" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try_future" @@ -1655,15 +1623,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" version = "0.3.4" @@ -1696,7 +1655,7 @@ checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" dependencies = [ "idna", "matches", - "percent-encoding 2.1.0", + "percent-encoding", ] [[package]] @@ -1705,23 +1664,23 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c" -[[package]] -name = "version_check" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" - [[package]] name = "want" -version = "0.0.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a05d9d966753fa4b5c8db73fcab5eed4549cfe0e1e4e66911e5564a0085c35d1" +checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" dependencies = [ "futures", - "log 0.4.11", + "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 = "wasi" version = "0.10.0+wasi-snapshot-preview1" diff --git a/Cargo.toml b/Cargo.toml index 1a9124e..8f8454b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,8 +17,8 @@ anyhow = "1" cadence = "0.13" derive_more = "0.99" futures = "0.1" -hyper = "0.11" -hyper-tls = "0.1" +hyper = "0.12" +hyper-tls = "0.3" indexmap = { version = "1", features = ["serde-1"] } lru-cache = "0.1" maud = "0.22" diff --git a/src/engine/fut/analyze.rs b/src/engine/fut/analyze.rs index f2d3a81..2e66c45 100644 --- a/src/engine/fut/analyze.rs +++ b/src/engine/fut/analyze.rs @@ -8,7 +8,7 @@ use super::super::machines::analyzer::DependencyAnalyzer; use super::super::Engine; pub struct AnalyzeDependenciesFuture { - inner: Box>, + inner: Box + Send>, } impl AnalyzeDependenciesFuture { diff --git a/src/engine/fut/crawl.rs b/src/engine/fut/crawl.rs index 827a39e..4581d12 100644 --- a/src/engine/fut/crawl.rs +++ b/src/engine/fut/crawl.rs @@ -15,12 +15,13 @@ pub struct CrawlManifestFuture { repo_path: RepoPath, engine: Engine, crawler: ManifestCrawler, - futures: FuturesOrdered>>, + futures: + FuturesOrdered + Send>>, } impl CrawlManifestFuture { pub fn new(engine: &Engine, repo_path: RepoPath, entry_point: RelativePathBuf) -> Self { - let future: Box> = Box::new( + let future: Box + Send> = Box::new( engine .retrieve_manifest_at_path(&repo_path, &entry_point) .map(move |contents| (entry_point, contents)), @@ -52,7 +53,7 @@ impl Future for CrawlManifestFuture { Some((path, raw_manifest)) => { let output = self.crawler.step(path, raw_manifest)?; for path in output.paths_of_interest.into_iter() { - let future: Box> = Box::new( + let future: Box + Send> = Box::new( self.engine .retrieve_manifest_at_path(&self.repo_path, &path) .map(move |contents| (path, contents)), diff --git a/src/engine/mod.rs b/src/engine/mod.rs index db55df5..4d27279 100644 --- a/src/engine/mod.rs +++ b/src/engine/mod.rs @@ -2,13 +2,13 @@ use std::collections::HashSet; use std::sync::Arc; use std::time::{Duration, Instant}; +use anyhow::{anyhow, ensure, Error}; use cadence::prelude::*; use cadence::{MetricSink, NopMetricSink, StatsdClient}; -use anyhow::{anyhow, ensure, Error}; use futures::future::join_all; use futures::{future, Future}; -use hyper::client::HttpConnector; -use hyper::Client; +use hyper::client::{HttpConnector, ResponseFuture}; +use hyper::{Body, Client, Request, Response}; use hyper_tls::HttpsConnector; use once_cell::sync::Lazy; use relative_path::{RelativePath, RelativePathBuf}; @@ -35,30 +35,56 @@ use self::fut::CrawlManifestFuture; type HttpClient = Client>; +// workaround for hyper 0.12 not implementing Service for Client +#[derive(Debug, Clone)] +struct ServiceHttpClient(HttpClient); + +impl Service for ServiceHttpClient { + type Request = Request; + type Response = Response; + type Error = hyper::Error; + type Future = ResponseFuture; + + fn call(&self, req: Self::Request) -> Self::Future { + self.0.request(req) + } +} + #[derive(Clone, Debug)] pub struct Engine { client: HttpClient, logger: Logger, metrics: StatsdClient, - - query_crate: Arc>>, - get_popular_crates: Arc>>, - get_popular_repos: Arc>>, - retrieve_file_at_path: Arc>, - fetch_advisory_db: Arc>>, + query_crate: Arc>>, + get_popular_crates: Arc>>, + get_popular_repos: Arc>>, + retrieve_file_at_path: Arc>, + fetch_advisory_db: Arc>>, } impl Engine { pub fn new(client: Client>, logger: Logger) -> Engine { let metrics = StatsdClient::from_sink("engine", NopMetricSink); - let query_crate = Cache::new(QueryCrate(client.clone()), Duration::from_secs(300), 500); - let get_popular_crates = - Cache::new(GetPopularCrates(client.clone()), Duration::from_secs(10), 1); - let get_popular_repos = - Cache::new(GetPopularRepos(client.clone()), Duration::from_secs(10), 1); + let service_client = ServiceHttpClient(client.clone()); + + let query_crate = Cache::new( + QueryCrate(service_client.clone()), + Duration::from_secs(300), + 500, + ); + let get_popular_crates = Cache::new( + GetPopularCrates(service_client.clone()), + Duration::from_secs(10), + 1, + ); + let get_popular_repos = Cache::new( + GetPopularRepos(service_client.clone()), + Duration::from_secs(10), + 1, + ); let fetch_advisory_db = Cache::new( - FetchAdvisoryDatabase(client.clone()), + FetchAdvisoryDatabase(service_client.clone()), Duration::from_secs(300), 1, ); @@ -67,11 +93,10 @@ impl Engine { client: client.clone(), logger, metrics, - query_crate: Arc::new(query_crate), get_popular_crates: Arc::new(get_popular_crates), get_popular_repos: Arc::new(get_popular_repos), - retrieve_file_at_path: Arc::new(RetrieveFileAtPath(client)), + retrieve_file_at_path: Arc::new(RetrieveFileAtPath(service_client)), fetch_advisory_db: Arc::new(fetch_advisory_db), } } @@ -107,7 +132,7 @@ impl AnalyzeDependenciesOutcome { } impl Engine { - pub fn get_popular_repos(&self) -> impl Future, Error = Error> { + pub fn get_popular_repos(&self) -> impl Future, Error = Error> + Send { self.get_popular_repos.call(()).from_err().map(|repos| { repos .iter() @@ -117,7 +142,7 @@ impl Engine { }) } - pub fn get_popular_crates(&self) -> impl Future, Error = Error> { + pub fn get_popular_crates(&self) -> impl Future, Error = Error> + Send { self.get_popular_crates .call(()) .from_err() @@ -127,7 +152,7 @@ impl Engine { pub fn analyze_repo_dependencies( &self, repo_path: RepoPath, - ) -> impl Future { + ) -> impl Future + Send { let start = Instant::now(); let entry_point = RelativePath::new("/").to_relative_path_buf(); @@ -164,7 +189,7 @@ impl Engine { pub fn analyze_crate_dependencies( &self, crate_path: CratePath, - ) -> impl Future { + ) -> impl Future + Send { let start = Instant::now(); let query_future = self.query_crate.call(crate_path.name.clone()).from_err(); @@ -199,7 +224,7 @@ impl Engine { &self, name: CrateName, req: VersionReq, - ) -> impl Future, Error = Error> { + ) -> impl Future, Error = Error> + Send { self.query_crate .call(name) .from_err() @@ -231,13 +256,13 @@ impl Engine { &self, repo_path: &RepoPath, path: &RelativePathBuf, - ) -> impl Future { + ) -> impl Future + Send { let manifest_path = path.join(RelativePath::new("Cargo.toml")); self.retrieve_file_at_path .call((repo_path.clone(), manifest_path)) } - fn fetch_advisory_db(&self) -> impl Future, Error = Error> { + fn fetch_advisory_db(&self) -> impl Future, Error = Error> + Send { self.fetch_advisory_db .call(()) .from_err() diff --git a/src/interactors/crates.rs b/src/interactors/crates.rs index a25cc49..659c667 100644 --- a/src/interactors/crates.rs +++ b/src/interactors/crates.rs @@ -2,7 +2,7 @@ use std::str; use anyhow::{anyhow, ensure, Error}; use futures::{future, Future, IntoFuture, Stream}; -use hyper::{Error as HyperError, Method, Request, Response, Uri}; +use hyper::{Body, Error as HyperError, Method, Request, Response, Uri}; use semver::{Version, VersionReq}; use serde::Deserialize; use tokio_service::Service; @@ -74,13 +74,15 @@ pub struct QueryCrate(pub S); impl Service for QueryCrate where - S: Service + Clone + 'static, - S::Future: 'static, + S: Service, Response = Response, Error = HyperError> + + Clone + + 'static, + S::Future: Send + 'static, { type Request = CrateName; type Response = QueryCrateResponse; type Error = Error; - type Future = Box>; + type Future = Box + Send>; fn call(&self, crate_name: CrateName) -> Self::Future { let lower_name = crate_name.as_ref().to_lowercase(); @@ -95,7 +97,7 @@ where let uri = try_future_box!(format!("{}/master/{}", CRATES_INDEX_BASE_URI, path).parse::()); - let request = Request::new(Method::Get, uri.clone()); + let request = Request::get(uri.clone()).body(Body::empty()).unwrap(); Box::new(self.0.call(request).from_err().and_then(move |response| { let status = response.status(); @@ -103,7 +105,7 @@ where try_future!(Err(anyhow!("Status code {} for URI {}", status, uri))); } - let body_future = response.body().concat2().from_err(); + let body_future = response.into_body().concat2().from_err(); let decode_future = body_future.and_then(move |body| { let string_body = str::from_utf8(body.as_ref())?; let packages = string_body @@ -152,42 +154,40 @@ pub struct GetPopularCrates(pub S); impl Service for GetPopularCrates where - S: Service + Clone + 'static, - S::Future: 'static, + S: Service, Response = Response, Error = HyperError> + + Clone + + 'static, + S::Future: Send + 'static, { type Request = (); type Response = Vec; type Error = Error; - type Future = Box>; + type Future = Box + Send>; fn call(&self, _req: ()) -> Self::Future { let service = self.0.clone(); - let uri_future = format!("{}/summary", CRATES_API_BASE_URI) + let uri = format!("{}/summary", CRATES_API_BASE_URI) .parse::() - .into_future() - .from_err(); + .unwrap(); + let request = Request::get(uri.clone()).body(Body::empty()).unwrap(); - Box::new(uri_future.and_then(move |uri| { - let request = Request::new(Method::Get, uri.clone()); - - service.call(request).from_err().and_then(move |response| { - let status = response.status(); - if !status.is_success() { - future::Either::A(future::err(anyhow!( - "Status code {} for URI {}", - status, - uri - ))) - } else { - let body_future = response.body().concat2().from_err(); - let decode_future = body_future.and_then(|body| { - let summary = serde_json::from_slice::(&body)?; - convert_summary(summary) - }); - future::Either::B(decode_future) - } - }) + Box::new(service.call(request).from_err().and_then(move |response| { + let status = response.status(); + if !status.is_success() { + future::Either::A(future::err(anyhow!( + "Status code {} for URI {}", + status, + uri + ))) + } else { + let body_future = response.into_body().concat2().from_err(); + let decode_future = body_future.and_then(|body| { + let summary = serde_json::from_slice::(&body)?; + convert_summary(summary) + }); + future::Either::B(decode_future) + } })) } } diff --git a/src/interactors/github.rs b/src/interactors/github.rs index e1e455a..c407139 100644 --- a/src/interactors/github.rs +++ b/src/interactors/github.rs @@ -1,7 +1,7 @@ use anyhow::{anyhow, ensure, Error}; use futures::{Future, Stream}; -use hyper::header::UserAgent; -use hyper::{Error as HyperError, Method, Request, Response, Uri}; +use hyper::header::USER_AGENT; +use hyper::{Body, Error as HyperError, Method, Request, Response, Uri}; use relative_path::RelativePathBuf; use serde::Deserialize; use tokio_service::Service; @@ -45,13 +45,15 @@ pub struct GetPopularRepos(pub S); impl Service for GetPopularRepos where - S: Service + Clone + 'static, - S::Future: 'static, + S: Service, Response = Response, Error = HyperError> + + Clone + + 'static, + S::Future: Send + 'static, { type Request = (); type Response = Vec; type Error = Error; - type Future = Box>; + type Future = Box + Send>; fn call(&self, _req: ()) -> Self::Future { let uri = try_future_box!(format!( @@ -60,8 +62,9 @@ where ) .parse::()); - let mut request = Request::new(Method::Get, uri); - request.headers_mut().set(UserAgent::new("deps.rs")); + let mut request = Request::get(uri); + request.header(USER_AGENT, "deps.rs"); + let request = request.body(Body::empty()).unwrap(); Box::new(self.0.call(request).from_err().and_then(|response| { let status = response.status(); @@ -72,7 +75,7 @@ where ))); } - let body_future = response.body().concat2().from_err(); + let body_future = response.into_body().concat2().from_err(); let decode_future = body_future .and_then(|body| serde_json::from_slice(body.as_ref()).map_err(|err| err.into())); decode_future diff --git a/src/interactors/mod.rs b/src/interactors/mod.rs index 46b4d85..fba1459 100644 --- a/src/interactors/mod.rs +++ b/src/interactors/mod.rs @@ -1,6 +1,6 @@ use anyhow::{anyhow, ensure, Error}; use futures::{Future, Stream}; -use hyper::{Error as HyperError, Method, Request, Response}; +use hyper::{Body, Error as HyperError, Method, Request, Response}; use relative_path::RelativePathBuf; use tokio_service::Service; @@ -17,13 +17,15 @@ pub struct RetrieveFileAtPath(pub S); impl Service for RetrieveFileAtPath where - S: Service + Clone + 'static, - S::Future: 'static, + S: Service, Response = Response, Error = HyperError> + + Clone + + 'static, + S::Future: Send + 'static, { type Request = (RepoPath, RelativePathBuf); type Response = String; type Error = Error; - type Future = Box>; + type Future = Box + Send>; fn call(&self, req: Self::Request) -> Self::Future { let (repo_path, path) = req; @@ -33,7 +35,7 @@ where &RepoSite::Bitbucket => try_future_box!(bitbucket::get_manifest_uri(&repo_path, &path)), }; - let request = Request::new(Method::Get, uri.clone()); + let request = Request::get(uri.clone()).body(Body::empty()).unwrap(); Box::new(self.0.call(request).from_err().and_then(move |response| { let status = response.status(); @@ -41,7 +43,7 @@ where try_future!(Err(anyhow!("Status code {} for URI {}", status, uri))); } - let body_future = response.body().concat2().from_err(); + let body_future = response.into_body().concat2().from_err(); body_future .and_then(|body| String::from_utf8(body.to_vec()).map_err(|err| err.into())) diff --git a/src/interactors/rustsec.rs b/src/interactors/rustsec.rs index 7fcec16..36716ed 100644 --- a/src/interactors/rustsec.rs +++ b/src/interactors/rustsec.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use anyhow::{anyhow, ensure, Error}; use futures::{future, future::done, Future, IntoFuture, Stream}; -use hyper::{Error as HyperError, Method, Request, Response}; +use hyper::{Body, Error as HyperError, Method, Request, Response}; use rustsec::database::Database; use rustsec::repository::DEFAULT_URL; use tokio_service::Service; @@ -13,13 +13,15 @@ pub struct FetchAdvisoryDatabase(pub S); impl Service for FetchAdvisoryDatabase where - S: Service + Clone + 'static, + S: Service, Response = Response, Error = HyperError> + + Clone + + 'static, S::Future: 'static, { type Request = (); type Response = Arc; type Error = Error; - type Future = Box>; + type Future = Box + Send>; fn call(&self, _req: ()) -> Self::Future { let service = self.0.clone(); diff --git a/src/main.rs b/src/main.rs index 0ea87b3..c47c387 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,6 @@ #![deny(rust_2018_idioms)] #![allow(unused)] - #[macro_use] extern crate try_future; @@ -11,7 +10,8 @@ use std::sync::Mutex; use cadence::{QueuingMetricSink, UdpMetricSink}; use futures::{Future, Stream}; -use hyper::server::Http; +use hyper::server::conn::AddrStream; +use hyper::service::{make_service_fn, service_fn_ok}; use hyper::Client; use hyper_tls::HttpsConnector; use slog::Drain; @@ -48,11 +48,9 @@ fn main() { let handle = core.handle(); - let connector = HttpsConnector::new(4, &handle).expect("failed to create https connector"); + let connector = HttpsConnector::new(4).expect("failed to create https connector"); - let client = Client::configure() - .connector(connector) - .build(&core.handle()); + let client = Client::builder().build(connector); let port = env::var("PORT") .unwrap_or_else(|_| "8080".to_string()) @@ -61,29 +59,18 @@ fn main() { let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), port); - let http = Http::new(); - let mut engine = Engine::new(client.clone(), logger.clone()); engine.set_metrics(metrics); let server = Server::new(logger.clone(), engine); - - let serve = http - .serve_addr_handle(&addr, &handle, move || Ok(server.clone())) - .expect("failed to bind server"); - - let serving = serve.for_each(move |conn| { - let conn_logger = logger.clone(); - handle.spawn(conn.then(move |res| { - if let Err(err) = res { - info!(conn_logger, "server connection error: {}", err) - } - Ok(()) - })); - Ok(()) + let make_svc = make_service_fn(move |socket: &AddrStream| { + let server = server.clone(); + futures::future::ok::<_, hyper::Error>(server) }); + let server = hyper::Server::bind(&addr).serve(make_svc); println!("Server running on port {}", port); - - core.run(serving).expect("server failed"); + hyper::rt::run(server.map_err(|e| { + eprintln!("server error: {}", e); + })); } diff --git a/src/server/assets.rs b/src/server/assets.rs index 1f2666c..0959c4e 100644 --- a/src/server/assets.rs +++ b/src/server/assets.rs @@ -1,2 +1,2 @@ -pub static STATIC_STYLE_CSS: &'static str = include_str!(concat!(env!("OUT_DIR"), "/style.css")); -pub static STATIC_FAVICON_PNG: &'static [u8; 1338] = include_bytes!("../../assets/favicon.png"); +pub static STATIC_STYLE_CSS: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/style.css")); +pub static STATIC_FAVICON_PNG: &[u8] = include_bytes!("../../assets/favicon.png"); diff --git a/src/server/mod.rs b/src/server/mod.rs index 0326c05..4c2eb41 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -2,14 +2,14 @@ use std::env; use std::sync::Arc; use futures::{future, Future, IntoFuture}; -use hyper::header::{ContentType, Location}; -use hyper::{Error as HyperError, Method, Request, Response, StatusCode}; +use hyper::header::{CONTENT_TYPE, LOCATION}; +use hyper::service::Service; +use hyper::{Body, Error as HyperError, Method, Request, Response, StatusCode}; use once_cell::sync::Lazy; use route_recognizer::{Params, Router}; use semver::VersionReq; use slog::Logger; use slog::{error, o}; -use tokio_service::Service; mod assets; mod views; @@ -83,12 +83,12 @@ impl Server { } impl Service for Server { - type Request = Request; - type Response = Response; - type Error = HyperError; - type Future = Box>; + type ReqBody = Body; + type ResBody = Body; + type Error = hyper::Error; + type Future = Box, Error = Self::Error> + Send>; - fn call(&self, req: Request) -> Self::Future { + fn call(&mut self, req: Request) -> Self::Future { let logger = self .logger .new(o!("http_path" => req.uri().path().to_owned())); @@ -96,17 +96,17 @@ impl Service for Server { if let Ok(route_match) = self.router.recognize(req.uri().path()) { match route_match.handler { &Route::Index => { - if *req.method() == Method::Get { + if *req.method() == Method::GET { return Box::new(self.index(req, route_match.params, logger)); } } &Route::RepoStatus(format) => { - if *req.method() == Method::Get { + if *req.method() == Method::GET { return Box::new(self.repo_status(req, route_match.params, logger, format)); } } &Route::CrateStatus(format) => { - if *req.method() == Method::Get { + if *req.method() == Method::GET { return Box::new(self.crate_status( req, route_match.params, @@ -116,31 +116,31 @@ impl Service for Server { } } &Route::CrateRedirect => { - if *req.method() == Method::Get { + if *req.method() == Method::GET { return Box::new(self.crate_redirect(req, route_match.params, logger)); } } &Route::Static(file) => { - if *req.method() == Method::Get { + if *req.method() == Method::GET { return Box::new(future::ok(Server::static_file(file))); } } } } - let mut response = Response::new(); - response.set_status(StatusCode::NotFound); - Box::new(future::ok(response)) + let mut response = Response::builder(); + response.status(StatusCode::NOT_FOUND); + Box::new(future::ok(response.body(Body::empty()).unwrap())) } } impl Server { fn index( &self, - _req: Request, + _req: Request, _params: Params, logger: Logger, - ) -> impl Future { + ) -> impl Future, Error = HyperError> + Send { self.engine .get_popular_repos() .join(self.engine.get_popular_crates()) @@ -149,7 +149,7 @@ impl Server { error!(logger, "error: {}", err); let mut response = views::html::error::render("Could not retrieve popular items", ""); - response.set_status(StatusCode::InternalServerError); + *response.status_mut() = StatusCode::INTERNAL_SERVER_ERROR; future::ok(response) } Ok((popular_repos, popular_crates)) => { @@ -160,11 +160,11 @@ impl Server { fn repo_status( &self, - _req: Request, + _req: Request, params: Params, logger: Logger, format: StatusFormat, - ) -> impl Future { + ) -> impl Future, Error = HyperError> + Send { let server = self.clone(); let site = params.find("site").expect("route param 'site' not found"); @@ -180,7 +180,7 @@ impl Server { "Could not parse repository path", "Please make sure to provide a valid repository path.", ); - response.set_status(StatusCode::BadRequest); + *response.status_mut() = StatusCode::BAD_REQUEST; future::Either::A(future::ok(response)) } Ok(repo_path) => future::Either::B( @@ -212,10 +212,10 @@ impl Server { fn crate_redirect( &self, - _req: Request, + _req: Request, params: Params, logger: Logger, - ) -> impl Future { + ) -> impl Future, Error = HyperError> + Send { let engine = self.engine.clone(); let name = params.find("name").expect("route param 'name' not found"); @@ -229,7 +229,7 @@ impl Server { "Could not parse crate name", "Please make sure to provide a valid crate name.", ); - response.set_status(StatusCode::BadRequest); + *response.status_mut() = StatusCode::BAD_REQUEST; future::Either::A(future::ok(response)) } Ok(crate_name) => future::Either::B( @@ -242,7 +242,7 @@ impl Server { "Could not fetch crate information", "Please make sure to provide a valid crate name.", ); - response.set_status(StatusCode::NotFound); + *response.status_mut() = StatusCode::NOT_FOUND; future::ok(response) } Ok(None) => { @@ -250,19 +250,21 @@ impl Server { "Could not fetch crate information", "Please make sure to provide a valid crate name.", ); - response.set_status(StatusCode::NotFound); + *response.status_mut() = StatusCode::NOT_FOUND; future::ok(response) } Ok(Some(release)) => { - let mut response = Response::new(); - response.set_status(StatusCode::TemporaryRedirect); + let mut response = Response::builder(); + response.status(StatusCode::TEMPORARY_REDIRECT); let url = format!( "{}/crate/{}/{}", &SELF_BASE_URL as &str, release.name.as_ref(), release.version ); - response.headers_mut().set(Location::new(url)); + response.header(LOCATION, url); + + let response = response.body(Body::empty()).unwrap(); future::ok(response) } }), @@ -272,11 +274,11 @@ impl Server { fn crate_status( &self, - _req: Request, + _req: Request, params: Params, logger: Logger, format: StatusFormat, - ) -> impl Future { + ) -> impl Future, Error = HyperError> + Send { let server = self.clone(); let name = params.find("name").expect("route param 'name' not found"); @@ -293,7 +295,7 @@ impl Server { "Could not parse crate path", "Please make sure to provide a valid crate name and version.", ); - response.set_status(StatusCode::BadRequest); + *response.status_mut() = StatusCode::BAD_REQUEST; future::Either::A(future::ok(response)) } Ok(crate_path) => future::Either::B( @@ -327,21 +329,23 @@ impl Server { analysis_outcome: Option, format: StatusFormat, subject_path: SubjectPath, - ) -> Response { + ) -> Response { match format { StatusFormat::Svg => views::badge::response(analysis_outcome.as_ref()), StatusFormat::Html => views::html::status::render(analysis_outcome, subject_path), } } - fn static_file(file: StaticFile) -> Response { + fn static_file(file: StaticFile) -> Response { match file { - StaticFile::StyleCss => Response::new() - .with_header(ContentType("text/css".parse().unwrap())) - .with_body(assets::STATIC_STYLE_CSS), - StaticFile::FaviconPng => Response::new() - .with_header(ContentType("image/png".parse().unwrap())) - .with_body(assets::STATIC_FAVICON_PNG.to_vec()), + StaticFile::StyleCss => Response::builder() + .header(CONTENT_TYPE, "text/css") + .body(Body::from(assets::STATIC_STYLE_CSS)) + .unwrap(), + StaticFile::FaviconPng => Response::builder() + .header(CONTENT_TYPE, "image/png") + .body(Body::from(assets::STATIC_FAVICON_PNG)) + .unwrap(), } } } diff --git a/src/server/views/badge.rs b/src/server/views/badge.rs index 2c03a17..510c944 100644 --- a/src/server/views/badge.rs +++ b/src/server/views/badge.rs @@ -1,6 +1,6 @@ use badge::{Badge, BadgeOptions}; -use hyper::header::ContentType; -use hyper::Response; +use hyper::header::CONTENT_TYPE; +use hyper::{Body, Response}; use crate::engine::AnalyzeDependenciesOutcome; @@ -47,8 +47,11 @@ pub fn badge(analysis_outcome: Option<&AnalyzeDependenciesOutcome>) -> Badge { Badge::new(opts) } -pub fn response(analysis_outcome: Option<&AnalyzeDependenciesOutcome>) -> Response { - Response::new() - .with_header(ContentType("image/svg+xml;charset=utf-8".parse().unwrap())) - .with_body(badge(analysis_outcome).to_svg().into_bytes()) +pub fn response(analysis_outcome: Option<&AnalyzeDependenciesOutcome>) -> Response { + let badge = badge(analysis_outcome).to_svg(); + + Response::builder() + .header(CONTENT_TYPE, "image/svg+xml; charset=utf-8") + .body(Body::from(badge)) + .unwrap() } diff --git a/src/server/views/html/error.rs b/src/server/views/html/error.rs index 4a668a4..f42245b 100644 --- a/src/server/views/html/error.rs +++ b/src/server/views/html/error.rs @@ -1,7 +1,7 @@ -use hyper::Response; +use hyper::{Body, Response}; use maud::html; -pub fn render(title: &str, descr: &str) -> Response { +pub fn render(title: &str, descr: &str) -> Response { super::render_html( title, html! { diff --git a/src/server/views/html/index.rs b/src/server/views/html/index.rs index bc413b3..10effc3 100644 --- a/src/server/views/html/index.rs +++ b/src/server/views/html/index.rs @@ -1,4 +1,4 @@ -use hyper::Response; +use hyper::{Body, Response}; use maud::{html, Markup}; use crate::models::crates::CratePath; @@ -63,7 +63,7 @@ fn popular_table(popular_repos: Vec, popular_crates: Vec) } } -pub fn render(popular_repos: Vec, popular_crates: Vec) -> Response { +pub fn render(popular_repos: Vec, popular_crates: Vec) -> Response { super::render_html( "Keep your dependencies up-to-date", html! { diff --git a/src/server/views/html/mod.rs b/src/server/views/html/mod.rs index 155fc3e..7004f00 100644 --- a/src/server/views/html/mod.rs +++ b/src/server/views/html/mod.rs @@ -1,7 +1,7 @@ use std::time::Duration; -use hyper::header::ContentType; -use hyper::Response; +use hyper::header::CONTENT_TYPE; +use hyper::{Body, Response}; use maud::{html, Markup, Render}; pub mod error; @@ -10,7 +10,7 @@ pub mod status; use super::super::SELF_BASE_URL; -fn render_html(title: &str, body: B) -> Response { +fn render_html(title: &str, body: B) -> Response { let rendered = html! { html { head { @@ -27,9 +27,10 @@ fn render_html(title: &str, body: B) -> Response { } }; - Response::new() - .with_header(ContentType::html()) - .with_body(rendered.0) + Response::builder() + .header(CONTENT_TYPE, "text/html; charset=utf-8") + .body(Body::from(rendered.0)) + .unwrap() } fn render_navbar() -> Markup { diff --git a/src/server/views/html/status.rs b/src/server/views/html/status.rs index 7b7971d..7049888 100644 --- a/src/server/views/html/status.rs +++ b/src/server/views/html/status.rs @@ -1,4 +1,4 @@ -use hyper::Response; +use hyper::{Body, Response}; use indexmap::IndexMap; use maud::{html, Markup}; @@ -205,7 +205,7 @@ fn render_success( pub fn render( analysis_outcome: Option, subject_path: SubjectPath, -) -> Response { +) -> Response { let title = match subject_path { SubjectPath::Repo(ref repo_path) => { format!("{} / {}", repo_path.qual.as_ref(), repo_path.name.as_ref())