diff --git a/.gitignore b/.gitignore index 77bdee9b..3bf20a46 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,102 @@ logs/ new_index/ .node_id.txt -data/* \ No newline at end of file +data/* + +# Created by https://www.gitignore.io/api/rust,intellij +# Edit at https://www.gitignore.io/?templates=rust,intellij + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +.idea/sonarlint + +### Rust ### +# Generated by Cargo +# will have compiled files and executables +/target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# End of https://www.gitignore.io/api/rust,intellij \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 98970c65..890c9758 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,36 +46,36 @@ dependencies = [ [[package]] name = "atty" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "autocfg" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "backtrace" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace-sys 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "backtrace-sys" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -106,7 +106,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bitpacking" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crunchy 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -138,7 +138,7 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -156,7 +156,7 @@ name = "chrono" version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", @@ -168,7 +168,7 @@ version = "2.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "atty 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 1.1.0 (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)", @@ -212,7 +212,7 @@ dependencies = [ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "rust-ini 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", "serde-hjson 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -230,10 +230,10 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -241,24 +241,23 @@ dependencies = [ [[package]] name = "crossbeam" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch 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.5 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crossbeam-channel" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -266,8 +265,8 @@ name = "crossbeam-deque" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -275,8 +274,8 @@ name = "crossbeam-deque" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -286,7 +285,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -294,15 +293,15 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -310,12 +309,12 @@ name = "crossbeam-queue" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crossbeam-utils" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -333,7 +332,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.39 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.42 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -356,18 +355,6 @@ name = "either" version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "env_logger" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "atty 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "fail" version = "0.2.1" @@ -383,7 +370,7 @@ name = "failure" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.33 (registry+https://github.com/rust-lang/crates.io-index)", "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -394,7 +381,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" 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)", - "syn 0.15.39 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.42 (registry+https://github.com/rust-lang/crates.io-index)", "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -404,7 +391,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -423,7 +410,7 @@ name = "fs2" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -441,12 +428,12 @@ name = "fsevent-sys" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "fst" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -487,25 +474,25 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "h2" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" 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.28 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (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)", @@ -529,7 +516,7 @@ name = "hostname" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "winutil 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -540,7 +527,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "http" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", @@ -555,7 +542,7 @@ 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.28 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -564,7 +551,7 @@ name = "http-connection" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -573,29 +560,21 @@ name = "httparse" version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "humantime" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "hyper" -version = "0.12.32" +version = "0.12.33" 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.28 (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.25 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.17 (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.18 (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.2 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (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)", @@ -632,7 +611,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -640,7 +619,7 @@ name = "inotify-sys" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -648,7 +627,7 @@ name = "iovec" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -683,9 +662,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "lazy_static" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "spin 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "lazycell" @@ -697,12 +673,12 @@ name = "levenshtein_automata" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "fst 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fst 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libc" -version = "0.2.59" +version = "0.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -728,14 +704,6 @@ dependencies = [ "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "lock_api" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "lock_api" version = "0.3.1" @@ -749,12 +717,12 @@ name = "log" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "log" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -775,7 +743,7 @@ name = "memmap" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -784,6 +752,14 @@ name = "memoffset" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "memoffset" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "mio" version = "0.6.19" @@ -793,8 +769,8 @@ dependencies = [ "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (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.59 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (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)", @@ -807,7 +783,7 @@ version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (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.19 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -818,7 +794,7 @@ version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -852,7 +828,7 @@ version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -862,9 +838,9 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -893,10 +869,10 @@ dependencies = [ "fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "inotify 0.6.1 (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.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", "mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -905,7 +881,7 @@ name = "num-integer" version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -922,7 +898,7 @@ name = "num-traits" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -930,16 +906,15 @@ name = "num_cpus" version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "once_cell" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lock_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -985,23 +960,13 @@ dependencies = [ "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "parking_lot" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lock_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "parking_lot" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.6.0 (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)", ] @@ -1010,7 +975,7 @@ name = "parking_lot_core" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.5.6 (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.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1022,7 +987,7 @@ name = "parking_lot_core" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.5 (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.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1031,27 +996,12 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (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.59 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (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.10 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "parking_lot_core" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (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.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (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.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1087,16 +1037,6 @@ dependencies = [ "output_vt100 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "pretty_env_logger" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "proc-macro2" version = "0.4.30" @@ -1123,7 +1063,7 @@ dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "multimap 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)", "prost 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1141,7 +1081,7 @@ dependencies = [ "itertools 0.8.0 (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.39 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.42 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1153,11 +1093,6 @@ dependencies = [ "prost 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "quick-error" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "quote" version = "0.6.13" @@ -1171,7 +1106,7 @@ name = "rand" version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1181,7 +1116,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1194,7 +1129,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" 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.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1204,8 +1139,8 @@ name = "rand" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (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.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1222,10 +1157,10 @@ name = "rand" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "getrandom 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (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.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1235,16 +1170,15 @@ name = "rand_chacha" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand_chacha" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "c2-chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1267,7 +1201,7 @@ name = "rand_core" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "getrandom 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1299,7 +1233,7 @@ name = "rand_jitter" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1311,7 +1245,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" 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.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1322,7 +1256,7 @@ name = "rand_pcg" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1349,12 +1283,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "regex" -version = "1.1.9" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "aho-corasick 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "utf8-ranges 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1366,10 +1300,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "regex-syntax" -version = "0.6.8" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "ucd-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1396,7 +1330,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" 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)", - "syn 0.15.39 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.42 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1409,8 +1343,8 @@ name = "rust-stemmers" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1433,7 +1367,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "same-file" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1484,10 +1418,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.94" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde_derive 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1498,18 +1432,18 @@ dependencies = [ "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "linked-hash-map 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_derive" -version = "1.0.94" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" 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)", - "syn 0.15.39 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.42 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1519,7 +1453,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1537,7 +1471,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1546,17 +1480,17 @@ name = "signal-hook" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", - "signal-hook-registry 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "signal-hook-registry 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "signal-hook-registry" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arc-swap 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1578,11 +1512,6 @@ dependencies = [ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "spin" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "stable_deref_trait" version = "1.1.1" @@ -1603,7 +1532,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "syn" -version = "0.15.39" +version = "0.15.42" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1618,7 +1547,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" 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)", - "syn 0.15.39 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.42 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1630,7 +1559,7 @@ dependencies = [ "atomicwrites 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bitpacking 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitpacking 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "census 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1646,19 +1575,19 @@ dependencies = [ "htmlescape 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "levenshtein_automata 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "murmurhash32 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "notify 4.0.12 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "once_cell 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "once_cell 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "owned-read 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "rust-stemmers 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "scoped-pool 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", "snap 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1695,21 +1624,13 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.0 (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.7 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "termcolor" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "textwrap" version = "0.11.0" @@ -1731,7 +1652,7 @@ name = "time" version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (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.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1793,7 +1714,7 @@ name = "tokio-executor" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-utils 0.6.5 (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.28 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1814,7 +1735,7 @@ 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.28 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1822,10 +1743,10 @@ name = "tokio-reactor" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-utils 0.6.5 (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.28 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (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.19 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1841,7 +1762,7 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", "signal-hook 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1880,9 +1801,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-deque 0.7.1 (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.5 (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.28 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (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.10.1 (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)", @@ -1894,7 +1815,7 @@ name = "tokio-timer" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-utils 0.6.5 (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.28 (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.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1907,7 +1828,7 @@ 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.28 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (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.19 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1922,8 +1843,8 @@ dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (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.19 (registry+https://github.com/rust-lang/crates.io-index)", "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1936,7 +1857,7 @@ name = "toml" version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1947,33 +1868,37 @@ dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "config 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", "hashbrown 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "hostname 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.32 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.12.33 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "pretty_assertions 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pretty_env_logger 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", "serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "tantivy 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-signal 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "toshi-proto 0.1.0", - "tower 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tower-buffer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "toshi-test 0.1.0", + "tower 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tower-buffer 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "tower-consul 0.1.0 (git+https://github.com/LucioFranco/tower-consul)", "tower-grpc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-hyper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-request-modifier 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tracing 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tracing-fmt 0.0.1-alpha.1 (git+https://github.com/tokio-rs/tracing)", + "tracing-futures 0.0.1 (git+https://github.com/tokio-rs/tracing)", + "tracing-log 0.0.1 (git+https://github.com/tokio-rs/tracing)", "uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1990,12 +1915,24 @@ dependencies = [ ] [[package]] -name = "tower" +name = "toshi-test" version = "0.1.0" +dependencies = [ + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.12.33 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", + "tracing 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tower" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "tower-buffer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tower-buffer 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "tower-discover 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-layer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-limit 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2008,7 +1945,7 @@ dependencies = [ [[package]] name = "tower-buffer" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2016,6 +1953,7 @@ dependencies = [ "tokio-sync 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "tower-layer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tracing 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2025,10 +1963,10 @@ source = "git+https://github.com/LucioFranco/tower-consul#b8bbe2aef9e8a409d5dfa6 dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", - "tower-buffer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tower-buffer 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "tower-http-util 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-util 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2050,10 +1988,10 @@ 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)", "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.17 (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.18 (registry+https://github.com/rust-lang/crates.io-index)", "http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "prost 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-hyper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2077,7 +2015,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", "http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "http-connection 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2091,11 +2029,11 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", "http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "http-connection 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.32 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.12.33 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (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.8 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2141,7 +2079,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2186,6 +2124,68 @@ dependencies = [ "tower-service 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "tracing" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tracing-core 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tracing-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tracing-fmt" +version = "0.0.1-alpha.1" +source = "git+https://github.com/tokio-rs/tracing#e56b33c757a83736984990007e3ed803119add51" +dependencies = [ + "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tracing-core 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tracing-futures" +version = "0.0.1" +source = "git+https://github.com/tokio-rs/tracing#e56b33c757a83736984990007e3ed803119add51" +dependencies = [ + "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", + "tracing 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tracing-log" +version = "0.0.1" +source = "git+https://github.com/tokio-rs/tracing#e56b33c757a83736984990007e3ed803119add51" +dependencies = [ + "lazy_static 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)", + "tracing-core 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tracing-subscriber 0.0.1 (git+https://github.com/tokio-rs/tracing)", +] + +[[package]] +name = "tracing-subscriber" +version = "0.0.1" +source = "git+https://github.com/tokio-rs/tracing#e56b33c757a83736984990007e3ed803119add51" +dependencies = [ + "tracing-core 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "try-lock" version = "0.2.2" @@ -2193,7 +2193,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "ucd-util" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2256,7 +2256,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2281,10 +2281,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "walkdir" -version = "2.2.8" +version = "2.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2295,7 +2295,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.7 (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)", ] @@ -2305,7 +2305,7 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2345,15 +2345,6 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "wincolor" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "winutil" version = "0.1.1" @@ -2386,19 +2377,19 @@ dependencies = [ "checksum arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba" "checksum ascii 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "91e320562a8fa3286a481b7189f89578ace6b20df99e123c87f2f509c957c5d6" "checksum atomicwrites 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c4e1aa99513c90202b4b04cfbe3c9d51dd914f2e26215a4caa76574b00bb6393" -"checksum atty 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "ecaaea69f52b3b18633611ec0007d188517d0366f47ff703d400fa6879d6f8d5" -"checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" -"checksum backtrace 0.3.32 (registry+https://github.com/rust-lang/crates.io-index)" = "18b50f5258d1a9ad8396d2d345827875de4261b158124d4c819d9b351454fae5" -"checksum backtrace-sys 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)" = "5b3a000b9c543553af61bc01cbfc403b04b5caa9e421033866f2e98061eb3e61" +"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90" +"checksum autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "22130e92352b948e7e82a49cdb0aa94f2211761117f29e052dd397c1ac33542b" +"checksum backtrace 0.3.33 (registry+https://github.com/rust-lang/crates.io-index)" = "88fb679bc9af8fa639198790a77f52d345fe13656c08b43afa9424c206b731c6" +"checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b" "checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" "checksum bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80" "checksum bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb" "checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd" -"checksum bitpacking 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6918388afd31f1254c408956fca4d36383a1c89c66697eb55d6bacbbcf50e10a" +"checksum bitpacking 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f94e996feb537aab4f2cc05fbf5fb572df6c9830fa11df7dc61e3793ccdc405" "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.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7d64d04786e0f528460fc884753cf8dddcc466be308f6026f8e355c41a0e4101" -"checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d" +"checksum cc 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)" = "ce400c638d48ee0e9ab75aef7997609ec57367ccfe1463f21bf53c3eca67bf46" "checksum census 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "641317709904ba3c1ad137cb5d88ec9d8c03c07de087b2cff5e84ec565c7e299" "checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" "checksum chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "77d81f58b7301084de3b958691458a53c3f7e0b1d702f77e550b6a88e3a88abe" @@ -2409,21 +2400,20 @@ dependencies = [ "checksum config 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f9107d78ed62b3fa5a86e7d18e647abed48cfd8f8fab6c72f4cdb982d196f7e6" "checksum crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "bd66663db5a988098a89599d4857919b3acf7f61402e61365acfd3919857b9be" "checksum crossbeam 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d1c92ff2d7a202d592f5a412d75cf421495c913817781c1cb383bf12a77e185f" -"checksum crossbeam 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b14492071ca110999a20bf90e3833406d5d66bfd93b4e52ec9539025ff43fe0d" -"checksum crossbeam-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "0f0ed1a4de2235cabda8558ff5840bffb97fcb64c97827f354a451307df5f72b" +"checksum crossbeam 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2d818a4990769aac0c7ff1360e233ef3a41adcb009ebb2036bf6915eb0f6b23c" +"checksum crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa" "checksum crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "05e44b8cf3e1a625844d1750e1f7820da46044ff6d28f4d43e455ba3e5bb2c13" "checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" "checksum crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2449aaa4ec7ef96e5fb24db16024b935df718e9ae1cec0a1e68feeca2efca7b8" -"checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" +"checksum crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9" "checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" -"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" +"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" "checksum crunchy 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" "checksum ctor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3b4c17619643c1252b5f690084b82639dd7fac141c57c8e77a00e0148132092c" "checksum difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" "checksum downcast-rs 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b92dfd5c2f75260cbf750572f95d387e7ca0ba5e3fbe9e1a33f23025be020f" "checksum dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e" "checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" -"checksum env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" "checksum fail 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4eca5f0f9a67b3e504f3a0ab0bc22efb19b241c0313be5b897ee7e8d85a1805a" "checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" "checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" @@ -2433,24 +2423,23 @@ dependencies = [ "checksum fs2 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" "checksum fsevent 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6" "checksum fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0" -"checksum fst 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "db72126ca7dff566cdbbdd54af44668c544897d9d3862b198141f176f1238bdf" +"checksum fst 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "927fb434ff9f0115b215dc0efd2e4fbdd7448522a92a1aa37c77d6a2f8f1ebd6" "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 futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "45dc39533a6cae6da2b56da48edae506bb767ec07370f86f70fc062e9d435869" "checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" -"checksum getrandom 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e65cce4e5084b14874c4e7097f38cab54f47ee554f9194673456ea379dcc4c55" -"checksum h2 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)" = "a539b63339fbbb00e081e84b6e11bd1d9634a82d91da2984a18ac74a8823f392" +"checksum getrandom 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "cd8e190892c840661957ba9f32dacfb3eb405e657f9f9f60485605f0bb37d6f8" +"checksum h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" "checksum hashbrown 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1de41fb8dba9714efd92241565cdff73f78508c95697dd56787d3cba27e2353" "checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" "checksum hostname 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "21ceb46a83a85e824ef93669c8b390009623863b5c195d1ba747292c0c72f94e" "checksum htmlescape 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" -"checksum http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "eed324f0f0daf6ec10c474f150505af2c143f251722bf9dbd1261bd1f2ee2c1a" +"checksum http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "372bcb56f939e449117fb0869c2e8fd8753a8223d92a172c6e808cf123a5b6e4" "checksum http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" "checksum http-connection 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5f6080cea47f7371d4da9a46dd52787c598ce93886393e400bc178f9039bac27" "checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" -"checksum humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ca7e5f2e110db35f93b837c81797f3714500b81d517bf20c431b16d3ca4f114" -"checksum hyper 0.12.32 (registry+https://github.com/rust-lang/crates.io-index)" = "a64d71c1e77d39da024f06f5821ee00ad9c38febb90370bad1f07a94e0bc8793" +"checksum hyper 0.12.33 (registry+https://github.com/rust-lang/crates.io-index)" = "7cb44cbce9d8ee4fb36e4c0ad7b794ac44ebaad924b9c8291a63215bb44c2c8f" "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" "checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d" "checksum inotify 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "40b54539f3910d6f84fbf9a643efd6e3aa6e4f001426c0329576128255994718" @@ -2463,18 +2452,18 @@ dependencies = [ "checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" "checksum levenshtein_automata 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73a004f877f468548d8d0ac4977456a249d8fabbdb8416c36db163dfc8f2e8ca" -"checksum libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "3262021842bf00fe07dbd6cf34ff25c99d7a7ebef8deea84db72be3ea3bb0aff" +"checksum libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "d44e80633f007889c7eff624b709ab43c92d708caad982295768a7b13ca3b5eb" "checksum linked-hash-map 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6d262045c5b87c0861b3f004610afd0e2c851e2908d08b6c870cbb9d5f494ecd" "checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" "checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" -"checksum lock_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ed946d4529956a20f2d63ebe1b69996d5a2137c91913fe3ebbeff957f5bca7ff" "checksum lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f8912e782533a93a167888781b836336a6ca5da6175c05944c86cf28c31104dc" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" -"checksum log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "c275b6ad54070ac2d665eef9197db647b32239c9d244bfb6f041a766d00da5b3" +"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" "checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e" "checksum memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" +"checksum memoffset 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ce6075db033bbbb7ee5a0bbd3a3186bbae616f57fb001c485c7ff77955f8177f" "checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" "checksum mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "46e73a04c2fa6250b8d802134d56d554a9ec2922bf977777c805ea5def61ce40" "checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" @@ -2490,29 +2479,25 @@ dependencies = [ "checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" "checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32" "checksum num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273" -"checksum once_cell 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6959fb95e7164b7707aa016c65652f9f5a29a9210aa1800e64f51c6ac9988d51" +"checksum once_cell 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d584f08c2d717d5c23a6414fc2822b71c651560713e54fa7eace675f758a355e" "checksum output_vt100 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9" "checksum owned-read 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05d57fab18d627fc4dffbd78d4a25a5b5b5211fda724231f001bee4cef1b2d3b" "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" "checksum parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5" "checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" -"checksum parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa7767817701cce701d5585b9c4db3cdd02086398322c1d7e8bf5094a96a2ce7" "checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" "checksum parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7f7e6ebdc79edff6fdcb87a55b620174f7a989e3eb31b65231f4af57f00b8c" "checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" -"checksum parking_lot_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cb88cb1cb3790baa6776844f968fea3be44956cf184fa1be5a03341f5491278c" -"checksum parking_lot_core 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "67812d70a819b886655846594086c00ac1f3e8b77c36ef494aa730c620b19d57" +"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 petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f" "checksum ppv-lite86 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e3cbf9f658cdb5000fcf6f362b8ea2ba154b9f146a61c7a20d647034c6b6561b" "checksum pretty_assertions 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3f81e1644e1b54f5a68959a29aa86cde704219254669da328ecfdf6a1f09d427" -"checksum pretty_env_logger 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df8b3f4e0475def7d9c2e5de8e5a1306949849761e107b360d03e98eafaffd61" "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" "checksum prost 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96d14b1c185652833d24aaad41c5832b0be5616a590227c1fbff57c616754b23" "checksum prost-build 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eb788126ea840817128183f8f603dce02cb7aea25c2a0b764359d8e20010702e" "checksum prost-derive 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5e7dc378b94ac374644181a2247cebf59a6ec1c88b49ac77f3a94b86b79d0e11" "checksum prost-types 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1de482a366941c8d56d19b650fac09ca08508f2a696119ee7513ad590c8bac6f" -"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" "checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" "checksum rand 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)" = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" "checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" @@ -2520,7 +2505,7 @@ dependencies = [ "checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" "checksum rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d47eab0e83d9693d40f825f86948aa16eff6750ead4bdffc4ab95b8b3a7f052c" "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -"checksum rand_chacha 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e193067942ef6f485a349a113329140d0ab9e2168ce92274499bb0e9a4190d9d" +"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.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" "checksum rand_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "615e683324e75af5d43d8f7a39ffe3ee4a9dc42c5c701167a71dc59c3a493aca" @@ -2533,9 +2518,9 @@ dependencies = [ "checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" "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.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "d9d8297cc20bbb6184f8b45ff61c8ee6a9ac56c156cec8e38c3e5084773c44ad" +"checksum regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6b23da8dfd98a84bd7e08700190a5d9f7d2d38abd4369dd1dae651bc40bfd2cc" "checksum regex-syntax 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8e931c58b93d86f080c734bfd2bce7dd0079ae2331235818133c8be7f422e20e" -"checksum regex-syntax 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "9b01330cce219c1c6b2e209e5ed64ccd587ae5c67bed91c0b49eecf02ae40e21" +"checksum regex-syntax 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "cd5485bf1523a9ed51c4964273f22f63f24e31632adb5dad134f488f86a3875c" "checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" "checksum rental 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "01916ebd9fc2e81978a5dc9542a2fa47f5bb2ca3402e14c7cc42d6e3c5123e1f" "checksum rental-impl 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "82260d54cf2cbe9608df161f7e7c98e81fae702aa13af9e4d5d39dc2ffb25ab6" @@ -2544,7 +2529,7 @@ dependencies = [ "checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997" -"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" +"checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" "checksum scoped-pool 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "817a3a15e704545ce59ed2b5c60a5d32bda4d7869befb8b36667b658a6c00b43" "checksum scopeguard 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "59a076157c1e2dc561d8de585151ee6965d910dd4dcb5dabb7ae3e83981a6c57" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" @@ -2552,28 +2537,26 @@ dependencies = [ "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 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)" = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8" -"checksum serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)" = "076a696fdea89c19d3baed462576b8f6d663064414b5c793642da8dfeb99475b" +"checksum serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5626ac617da2f2d9c48af5515a21d5a480dbd151e01bb1c355e26a3e68113" "checksum serde-hjson 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0b833c5ad67d52ced5f5938b2980f32a9c1c5ef047f0b4fb3127e7a423c76153" -"checksum serde_derive 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)" = "ef45eb79d6463b22f5f9e16d283798b7c0175ba6050bc25c1a946c122727fe7b" +"checksum serde_derive 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)" = "01e69e1b8a631f245467ee275b8c757b818653c6d704cdbcaeb56b56767b529c" "checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704" "checksum serde_test 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)" = "110b3dbdf8607ec493c22d5d947753282f3bae73c0f56d322af1e8c78e4c23d5" "checksum serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" "checksum signal-hook 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4f61c4d59f3aaa9f61bba6450a9b80ba48362fd7d651689e7a10c453b1f6dc68" -"checksum signal-hook-registry 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cded4ffa32146722ec54ab1f16320568465aa922aa9ab4708129599740da85d7" +"checksum signal-hook-registry 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "913661ac8848a61e39684a3c3e7a7a14a4deec7f54b4976d0641e70dda3939b1" "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" "checksum smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ab606a9c5e214920bb66c458cd7be8ef094f813f20fe77a54cc7dbfff220d4b7" "checksum snap 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "95d697d63d44ad8b78b8d235bf85b34022a78af292c8918527c5f0cffdde7f43" -"checksum spin 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44363f6f51401c34e7be73db0db371c04705d35efbe9f7d6082e03a921a32c55" "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" "checksum string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" -"checksum syn 0.15.39 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d960b829a55e56db167e861ddb43602c003c7be0bee1d345021703fac2fb7c" +"checksum syn 0.15.42 (registry+https://github.com/rust-lang/crates.io-index)" = "eadc09306ca51a40555dd6fc2b415538e9e18bc9f870e47b1a524a79fe2dcf5e" "checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" "checksum tantivy 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad771e12c6ce0cc544ef2f16d9e3a748582be87abd3f5e895c26993ff987b6e" "checksum tantivy-fst 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "16b22af5ff09b8897093287642a5aaee6f30eb496526ef83a8dd0f4c636ac367" "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 termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "96d6098003bde162e4277c70665bd87c326f5a0c3f3fbfb285787fa482d54e6e" "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" @@ -2593,8 +2576,8 @@ dependencies = [ "checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" "checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" "checksum toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f" -"checksum tower 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b931b40c84f47fd203101b2ef18cd6523e27bb2902129bc3ca2ed1f07fa17695" -"checksum tower-buffer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5c98a7784e6c8ba106bc98d44ed1dbb9c018a8e0322e5e894d365f9020967128" +"checksum tower 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc72f33b6a72c75c9df0037afce313018bae845f0ec7fdb9201b8768427a917f" +"checksum tower-buffer 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0c85c2bb3ca9acdb130fa879c2c7e052a7daa7dbd181f49ef246caf533c096df" "checksum tower-consul 0.1.0 (git+https://github.com/LucioFranco/tower-consul)" = "" "checksum tower-discover 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "73a7632286f78164d65d18fd0e570307acde9362489aa5c8c53e6315cc2bde47" "checksum tower-grpc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "839c195fd6e4e87442e7a631ea62632799695a3f897949192325a4e509ff4328" @@ -2609,8 +2592,14 @@ dependencies = [ "checksum tower-service 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2cc0c98637d23732f8de6dfd16494c9f1559c3b9e20b4a46462c8f9b9e827bfa" "checksum tower-timeout 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "daa179ec4087589dc67148dc661abce5badc2c3ed4197adc7bd64b39f1f33c31" "checksum tower-util 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4792342fac093db5d2558655055a89a04ca909663467a4310c7739d9f8b64698" +"checksum tracing 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9509c828e884d3289fb843055b1462be5f5b54e4b1f21d39e6cc465fe861f4fc" +"checksum tracing-core 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b15b1e1f124b19a23d87d54613077bf5249e5f13a5cd39e2f2a50afef938ca05" +"checksum tracing-fmt 0.0.1-alpha.1 (git+https://github.com/tokio-rs/tracing)" = "" +"checksum tracing-futures 0.0.1 (git+https://github.com/tokio-rs/tracing)" = "" +"checksum tracing-log 0.0.1 (git+https://github.com/tokio-rs/tracing)" = "" +"checksum tracing-subscriber 0.0.1 (git+https://github.com/tokio-rs/tracing)" = "" "checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" -"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" +"checksum ucd-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa9b3b49edd3468c0e6565d85783f51af95212b6fa3986a5500954f00b460874" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" "checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" "checksum unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1967f4cdfc355b37fd76d2a954fb2ed3871034eb4f26d60537d88795cfc332a9" @@ -2624,7 +2613,7 @@ dependencies = [ "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 void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" -"checksum walkdir 2.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "c7904a7e2bb3cdf0cf5e783f44204a85a37a93151738fa349f06680f59a98b45" +"checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e" "checksum want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" "checksum which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b57acb10231b9493c8472b20cb57317d0679a49e0bdbee44b3b803a6473af164" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" @@ -2633,7 +2622,6 @@ dependencies = [ "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" "checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -"checksum wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "561ed901ae465d6185fa7864d63fbd5720d0ef718366c9a4dc83cf6170d7e9ba" "checksum winutil 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7daf138b6b14196e3830a588acf1e86966c694d3e8fb026fb105b8b5dca07e6e" "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" "checksum yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d" diff --git a/Cargo.toml b/Cargo.toml index 902d879a..309fb139 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ name = "toshi" path = "src/lib.rs" [workspace] -members = [ "./", "toshi-proto" ] +members = [ "./", "toshi-proto", "./toshi-test" ] [dependencies] toshi-proto = { path = "toshi-proto" } @@ -34,8 +34,6 @@ tantivy = "^0.10" tokio = "^0.1" tokio-signal = "^0.2" config = "^0.9" -log = "^0.4" -pretty_env_logger = "^0.3" failure = "^0.1" num_cpus = "^1" hostname = "^0.1" @@ -47,10 +45,17 @@ rand = { version = "^0.7", features = ["log"] } serde = { version = "^1.0", features = ["derive"] } clap = { version = "^2.3", features = ["color"] } uuid = { version = "^0.7", features = ["v4"] } +tracing = "^0.1" +tracing-futures = { git = "https://github.com/tokio-rs/tracing" } +tracing-log = { git = "https://github.com/tokio-rs/tracing" } +tracing-fmt = { git = "https://github.com/tokio-rs/tracing" } [dev-dependencies] remove_dir_all = "^0.5" pretty_assertions = "^0.6" +lazy_static = "1.3.0" +toshi-test = { path = "./toshi-test" } + [profile.release] opt-level = 3 diff --git a/README.md b/README.md index d37c9833..23196ae1 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ meant to be a library, I'm perfectly fine with having this requirement because p take it off the shelf and not modify it. My motivation was to cater to that use case when building Toshi. #### Build Requirements -At this current time Toshi should build and work fine on Windows, Mac OS X, and Linux. From dependency requirements you are going to need Rust 2018 edition and Cargo installed in order to build. You can get rust easily from +At this current time Toshi should build and work fine on Windows, Mac OS X, and Linux. From dependency requirements you are going to need 1.34.0 and Cargo installed in order to build. You can get rust easily from [rustup](https://rustup.rs). #### Configuration diff --git a/src/bin/toshi.rs b/src/bin/toshi.rs index 53673230..a9e51084 100644 --- a/src/bin/toshi.rs +++ b/src/bin/toshi.rs @@ -5,10 +5,10 @@ use std::path::{Path, PathBuf}; use std::sync::Arc; use futures::{future, Future}; -use log::{error, info}; use parking_lot::RwLock; use tokio::runtime::Runtime; use tokio::sync::oneshot; +use tracing::*; use toshi::cluster::rpc_server::RpcServer; use toshi::commit::IndexWatcher; @@ -17,12 +17,21 @@ use toshi::router::router_with_catalog; use toshi::settings::{Settings, HEADER, RPC_HEADER}; use toshi::{cluster, shutdown, support}; +fn get_subscriber() -> impl Subscriber { + tracing_fmt::FmtSubscriber::builder() + .with_timer(tracing_fmt::time::SystemTime {}) + .with_ansi(true) + .finish() +} + pub fn main() -> Result<(), ()> { let settings = support::settings(); std::env::set_var("RUST_LOG", &settings.log_level); - pretty_env_logger::init(); - info!("{:?}", &settings); + let sub = get_subscriber(); + tracing::subscriber::set_global_default(sub).expect("Unable to set default Subscriber"); + + debug!("{:?}", &settings); let mut rt = Runtime::new().expect("failed to start new Runtime"); diff --git a/src/cluster/consul.rs b/src/cluster/consul.rs index 2f4d674b..c3cd8158 100644 --- a/src/cluster/consul.rs +++ b/src/cluster/consul.rs @@ -96,7 +96,7 @@ impl ClusterOps for Consul { } /// Registers this node with Consul via HTTP API - fn register_node(&mut self) -> Box + Send> { + fn register_node(&mut self) -> Box + Send> { let key = SERVICE_NAME.to_string() + &self.cluster_name() + "/" + &self.node_id(); Box::new( self.client @@ -106,7 +106,7 @@ impl ClusterOps for Consul { ) } - fn place_node_descriptor(&mut self, hosts: Hosts) -> Box + Send> { + fn place_node_descriptor(&mut self, hosts: Hosts) -> Box + Send> { let key = self.node_path(); let mut client = self.client.clone(); Box::new( @@ -133,7 +133,7 @@ impl ClusterOps for Consul { } /// Registers a cluster with Consul via the HTTP API - fn register_cluster(&mut self) -> Box + Send> { + fn register_cluster(&mut self) -> Box + Send> { let key = SERVICE_NAME.to_string() + &self.cluster_name(); Box::new( self.client @@ -144,7 +144,7 @@ impl ClusterOps for Consul { } /// Registers a shard with the Consul cluster - fn register_shard(&mut self, shard: &S) -> Box + Send> { + fn register_shard(&mut self, shard: &S) -> Box + Send> { let key = format!("toshi/{}/{}", self.cluster_name(), shard.shard_id().to_hyphenated_ref()); let shard = serde_json::to_vec(&shard).unwrap(); @@ -245,7 +245,7 @@ impl HttpsService { impl Service> for HttpsService { type Response = Response; type Error = hyper::Error; - type Future = Box + Send>; + type Future = Box + Send>; fn poll_ready(&mut self) -> Poll<(), Self::Error> { Ok(Async::Ready(())) diff --git a/src/cluster/mod.rs b/src/cluster/mod.rs index 2607d115..2f64ca10 100644 --- a/src/cluster/mod.rs +++ b/src/cluster/mod.rs @@ -4,9 +4,9 @@ use std::time::Duration; use failure::Fail; use futures::{future, Future}; -use log::error; use serde::{Deserialize, Serialize}; use tower_hyper::client::ConnectError; +use tracing::*; use crate::cluster::consul::{ClusterOps, Hosts}; use crate::settings::Settings; @@ -15,7 +15,7 @@ pub use self::consul::Consul; pub use self::node::*; use self::placement::{Background, Place}; -pub type BoxError = Box; +pub type BoxError = Box; pub type ConnectionError = ConnectError; pub type BufError = tower_buffer::error::ServiceError; pub type GrpcError = tower_grpc::Status; @@ -122,7 +122,7 @@ pub enum RPCError { #[fail(display = "Error in RPC Connect: {}", _0)] ConnectError(ConnectionError), #[fail(display = "")] - BoxError(Box), + BoxError(Box), } impl From for RPCError { diff --git a/src/cluster/node.rs b/src/cluster/node.rs index 47103b12..135021cc 100644 --- a/src/cluster/node.rs +++ b/src/cluster/node.rs @@ -7,7 +7,7 @@ use uuid::Uuid; use crate::cluster::ClusterError; -static NODE_ID_FILENAME: &'static str = ".node_id"; +static NODE_ID_FILENAME: &str = ".node_id"; /// Init the node id by reading the node id from path or writing a fresh one if not found pub fn init_node_id(path: String) -> impl Future { @@ -44,3 +44,26 @@ pub fn read_node_id(p: &str) -> impl Future .map_err(|e| ClusterError::FailedReadingNodeID(format!("{}", e))) .and_then(|(_, bytes)| String::from_utf8(bytes).map_err(|_| ClusterError::UnableToReadUTF8)) } + +#[cfg(test)] +pub mod tests { + + use super::*; + use tokio::runtime::Runtime; + + #[test] + pub fn test_node_id() -> Result<(), ClusterError> { + let mut rt = Runtime::new().unwrap(); + let (s, mut recv) = tokio::sync::oneshot::channel::(); + let r = futures::future::lazy(|| init_node_id("./".to_string())).and_then(move |id| { + s.send(id).unwrap(); + read_node_id("./") + }); + let read_id = rt.block_on(r).unwrap(); + let write_id = recv.try_recv().unwrap(); + assert_eq!(read_id, write_id); + + std::fs::remove_file(format!("./{}", NODE_ID_FILENAME)).unwrap(); + Ok(()) + } +} diff --git a/src/cluster/placement/background.rs b/src/cluster/placement/background.rs index 42fefef6..5565b7b3 100644 --- a/src/cluster/placement/background.rs +++ b/src/cluster/placement/background.rs @@ -3,11 +3,11 @@ use std::net::SocketAddr; use std::time::{Duration, Instant}; use futures::{try_ready, Future, Poll}; -use log::debug; use tokio::sync::mpsc; use tokio::sync::watch::{channel, Receiver, Sender}; use tokio::timer::Delay; use tower_consul::ConsulService; +use tracing::*; use crate::cluster::consul::ClusterOps; use crate::cluster::{consul::Consul, ClusterError}; @@ -70,7 +70,7 @@ impl Future for Background { } enum State { - Fetching(Box, Error = ClusterError> + Send>), + Fetching(Box, Error = ClusterError> + Send>), Waiting(Delay), } diff --git a/src/cluster/placement/mod.rs b/src/cluster/placement/mod.rs index 46447675..ebe53349 100644 --- a/src/cluster/placement/mod.rs +++ b/src/cluster/placement/mod.rs @@ -2,11 +2,11 @@ use std::collections::HashSet; use std::net::SocketAddr; use futures::{future, Future, Stream}; -use log::error; use tokio::net::TcpListener; use tokio::sync::watch::*; use tower_grpc::{Request, Response, Status}; use tower_hyper::Server; +use tracing::*; use toshi_proto::placement_proto::{server, PlacementReply, PlacementRequest}; @@ -17,7 +17,7 @@ pub use self::background::Background; pub mod background; // TODO: replace this with an actual future -type GrpcFuture = Box, Error = Status> + Send + 'static>; +type GrpcFuture = Box, Error = Status> + Send + 'static>; #[derive(Clone)] pub struct Place { diff --git a/src/cluster/remote_handle.rs b/src/cluster/remote_handle.rs index f3c6012e..5b1f1e06 100644 --- a/src/cluster/remote_handle.rs +++ b/src/cluster/remote_handle.rs @@ -1,9 +1,9 @@ use std::hash::{Hash, Hasher}; -use log::info; use rand::prelude::*; use tokio::prelude::*; use tower_grpc::{Request as TowerRequest, Response}; +use tracing::*; use toshi_proto::cluster_rpc::{DeleteRequest, DocumentRequest, SearchReply, SearchRequest}; @@ -48,9 +48,9 @@ impl RemoteIndex { } impl IndexHandle for RemoteIndex { - type SearchResponse = Box, Error = RPCError> + Send>; - type DeleteResponse = Box, Error = RPCError> + Send>; - type AddResponse = Box, Error = RPCError> + Send>; + type SearchResponse = Box, Error = RPCError> + Send>; + type DeleteResponse = Box, Error = RPCError> + Send>; + type AddResponse = Box, Error = RPCError> + Send>; fn get_name(&self) -> String { self.name.clone() diff --git a/src/cluster/rpc_server.rs b/src/cluster/rpc_server.rs index a41885fe..235bca4e 100644 --- a/src/cluster/rpc_server.rs +++ b/src/cluster/rpc_server.rs @@ -4,7 +4,6 @@ use std::sync::Arc; use futures::Future; use hyper::client::connect::HttpConnector; -use log::{error, info}; use parking_lot::RwLock; use tantivy::schema::Schema; use tokio::net::TcpListener; @@ -16,6 +15,7 @@ use tower_hyper::client::{Connect, ConnectError, Connection}; use tower_hyper::util::{Connector, Destination}; use tower_hyper::Server; use tower_request_modifier::{Builder, RequestModifier}; +use tracing::*; use toshi_proto::cluster_rpc::*; diff --git a/src/cluster/shard.rs b/src/cluster/shard.rs index 3c898690..836d600f 100644 --- a/src/cluster/shard.rs +++ b/src/cluster/shard.rs @@ -140,7 +140,7 @@ mod tests { #[test] fn test_create_primary_shard() { - let test_shard = PrimaryShard::new(); + let test_shard = PrimaryShard::default(); assert!(test_shard.is_primary()); } diff --git a/src/commit.rs b/src/commit.rs index d033f6ce..76a7292e 100644 --- a/src/commit.rs +++ b/src/commit.rs @@ -4,6 +4,7 @@ use std::time::Duration; use futures::{Future, Stream}; use parking_lot::RwLock; use tokio::timer::Interval; +use tracing::*; use crate::index::IndexCatalog; @@ -26,10 +27,10 @@ impl IndexWatcher { let writer = index.get_writer(); let current_ops = index.get_opstamp(); if current_ops == 0 { - log::debug!("No update to index={}, opstamp={}", key, current_ops); + debug!("No update to index={}, opstamp={}", key, current_ops); } else { let mut w = writer.write(); - log::debug!("Committing {}...", key); + debug!("Committing {}...", key); w.commit().unwrap(); index.set_opstamp(0); } diff --git a/src/error/mod.rs b/src/error/mod.rs index 9f3c8942..646572ea 100644 --- a/src/error/mod.rs +++ b/src/error/mod.rs @@ -98,8 +98,8 @@ impl From for Error { } } -impl From> for Error { - fn from(err: Box<::std::error::Error + Send + 'static>) -> Self { +impl From> for Error { + fn from(err: Box) -> Self { Error::IOError(err.description().to_owned()) } } diff --git a/src/handle.rs b/src/handle.rs index af1ab91c..711b7091 100644 --- a/src/handle.rs +++ b/src/handle.rs @@ -2,7 +2,6 @@ use std::hash::{Hash, Hasher}; use std::sync::atomic::{AtomicU64, AtomicUsize, Ordering}; use std::sync::Arc; -use log::debug; use parking_lot::RwLock; use tantivy::collector::{FacetCollector, MultiCollector, TopDocs}; use tantivy::query::{AllQuery, QueryParser}; @@ -10,6 +9,7 @@ use tantivy::schema::*; use tantivy::space_usage::SearcherSpaceUsage; use tantivy::{Document, Index, IndexReader, IndexWriter, ReloadPolicy, Term}; use tokio::prelude::*; +use tracing::*; use crate::handlers::index::{AddDocument, DeleteDoc, DocsAffected}; use crate::query::{CreateQuery, KeyValue, Query, Search}; @@ -96,9 +96,9 @@ impl IndexHandle for LocalIndex { let top_handle = multi_collector.add_collector(collector); let facet_handle = search.facets.clone().and_then(|f| { - if let Some(field) = schema.get_field(&f.0.field) { + if let Some(field) = schema.get_field(&f.get_facets_fields()) { let mut col = FacetCollector::for_field(field); - for term in f.0.value { + for term in f.get_facets_values() { col.add_facet(&term); } Some(multi_collector.add_collector(col)) @@ -159,10 +159,10 @@ impl IndexHandle for LocalIndex { .collect(); if let Some(facets) = facet_handle { - if let Some(t) = search.facets.clone() { + if let Some(t) = &search.facets { let facet_counts = facets .extract(&mut scored_docs) - .get(&t.0.value[0]) + .get(&t.get_facets_values()[0]) .map(|(f, c)| KeyValue::new(f.to_string(), c)) .collect(); return Ok(SearchResults::with_facets(docs, facet_counts)); @@ -264,12 +264,12 @@ impl LocalIndex { } pub fn get_opstamp(&self) -> usize { - log::trace!("Got the opstamp"); + trace!("Got the opstamp"); self.current_opstamp.load(Ordering::SeqCst) } pub fn set_opstamp(&self, opstamp: usize) { - log::trace!("Setting stamp to {}", opstamp); + trace!("Setting stamp to {}", opstamp); self.current_opstamp.store(opstamp, Ordering::SeqCst) } } diff --git a/src/handlers/bulk.rs b/src/handlers/bulk.rs index 46488c33..596d83f2 100644 --- a/src/handlers/bulk.rs +++ b/src/handlers/bulk.rs @@ -1,7 +1,6 @@ use std::iter::Iterator; use std::str::from_utf8; use std::sync::Arc; -use std::thread; use std::time::Instant; use bytes::Bytes; @@ -12,8 +11,8 @@ use parking_lot::RwLock; use tantivy::schema::Schema; use tantivy::{Document, IndexWriter}; use tokio::prelude::*; +use tracing::*; -use crate::error::Error; use crate::handlers::ResponseFuture; use crate::index::IndexCatalog; use crate::utils::empty_with_code; @@ -28,33 +27,37 @@ impl BulkHandler { BulkHandler { catalog } } - fn index_documents(index_writer: Arc>, doc_receiver: Receiver) -> Result { - let start = Instant::now(); - for doc in doc_receiver { - let w = index_writer.read(); - w.add_document(doc); - } - - log::info!("Piping Documents took: {:?}", start.elapsed()); - let commit = Instant::now(); - let mut w = index_writer.write(); - let stamp = w.commit()?; - log::info!("Bulk Commit took: {:?}", commit.elapsed()); - Ok(stamp) + fn index_documents(index_writer: Arc>, doc_receiver: Receiver) -> impl Future { + future::lazy(move || { + let start = Instant::now(); + for doc in doc_receiver { + let w = index_writer.read(); + w.add_document(doc); + } + + log::info!("Piping Documents took: {:?}", start.elapsed()); + let commit = Instant::now(); + let mut w = index_writer.write(); + w.commit().unwrap(); + log::info!("Bulk Commit took: {:?}", commit.elapsed()); + Ok(()) + }) } - fn parsing_documents(schema: Schema, doc_sender: Sender, line_recv: Receiver) -> Result<(), Error> { - for line in line_recv { - if !line.is_empty() { - if let Ok(text) = from_utf8(&line) { - if let Ok(doc) = schema.parse_document(text) { - log::debug!("Sending doc: {:?}", &doc); - doc_sender.send(doc).unwrap() + fn parsing_documents(schema: Schema, doc_sender: Sender, line_recv: Receiver) -> impl Future { + future::lazy(move || { + for line in line_recv { + if !line.is_empty() { + if let Ok(text) = from_utf8(&line) { + if let Ok(doc) = schema.parse_document(text) { + debug!("Sending doc: {:?}", &doc); + doc_sender.send(doc).unwrap() + } } } } - } - Ok(()) + Ok(()) + }) } pub fn bulk_insert(&self, body: Body, index: String) -> ResponseFuture { @@ -64,20 +67,20 @@ impl BulkHandler { let schema = index.schema(); let (line_sender, line_recv) = index_lock.settings.get_channel::(); let (doc_sender, doc_recv) = unbounded::(); - - for _ in 0..index_lock.settings.json_parsing_threads { - let schema_clone = schema.clone(); - let doc_sender = doc_sender.clone(); - let line_recv_clone = line_recv.clone(); - thread::spawn(move || BulkHandler::parsing_documents(schema_clone, doc_sender, line_recv_clone)); - } - let writer = index_handle.get_writer(); - thread::spawn(|| BulkHandler::index_documents(writer, doc_recv)); - + let num_threads = index_lock.settings.json_parsing_threads; let line_sender_clone = line_sender.clone(); + let fut = body .fold(Bytes::new(), move |mut buf, line| -> Result { + for _ in 0..num_threads { + tokio::spawn(BulkHandler::parsing_documents( + schema.clone(), + doc_sender.clone(), + line_recv.clone(), + )); + } + buf.extend(line); let mut split = buf.split(|b| *b == b'\n').peekable(); @@ -85,7 +88,7 @@ impl BulkHandler { if split.peek().is_none() { return Ok(Bytes::from(l)); } - log::debug!("Bytes in buf: {}", buf.len()); + debug!("Bytes in buf: {}", buf.len()); line_sender_clone.send(Bytes::from(l)).expect("Line sender failed."); } Ok(buf) @@ -94,6 +97,7 @@ impl BulkHandler { if !left.is_empty() { line_sender.send(left).expect("Line sender failed #2"); } + tokio::spawn(BulkHandler::index_documents(writer, doc_recv)); future::ok(empty_with_code(StatusCode::CREATED)) }); @@ -113,6 +117,7 @@ mod tests { use crate::results::SearchResults; use super::*; + use crate::error::Error; #[test] fn test_bulk_index() -> Result<(), Error> { diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index 1c131bee..7017b17e 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -2,7 +2,7 @@ use futures::Future; use http::Response; use hyper::Body; -pub use self::{bulk::BulkHandler, index::IndexHandler, search::SearchHandler, summary::SummaryHandler}; +pub use self::{bulk::BulkHandler, index::IndexHandler, search::SearchHandler, summary::summary}; pub mod bulk; pub mod index; @@ -10,5 +10,5 @@ pub mod root; pub mod search; pub mod summary; -pub type BaseFuture = Future, Error = hyper::Error> + Send; +pub type BaseFuture = dyn Future, Error = hyper::Error> + Send; pub type ResponseFuture = Box; diff --git a/src/handlers/search.rs b/src/handlers/search.rs index dad63261..c4ea2815 100644 --- a/src/handlers/search.rs +++ b/src/handlers/search.rs @@ -4,8 +4,8 @@ use futures::future::Either; use futures::stream::futures_unordered; use http::StatusCode; use hyper::Body; -use log::info; use tokio::prelude::*; +use tracing::*; use crate::handlers::ResponseFuture; use crate::index::SharedCatalog; @@ -67,7 +67,9 @@ impl SearchHandler { #[cfg(test)] pub mod tests { + use hyper::Response; use pretty_assertions::assert_eq; + use serde::de::DeserializeOwned; use crate::handlers::ResponseFuture; use crate::index::tests::*; @@ -77,6 +79,14 @@ pub mod tests { type ReturnUnit = Result<(), hyper::error::Error>; + pub fn wait_json(r: Response) -> T { + r.into_body() + .concat2() + .map(|ref b| serde_json::from_slice::(b).unwrap_or_else(|_| panic!("Could not deserialize JSON: {:?}", b))) + .wait() + .unwrap_or_else(|e| panic!(e)) + } + pub fn run_query(req: Search, index: &str) -> ResponseFuture { let cat = create_test_catalog(index); let handler = SearchHandler::new(Arc::clone(&cat)); @@ -90,7 +100,7 @@ pub mod tests { let search = Search::new(Some(term_query), None, 10); run_query(search, "test_index") .map(|q| { - let body: SearchResults = serde_json::from_slice(&q.into_body().concat2().wait().unwrap()).unwrap(); + let body: SearchResults = wait_json(q); assert_eq!(body.hits, 3); }) .wait() @@ -105,7 +115,7 @@ pub mod tests { let search = Search::new(Some(term_query), None, 10); run_query(search, "test_index") .map(|q| { - let body: SearchResults = serde_json::from_slice(&q.into_body().concat2().wait().unwrap()).unwrap(); + let body: SearchResults = wait_json(q); assert_eq!(body.hits, 3); }) .wait() @@ -153,7 +163,8 @@ pub mod tests { handler .doc_search(Body::from(body), "test_index".into()) .map(|r| { - dbg!(r); + let docs: SearchResults = wait_json(r); + assert_eq!(docs.hits, 0); }) .map_err(|err| dbg!(err)) .wait() @@ -180,7 +191,7 @@ pub mod tests { let req: Search = serde_json::from_str(body)?; let docs = run_query(req, "test_index") .map(|q| { - let b: SearchResults = serde_json::from_slice(&q.into_body().concat2().wait().unwrap()).unwrap(); + let b: SearchResults = wait_json(q); assert_eq!(b.facets[0].value, 1); assert_eq!(b.facets[1].value, 1); assert_eq!(b.facets[0].field, "/cat/cat2"); @@ -197,7 +208,7 @@ pub mod tests { let req = Search::new(Some(Query::Raw { raw: body.into() }), None, 10); let docs = run_query(req, "test_index") .map(|q| { - let body: SearchResults = serde_json::from_slice(&q.into_body().concat2().wait().unwrap()).unwrap(); + let body: SearchResults = wait_json(q); assert_eq!(body.hits as usize, body.docs.len()); assert_eq!(body.docs[0].doc["test_text"][0].text().unwrap(), "Test Duckiment 3") }) @@ -214,7 +225,7 @@ pub mod tests { let search = Search::new(Some(term_query), None, 10); let query = run_query(search, "test_index") .map(|q| { - let body: SearchResults = serde_json::from_slice(&q.into_body().concat2().wait().unwrap()).unwrap(); + let body: SearchResults = wait_json(q); assert_eq!(body.hits as usize, body.docs.len()); assert_eq!(body.hits, 3); @@ -232,7 +243,7 @@ pub mod tests { let req: Search = serde_json::from_str(body)?; let docs = run_query(req, "test_index") .map(|q| { - let body: SearchResults = serde_json::from_slice(&q.into_body().concat2().wait().unwrap()).unwrap(); + let body: SearchResults = wait_json(q); assert_eq!(body.hits as usize, body.docs.len()); assert_eq!(body.docs[0].score.unwrap(), 1.0); @@ -249,7 +260,7 @@ pub mod tests { let req: Search = serde_json::from_str(&body)?; let docs = run_query(req, "test_index") .map(|q| { - let body: SearchResults = serde_json::from_slice(&q.into_body().concat2().wait().unwrap()).unwrap(); + let body: SearchResults = wait_json(q); assert_eq!(body.hits as usize, body.docs.len()); assert_eq!(body.docs[0].score.unwrap(), 1.0); @@ -266,7 +277,7 @@ pub mod tests { let req: Search = serde_json::from_str(&body)?; let docs = run_query(req, "test_index") .map(|q| { - let body: SearchResults = serde_json::from_slice(&q.into_body().concat2().wait().unwrap()).unwrap(); + let body: SearchResults = wait_json(q); assert_eq!(body.hits, 4) }) .map_err(|_| ()); @@ -284,7 +295,7 @@ pub mod tests { let query = serde_json::from_str::(test_json)?; let docs = run_query(query, "test_index") .map(|q| { - let body: SearchResults = serde_json::from_slice(&q.into_body().concat2().wait().unwrap()).unwrap(); + let body: SearchResults = wait_json(q); assert_eq!(body.hits, 2) }) .map_err(|_| ()); diff --git a/src/handlers/summary.rs b/src/handlers/summary.rs index fd8d44cb..3d709fab 100644 --- a/src/handlers/summary.rs +++ b/src/handlers/summary.rs @@ -1,89 +1,95 @@ -use std::sync::Arc; - use futures::future; use http::Response; use serde::{Deserialize, Serialize}; -use serde_json::Value; +use std::time::Instant; use tantivy::space_usage::SearcherSpaceUsage; +use tantivy::IndexMeta; +use tracing::{span, Level}; +use tracing_futures::Instrument; use crate::error::Error; use crate::handlers::ResponseFuture; use crate::index::SharedCatalog; use crate::router::QueryOptions; use crate::utils::with_body; +use std::sync::Arc; -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize)] pub struct SummaryResponse { - summaries: Value, + summaries: IndexMeta, #[serde(skip_serializing_if = "Option::is_none")] segment_sizes: Option, } impl SummaryResponse { - pub fn new(summaries: Value, segment_sizes: Option) -> Self { + pub fn new(summaries: IndexMeta, segment_sizes: Option) -> Self { Self { summaries, segment_sizes } } } -#[derive(Clone)] -pub struct SummaryHandler { - catalog: SharedCatalog, -} - -impl SummaryHandler { - pub fn new(catalog: SharedCatalog) -> Self { - SummaryHandler { catalog } - } - - pub fn summary(&self, index: String, options: QueryOptions) -> ResponseFuture { - let index_lock = Arc::clone(&self.catalog); - let fut = future::lazy(move || { - let index_lock = index_lock.read(); - if index_lock.exists(&index) { - let index = index_lock.get_index(&index).unwrap(); - let metas = index.get_index().load_metas().unwrap(); - let summaries = serde_json::to_value(&metas).unwrap(); - let summary = if options.include_sizes() { - SummaryResponse::new(summaries, Some(index.get_space())) - } else { - SummaryResponse::new(summaries, None) - }; - future::ok(with_body(summary)) +pub fn summary(catalog: SharedCatalog, index: String, options: QueryOptions) -> ResponseFuture { + let start = Instant::now(); + let span = span!(Level::INFO, "summary_handler", ?index, ?options); + let index_lock = Arc::clone(&catalog); + let fut = future::lazy(move || { + let index_lock = index_lock.read(); + if index_lock.exists(&index) { + let index = index_lock.get_index(&index).unwrap(); + let metas = index.get_index().load_metas().unwrap(); + let summary = if options.include_sizes() { + SummaryResponse::new(metas, Some(index.get_space())) } else { - let err = Error::IOError(format!("Index {} does not exist", index)); - let resp = Response::from(err); - future::ok(resp) - } - }); - - Box::new(fut) - } + SummaryResponse::new(metas, None) + }; + tracing::info!("Took: {:?}", start.elapsed()); + future::ok(with_body(summary)) + } else { + let err = Error::IOError(format!("Index {} does not exist", index)); + let resp = Response::from(err); + tracing::info!("Took: {:?}", start.elapsed()); + future::ok(resp) + } + }) + .instrument(span); + Box::new(fut) } #[cfg(test)] mod tests { - use std::sync::Arc; - - use futures::{Future, Stream}; - - use crate::index::tests::*; - use super::*; + use crate::router::tests::TEST_SERVER; + use futures::{Future, Stream}; + use toshi_test::get_localhost; #[test] fn get_summary_data() { - let cat = create_test_catalog("test_index"); - let handler = SummaryHandler::new(Arc::clone(&cat)); - - let resp = handler - .summary("test_index".into(), QueryOptions::default()) + let addr = get_localhost(); + let resp = TEST_SERVER + .client_with_address(addr) + .get("http://localhost:8080/test_index/_summary?include_sizes=true") + .perform() + .unwrap() + .into_body() + .concat2() .wait() + .unwrap(); + + let resp2 = TEST_SERVER + .client_with_address(addr) + .get("http://localhost:8080/test_index/_summary") + .perform() .unwrap() .into_body() .concat2() - .wait(); - let summary: SummaryResponse = serde_json::from_slice(&resp.unwrap()).unwrap(); - println!("{:#?}", summary); - // assert_eq!(resp.is_ok(), true) + .wait() + .unwrap(); + + let summary: Result = serde_json::from_slice(&resp); + let summary2: Result = serde_json::from_slice(&resp2); + + assert_eq!(summary.is_ok(), true); + assert_eq!(summary.unwrap().segment_sizes.is_some(), true); + assert_eq!(summary2.is_ok(), true); + assert_eq!(summary2.unwrap().segment_sizes.is_none(), true); } } diff --git a/src/lib.rs b/src/lib.rs index f7339a3a..54259368 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,10 +1,12 @@ +#![forbid(unsafe_code)] +#![deny(future_incompatible)] + pub mod cluster; pub mod commit; pub mod error; pub mod handle; pub mod handlers; pub mod index; -//pub mod indexing; pub mod query; pub mod results; pub mod router; diff --git a/src/query/bool.rs b/src/query/bool.rs index eb9a78e0..0532dd2d 100644 --- a/src/query/bool.rs +++ b/src/query/bool.rs @@ -18,8 +18,8 @@ pub struct BoolQuery { } impl CreateQuery for BoolQuery { - fn create_query(self, schema: &Schema) -> Result> { - let mut all_queries: Vec<(Occur, Box)> = Vec::new(); + fn create_query(self, schema: &Schema) -> Result> { + let mut all_queries: Vec<(Occur, Box)> = Vec::new(); all_queries.append(&mut parse_queries(schema, Occur::Must, &self.must)?); all_queries.append(&mut parse_queries(schema, Occur::MustNot, &self.must_not)?); all_queries.append(&mut parse_queries(schema, Occur::Should, &self.should)?); @@ -27,7 +27,7 @@ impl CreateQuery for BoolQuery { } } -fn parse_queries(schema: &Schema, occur: Occur, queries: &[Query]) -> Result)>> { +fn parse_queries(schema: &Schema, occur: Occur, queries: &[Query]) -> Result)>> { queries .iter() .map(|q| match q { @@ -38,7 +38,7 @@ fn parse_queries(schema: &Schema, occur: Occur, queries: &[Query]) -> Result Ok((occur, r.clone().create_query(&schema)?)), _ => Err(Error::QueryError("Invalid type for boolean query".into())), }) - .collect::)>>>() + .collect::)>>>() } #[cfg(test)] diff --git a/src/query/facet.rs b/src/query/facet.rs index 2cdb1af4..2eb1e844 100644 --- a/src/query/facet.rs +++ b/src/query/facet.rs @@ -2,11 +2,19 @@ use serde::{Deserialize, Serialize}; use crate::query::KeyValue; -#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] -pub struct FacetQuery(pub KeyValue>); +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct FacetQuery(KeyValue>); impl FacetQuery { pub fn new(facets: KeyValue>) -> Self { Self(facets) } + + pub fn get_facets_values(&self) -> &[String] { + &self.0.value + } + + pub fn get_facets_fields(&self) -> &str { + &self.0.field + } } diff --git a/src/query/fuzzy.rs b/src/query/fuzzy.rs index 8dc6c6a8..530e6bb4 100644 --- a/src/query/fuzzy.rs +++ b/src/query/fuzzy.rs @@ -36,7 +36,7 @@ impl FuzzyQuery { } impl CreateQuery for FuzzyQuery { - fn create_query(self, schema: &Schema) -> Result> { + fn create_query(self, schema: &Schema) -> Result> { let KeyValue { field, value } = self.fuzzy; let term = make_field_value(schema, &field, &value.value)?; Ok(Box::new(FuzzyTermQuery::new(term, value.distance, value.transposition))) diff --git a/src/query/mod.rs b/src/query/mod.rs index d54a9c1f..f47a626f 100644 --- a/src/query/mod.rs +++ b/src/query/mod.rs @@ -31,7 +31,7 @@ mod regex; mod term; pub trait CreateQuery { - fn create_query(self, schema: &Schema) -> Result>; + fn create_query(self, schema: &Schema) -> Result>; } #[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] diff --git a/src/query/phrase.rs b/src/query/phrase.rs index 6ff3bbff..3c858379 100644 --- a/src/query/phrase.rs +++ b/src/query/phrase.rs @@ -1,11 +1,11 @@ -use crate::query::*; -use crate::{error::Error, Result}; - use serde::{Deserialize, Serialize}; use tantivy::query::{PhraseQuery as TantivyPhraseQuery, Query}; use tantivy::schema::Schema; use tantivy::Term; +use crate::query::{make_field_value, CreateQuery, KeyValue}; +use crate::{error::Error, Result}; + #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] pub struct PhraseQuery { phrase: KeyValue, @@ -30,7 +30,7 @@ impl PhraseQuery { } impl CreateQuery for PhraseQuery { - fn create_query(self, schema: &Schema) -> Result> { + fn create_query(self, schema: &Schema) -> Result> { let KeyValue { field, value } = self.phrase; if value.terms.len() <= 1 { return Err(Error::QueryError("Phrase Query must have more than 1 term".into())); @@ -66,9 +66,9 @@ impl CreateQuery for PhraseQuery { #[cfg(test)] pub mod tests { + use tantivy::schema::*; use super::*; - use tantivy::schema::*; #[test] pub fn test_no_terms() { diff --git a/src/query/range.rs b/src/query/range.rs index 2accc8d4..f8bcda78 100644 --- a/src/query/range.rs +++ b/src/query/range.rs @@ -27,39 +27,39 @@ pub struct RangeQuery { } impl CreateQuery for RangeQuery { - fn create_query(self, schema: &Schema) -> Result> { + fn create_query(self, schema: &Schema) -> Result> { let KeyValue { field, value } = self.range; create_range_query(schema, &field, &value) } } #[inline] -fn create_ranges(gte: &Option, lte: &Option, lt: &Option, gt: &Option) -> Result<(Bound, Bound)> +fn include_exclude(r: &Option, r2: &Option) -> Result> where T: DeserializeOwned, { - let lower = if let Some(b) = gt { - let value = serde_json::from_value(b.clone()).map_err(Error::from)?; - Bound::Excluded(value) - } else if let Some(b) = gte { - let value = serde_json::from_value(b.clone()).map_err(Error::from)?; - Bound::Included(value) - } else { - Bound::Unbounded - }; - let upper = if let Some(b) = lt { + if let Some(b) = r { let value = serde_json::from_value(b.clone()).map_err(Error::from)?; - Bound::Excluded(value) - } else if let Some(b) = lte { + Ok(Bound::Excluded(value)) + } else if let Some(b) = r2 { let value = serde_json::from_value(b.clone()).map_err(Error::from)?; - Bound::Included(value) + Ok(Bound::Included(value)) } else { - Bound::Unbounded - }; + Ok(Bound::Unbounded) + } +} + +#[inline] +fn create_ranges(gte: &Option, lte: &Option, lt: &Option, gt: &Option) -> Result<(Bound, Bound)> +where + T: DeserializeOwned, +{ + let lower = include_exclude(gt, gte)?; + let upper = include_exclude(lt, lte)?; Ok((upper, lower)) } -pub fn create_range_query(schema: &Schema, field: &str, r: &Ranges) -> Result> { +pub fn create_range_query(schema: &Schema, field: &str, r: &Ranges) -> Result> { match r { Ranges::ValueRange { gte, lte, lt, gt, .. } => { let field = schema diff --git a/src/query/regex.rs b/src/query/regex.rs index 4cb45465..e68a6229 100644 --- a/src/query/regex.rs +++ b/src/query/regex.rs @@ -11,7 +11,7 @@ pub struct RegexQuery { } impl CreateQuery for RegexQuery { - fn create_query(self, schema: &Schema) -> Result> { + fn create_query(self, schema: &Schema) -> Result> { let KeyValue { field, value } = self.regex; let field = schema .get_field(&field) diff --git a/src/query/term.rs b/src/query/term.rs index 37bd9f84..635d0d3c 100644 --- a/src/query/term.rs +++ b/src/query/term.rs @@ -17,7 +17,7 @@ impl ExactTerm { } impl CreateQuery for ExactTerm { - fn create_query(self, schema: &Schema) -> Result> { + fn create_query(self, schema: &Schema) -> Result> { let KeyValue { field, value } = self.term; let term = make_field_value(schema, &field, &value)?; Ok(Box::new(TermQuery::new(term, IndexRecordOption::Basic))) diff --git a/src/router.rs b/src/router.rs index 46846e71..25b843ab 100644 --- a/src/router.rs +++ b/src/router.rs @@ -13,8 +13,8 @@ use crate::utils::{not_found, parse_path}; #[derive(Deserialize, Debug, Default)] pub struct QueryOptions { - pretty: Option, - include_sizes: Option, + pub pretty: Option, + pub include_sizes: Option, } impl QueryOptions { @@ -34,9 +34,11 @@ pub fn router_with_catalog(addr: &SocketAddr, catalog: Arc> let search_handler = SearchHandler::new(Arc::clone(&catalog)); let index_handler = IndexHandler::new(Arc::clone(&catalog)); let bulk_handler = BulkHandler::new(Arc::clone(&catalog)); - let summary_handler = SummaryHandler::new(Arc::clone(&catalog)); + let summary_cat = Arc::clone(&catalog); service_fn(move |req: Request| { + let summary_cat = &summary_cat; + let (parts, body) = req.into_parts(); let query_options: QueryOptions = parts @@ -48,7 +50,7 @@ pub fn router_with_catalog(addr: &SocketAddr, catalog: Arc> let method = parts.method; let path = parse_path(parts.uri.path()); - log::info!("REQ = {:?}", path); + tracing::info!("REQ = {:?}", path); match (method, &path[..]) { (Method::PUT, [idx, action]) => match *action { @@ -56,7 +58,7 @@ pub fn router_with_catalog(addr: &SocketAddr, catalog: Arc> _ => not_found(), }, (Method::GET, [idx, action]) => match *action { - "_summary" => summary_handler.summary(idx.to_string(), query_options), + "_summary" => summary(Arc::clone(summary_cat), idx.to_string(), query_options), _ => not_found(), }, (Method::POST, [idx, action]) => match *action { @@ -83,7 +85,7 @@ pub fn router_with_catalog(addr: &SocketAddr, catalog: Arc> .tcp_nodelay(true) .http1_half_close(false) .serve(routes) - .map_err(|e| eprintln!("HYPER ERROR = {:?}", e)) + .map_err(|e| tracing::error!("HYPER ERROR = {:?}", e)) } #[cfg(test)] @@ -91,11 +93,30 @@ pub mod tests { use crate::index::tests::create_test_catalog; use super::*; + use http::StatusCode; + use lazy_static::lazy_static; + use toshi_test::{get_localhost, TestServer}; + + lazy_static! { + pub static ref TEST_SERVER: TestServer = { + let catalog = create_test_catalog("test_index"); + let addr = get_localhost(); + let router = router_with_catalog(&addr, Arc::clone(&catalog)); + TestServer::new(router).expect("Can't start test server") + }; + } #[test] pub fn test_create_router() { - let catalog = create_test_catalog("test_index"); - let addr = "127.0.0.1:8080".parse::().unwrap(); - router_with_catalog(&addr, Arc::clone(&catalog)); + let addr = get_localhost(); + let response = TEST_SERVER + .client_with_address(addr) + .get("http://localhost:8080") + .perform() + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + let buf = String::from_utf8(response.into_body().concat2().wait().unwrap().to_vec()).unwrap(); + assert_eq!(buf, "{\"name\":\"Toshi Search\",\"version\":\"0.1.1\"}"); } } diff --git a/src/settings.rs b/src/settings.rs index fdd232be..77cc7117 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -252,7 +252,7 @@ impl Settings { self.experimental_features.nodes.clone() } - pub fn get_merge_policy(&self) -> Box { + pub fn get_merge_policy(&self) -> Box { match self.merge_policy.get_kind() { MergePolicyType::Log => { let mut mp = LogMergePolicy::default(); diff --git a/src/shutdown.rs b/src/shutdown.rs index 9ba97149..3ab6c0ae 100644 --- a/src/shutdown.rs +++ b/src/shutdown.rs @@ -1,6 +1,6 @@ use futures::{Future, Stream}; -use log::info; use tokio::sync::oneshot; +use tracing::*; #[cfg(unix)] pub fn shutdown(signal: oneshot::Sender<()>) -> impl Future { diff --git a/summary.http b/summary.http new file mode 100644 index 00000000..036d6b6e --- /dev/null +++ b/summary.http @@ -0,0 +1,4 @@ +GET localhost:8080/test_index/_summary?include_sizes=true +Content-Type: application/json + +### diff --git a/toshi-test/Cargo.toml b/toshi-test/Cargo.toml new file mode 100644 index 00000000..2137a034 --- /dev/null +++ b/toshi-test/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "toshi-test" +version = "0.1.0" +authors = ["Stephen Carman "] +description = "A full text search engine based on Tantivy" +repository = "https://github.com/toshi-search/Toshi" +license = "MIT" +edition = "2018" + +[dependencies] +hyper = "^0.12" +http = "^0.1" +futures = "^0.1" +tokio = "^0.1" +failure = "^0.1" +tracing = "^0.1" \ No newline at end of file diff --git a/toshi-test/src/lib.rs b/toshi-test/src/lib.rs new file mode 100644 index 00000000..f475abe1 --- /dev/null +++ b/toshi-test/src/lib.rs @@ -0,0 +1,17 @@ +/// Toshi-test is a modified version of Gotham's Test server, credit goes to them +/// https://github.com/gotham-rs/gotham/blob/master/gotham/src/test.rs +/// This was created to create a more integration test oriented way to test Toshi services +/// instead of magically bypassing some setup to call services. +pub use crate::server::*; +pub use crate::test::*; +use std::net::SocketAddr; + +pub mod server; +pub mod test; + +pub type Result = std::result::Result; +pub static CONTENT_TYPE: &str = "application/json"; + +pub fn get_localhost() -> SocketAddr { + "127.0.0.1:8080".parse::().unwrap() +} diff --git a/toshi-test/src/server.rs b/toshi-test/src/server.rs new file mode 100644 index 00000000..d0c826cf --- /dev/null +++ b/toshi-test/src/server.rs @@ -0,0 +1,177 @@ +use std::net::SocketAddr; +use std::sync::{Arc, RwLock}; +use std::time::{Duration, Instant}; + +use failure::{self, Error}; +use futures::Future; +use hyper::client::connect::{Connect, Connected, Destination}; +use hyper::client::Client; +use tokio::net::TcpStream; +use tokio::runtime::Runtime; +use tokio::timer::Delay; +use tracing::info; + +use crate::{Result, Server, TestClient}; + +pub struct TestServer { + timeout: u64, + runtime: Arc>, +} + +impl Clone for TestServer { + fn clone(&self) -> TestServer { + TestServer { + timeout: self.timeout, + runtime: Arc::new(RwLock::new(Runtime::new().unwrap())), + } + } +} + +impl Server for TestServer { + fn run_future(&self, future: F) -> Result + where + F: Send + 'static + Future, + R: Send + 'static, + E: failure::Fail, + { + let (tx, rx) = futures::sync::oneshot::channel(); + self.runtime + .write() + .expect("???") + .spawn(future.then(move |r| tx.send(r).map_err(|_| unreachable!()))); + rx.wait().unwrap().map_err(Into::into) + } + + fn request_expiry(&self) -> Delay { + Delay::new(Instant::now() + Duration::from_secs(self.timeout)) + } +} + +impl TestServer { + pub fn new + Send + 'static>(router: F) -> Result { + TestServer::with_timeout(router, 10) + } + + pub fn with_timeout + Send + 'static>(router: F, timeout: u64) -> Result { + let mut runtime = Runtime::new()?; + + runtime.spawn(router); + + let data = TestServer { + timeout, + runtime: Arc::new(RwLock::new(runtime)), + }; + + Ok(data) + } + + pub fn spawn(&self, fut: F) + where + F: Future + Send + 'static, + { + self.runtime.write().expect("Can't spawn").spawn(fut); + } + + pub fn client_with_address(&self, client_addr: SocketAddr) -> TestClient { + self.try_client_with_address(client_addr) + .expect("TestServer: unable to spawn client") + } + + fn try_client_with_address(&self, client_addr: SocketAddr) -> Result> { + let client = Client::builder().build(TestConnect { addr: client_addr }); + + Ok(TestClient { + rt: Arc::clone(&self.runtime), + client, + }) + } +} + +pub struct TestConnect { + pub(crate) addr: SocketAddr, +} + +impl Connect for TestConnect { + type Transport = TcpStream; + type Error = failure::Error; + type Future = Box + Send + Sync>; + + fn connect(&self, _dst: Destination) -> Self::Future { + Box::new( + TcpStream::connect(&self.addr) + .inspect(|s| info!("Client TcpStream connected: {:?}", s)) + .map(|s| (s, Connected::new())) + .map_err(Error::from), + ) + } +} + +#[cfg(test)] +mod tests { + use futures::future; + use hyper::service::service_fn; + use hyper::{Body, Request, Response, StatusCode}; + use tokio::prelude::*; + use tracing::info; + + use super::*; + + pub fn svc() -> impl Future + Send { + let f = move || { + service_fn(|req: Request| { + let path = req.uri().path().to_owned(); + match path.as_str() { + "/" => { + info!("TestHandler responding to /"); + let response = Response::builder().status(StatusCode::OK).body(Body::from("Response")).unwrap(); + + future::ok::, hyper::Error>(response).into_future() + } + "/echo" => { + info!("TestHandler responding to /myaddr"); + let response = Response::builder() + .status(StatusCode::OK) + .body(Body::from(format!("{}", req.uri()))) + .unwrap(); + + future::ok(response).into_future() + } + _ => unreachable!(), + } + }) + }; + + hyper::Server::bind(&"127.0.0.1:8080".parse::().unwrap()) + .tcp_nodelay(true) + .http1_half_close(false) + .serve(f) + .map_err(|e| tracing::error!("HYPER ERROR = {:?}", e)) + } + + #[test] + fn serves_addr() { + let new_service = svc(); + let test_server = TestServer::new(new_service).unwrap(); + let addr = "127.0.0.1:8080".parse::().unwrap(); + let response = test_server + .client_with_address(addr) + .get("http://localhost:8080/echo") + .perform() + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + let buf = response.into_body().concat2().wait().unwrap(); + assert_eq!(buf, "/echo"); + + let response = test_server + .client_with_address(addr) + .get("http://localhost:8080/") + .perform() + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + let buf = response.into_body().concat2().wait().unwrap(); + assert_eq!(buf, "Response"); + } + +} diff --git a/toshi-test/src/test.rs b/toshi-test/src/test.rs new file mode 100644 index 00000000..644b7c12 --- /dev/null +++ b/toshi-test/src/test.rs @@ -0,0 +1,208 @@ +use std::fmt; +use std::ops::{Deref, DerefMut}; + +use failure::{format_err, Error}; +use futures::{future, Future, Stream}; +use http::HttpTryFrom; +use hyper::client::{connect::Connect, Client}; +use hyper::header::{HeaderValue, IntoHeaderName}; +use hyper::{Body, Method, Request, Response, Uri}; +use tokio::timer::Delay; +use tracing::warn; + +use crate::{Result, CONTENT_TYPE}; +use std::sync::{Arc, RwLock}; +use tokio::runtime::Runtime; + +pub struct TestRequest<'a, C: Connect> { + client: &'a TestClient, + request: Request, +} + +impl<'a, C: Connect> Deref for TestRequest<'a, C> { + type Target = Request; + + fn deref(&self) -> &Request { + &self.request + } +} + +impl<'a, C: Connect> DerefMut for TestRequest<'a, C> { + fn deref_mut(&mut self) -> &mut Request { + &mut self.request + } +} + +impl<'a, C: Connect + 'static> TestRequest<'a, C> { + pub(crate) fn new(client: &'a TestClient, method: Method, uri: U) -> Self + where + Uri: HttpTryFrom, + { + TestRequest { + client, + request: Request::builder().method(method).uri(uri).body(Body::empty()).unwrap(), + } + } + + pub fn perform(self) -> Result> { + self.client.perform(self) + } + + pub(crate) fn request(self) -> Request { + self.request + } + + pub fn with_header(mut self, name: N, value: HeaderValue) -> Self + where + N: IntoHeaderName, + { + self.headers_mut().insert(name, value); + self + } +} + +pub(crate) trait BodyReader { + fn read_body(&mut self, response: Response) -> Result>; +} + +pub trait Server: Clone { + fn run_future(&self, future: F) -> Result + where + F: Send + 'static + Future, + R: Send + 'static, + E: failure::Fail; + + fn request_expiry(&self) -> Delay; + + fn run_request(&self, f: F) -> Result + where + F: Future + Send + 'static, + F::Error: failure::Fail + Sized, + F::Item: Send, + { + let might_expire = self.run_future(f.select2(self.request_expiry()).map_err(|either| { + let e: failure::Error = match either { + future::Either::A((req_err, _)) => { + warn!("run_request request error: {:?}", req_err); + req_err.into() + } + future::Either::B((times_up, _)) => { + warn!("run_request timed out"); + times_up.into() + } + }; + e.compat() + }))?; + + match might_expire { + future::Either::A((item, _)) => Ok(item), + future::Either::B(_) => Err(failure::err_msg("Timeout")), + } + } +} + +impl BodyReader for T { + fn read_body(&mut self, response: Response) -> Result> { + let f = response.into_body().concat2().map(|chunk| chunk.into_iter().collect()); + self.run_future(f) + } +} + +pub struct TestClient { + pub(crate) client: Client, + pub(crate) rt: Arc>, +} + +impl TestClient { + pub fn get(&self, uri: U) -> TestRequest + where + Uri: HttpTryFrom, + { + self.build_request(Method::GET, uri) + } + + pub fn post(&self, uri: U, body: B) -> TestRequest + where + B: Into, + Uri: HttpTryFrom, + { + self.build_request_with_body(Method::POST, uri, body) + } + + pub fn put(&self, uri: U, body: B) -> TestRequest + where + B: Into, + Uri: HttpTryFrom, + { + self.build_request_with_body(Method::PUT, uri, body) + } + + pub fn build_request(&self, method: Method, uri: U) -> TestRequest + where + Uri: HttpTryFrom, + { + TestRequest::new(self, method, uri) + } + + pub fn build_request_with_body(&self, method: Method, uri: U, body: B) -> TestRequest + where + B: Into, + Uri: HttpTryFrom, + { + let mut request = self.build_request(method, uri); + { + let headers = request.headers_mut(); + headers.insert("CONTENT_TYPE", HeaderValue::from_str(CONTENT_TYPE).unwrap()); + } + + *request.body_mut() = body.into(); + request + } + + pub fn perform(&self, req: TestRequest) -> Result> { + let req_future = self.client.request(req.request()).map_err(|e| { + warn!("Error from test client request {:?}", e); + format_err!("request failed: {:?}", e).compat() + }); + + let (tx, rx) = futures::sync::oneshot::channel(); + self.rt + .write() + .expect("???") + .spawn(req_future.then(move |r| tx.send(r).map_err(|_| unreachable!()))); + + rx.wait().unwrap().map_err(Into::into) + } +} + +pub struct TestResponse { + response: Response, +} + +impl Deref for TestResponse { + type Target = Response; + + fn deref(&self) -> &Response { + &self.response + } +} + +impl DerefMut for TestResponse { + fn deref_mut(&mut self) -> &mut Response { + &mut self.response + } +} + +impl fmt::Debug for TestResponse { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "TestResponse") + } +} + +impl TestResponse { + pub fn read_utf8_body(self) -> Result { + let buf = self.response.into_body().concat2().wait()?; + let s = String::from_utf8(buf.to_vec())?; + Ok(s) + } +}