├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ├── RustConfig ├── assets └── crates-io-demo.gif ├── docs ├── index.css ├── index.html ├── va9B4kDNxMZdWfMOD5VnLK3eRhf6Xl7Glw.woff2 ├── va9B4kDNxMZdWfMOD5VnPKreRhf6Xl7Glw.woff2 └── va9E4kDNxMZdWfMOD5Vvl4jLazX3dA.woff2 ├── run.sh └── src ├── backoff.rs ├── bin ├── full_init.rs ├── full_update.rs └── live.rs └── lib.rs /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk 3 | *.out 4 | crates.io-index 5 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "adler32" 5 | version = "1.0.4" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | 8 | [[package]] 9 | name = "aho-corasick" 10 | version = "0.7.6" 11 | source = "registry+https://github.com/rust-lang/crates.io-index" 12 | dependencies = [ 13 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 14 | ] 15 | 16 | [[package]] 17 | name = "arrayvec" 18 | version = "0.4.11" 19 | source = "registry+https://github.com/rust-lang/crates.io-index" 20 | dependencies = [ 21 | "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 22 | ] 23 | 24 | [[package]] 25 | name = "async-macros" 26 | version = "1.0.0" 27 | source = "registry+https://github.com/rust-lang/crates.io-index" 28 | dependencies = [ 29 | "futures-core-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 30 | "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", 31 | ] 32 | 33 | [[package]] 34 | name = "async-std" 35 | version = "0.99.6" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | dependencies = [ 38 | "async-macros 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 39 | "async-task 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 40 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 41 | "crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 42 | "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 43 | "futures-core-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 44 | "futures-io-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 45 | "futures-timer 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 46 | "kv-log-macro 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 47 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 48 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 49 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 50 | "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", 51 | "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", 52 | "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 53 | "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", 54 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 55 | ] 56 | 57 | [[package]] 58 | name = "async-task" 59 | version = "1.0.0" 60 | source = "registry+https://github.com/rust-lang/crates.io-index" 61 | dependencies = [ 62 | "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 63 | ] 64 | 65 | [[package]] 66 | name = "atom_syndication" 67 | version = "0.6.0" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | dependencies = [ 70 | "derive_builder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 71 | "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 72 | "quick-xml 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)", 73 | ] 74 | 75 | [[package]] 76 | name = "autocfg" 77 | version = "0.1.6" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | 80 | [[package]] 81 | name = "backtrace" 82 | version = "0.3.38" 83 | source = "registry+https://github.com/rust-lang/crates.io-index" 84 | dependencies = [ 85 | "backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", 86 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 87 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 88 | "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 89 | ] 90 | 91 | [[package]] 92 | name = "backtrace-sys" 93 | version = "0.1.31" 94 | source = "registry+https://github.com/rust-lang/crates.io-index" 95 | dependencies = [ 96 | "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)", 97 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 98 | ] 99 | 100 | [[package]] 101 | name = "bitflags" 102 | version = "1.2.0" 103 | source = "registry+https://github.com/rust-lang/crates.io-index" 104 | 105 | [[package]] 106 | name = "block-buffer" 107 | version = "0.7.3" 108 | source = "registry+https://github.com/rust-lang/crates.io-index" 109 | dependencies = [ 110 | "block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 111 | "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 112 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 113 | "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", 114 | ] 115 | 116 | [[package]] 117 | name = "block-padding" 118 | version = "0.1.5" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | dependencies = [ 121 | "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 122 | ] 123 | 124 | [[package]] 125 | name = "bstr" 126 | version = "0.2.8" 127 | source = "registry+https://github.com/rust-lang/crates.io-index" 128 | dependencies = [ 129 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 130 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 131 | "regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 132 | "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", 133 | ] 134 | 135 | [[package]] 136 | name = "byte-tools" 137 | version = "0.3.1" 138 | source = "registry+https://github.com/rust-lang/crates.io-index" 139 | 140 | [[package]] 141 | name = "byteorder" 142 | version = "1.3.2" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | 145 | [[package]] 146 | name = "bytes" 147 | version = "0.4.12" 148 | source = "registry+https://github.com/rust-lang/crates.io-index" 149 | dependencies = [ 150 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 151 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 152 | ] 153 | 154 | [[package]] 155 | name = "cargo_toml" 156 | version = "0.8.0" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | dependencies = [ 159 | "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", 160 | "serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", 161 | "toml 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 162 | ] 163 | 164 | [[package]] 165 | name = "cc" 166 | version = "1.0.45" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | 169 | [[package]] 170 | name = "cfg-if" 171 | version = "0.1.9" 172 | source = "registry+https://github.com/rust-lang/crates.io-index" 173 | 174 | [[package]] 175 | name = "chrono" 176 | version = "0.4.9" 177 | source = "registry+https://github.com/rust-lang/crates.io-index" 178 | dependencies = [ 179 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 180 | "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", 181 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 182 | "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", 183 | ] 184 | 185 | [[package]] 186 | name = "cloudabi" 187 | version = "0.0.3" 188 | source = "registry+https://github.com/rust-lang/crates.io-index" 189 | dependencies = [ 190 | "bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 191 | ] 192 | 193 | [[package]] 194 | name = "comrak" 195 | version = "0.6.2" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | dependencies = [ 198 | "entities 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 199 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 200 | "pest 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 201 | "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 202 | "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 203 | "twoway 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 204 | "typed-arena 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 205 | "unicode_categories 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 206 | ] 207 | 208 | [[package]] 209 | name = "crc32fast" 210 | version = "1.2.0" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | dependencies = [ 213 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 214 | ] 215 | 216 | [[package]] 217 | name = "crossbeam-channel" 218 | version = "0.3.9" 219 | source = "registry+https://github.com/rust-lang/crates.io-index" 220 | dependencies = [ 221 | "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 222 | ] 223 | 224 | [[package]] 225 | name = "crossbeam-deque" 226 | version = "0.7.1" 227 | source = "registry+https://github.com/rust-lang/crates.io-index" 228 | dependencies = [ 229 | "crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 230 | "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 231 | ] 232 | 233 | [[package]] 234 | name = "crossbeam-epoch" 235 | version = "0.7.2" 236 | source = "registry+https://github.com/rust-lang/crates.io-index" 237 | dependencies = [ 238 | "arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 239 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 240 | "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 241 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 242 | "memoffset 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 243 | "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 244 | ] 245 | 246 | [[package]] 247 | name = "crossbeam-utils" 248 | version = "0.6.6" 249 | source = "registry+https://github.com/rust-lang/crates.io-index" 250 | dependencies = [ 251 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 252 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 253 | ] 254 | 255 | [[package]] 256 | name = "cssparser" 257 | version = "0.25.9" 258 | source = "registry+https://github.com/rust-lang/crates.io-index" 259 | dependencies = [ 260 | "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 261 | "cssparser-macros 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 262 | "dtoa-short 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 263 | "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 264 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 265 | "phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 266 | "proc-macro2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 267 | "procedural-masquerade 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 268 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 269 | "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 270 | "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 271 | ] 272 | 273 | [[package]] 274 | name = "cssparser-macros" 275 | version = "0.3.6" 276 | source = "registry+https://github.com/rust-lang/crates.io-index" 277 | dependencies = [ 278 | "phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 279 | "proc-macro2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 280 | "procedural-masquerade 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 281 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 282 | "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 283 | ] 284 | 285 | [[package]] 286 | name = "csv" 287 | version = "1.1.1" 288 | source = "registry+https://github.com/rust-lang/crates.io-index" 289 | dependencies = [ 290 | "bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 291 | "csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 292 | "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 293 | "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 294 | "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", 295 | ] 296 | 297 | [[package]] 298 | name = "csv-core" 299 | version = "0.1.6" 300 | source = "registry+https://github.com/rust-lang/crates.io-index" 301 | dependencies = [ 302 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 303 | ] 304 | 305 | [[package]] 306 | name = "curl" 307 | version = "0.4.25" 308 | source = "registry+https://github.com/rust-lang/crates.io-index" 309 | dependencies = [ 310 | "curl-sys 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)", 311 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 312 | "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 313 | "openssl-sys 0.9.49 (registry+https://github.com/rust-lang/crates.io-index)", 314 | "schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 315 | "socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 316 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 317 | ] 318 | 319 | [[package]] 320 | name = "curl-sys" 321 | version = "0.4.23" 322 | source = "registry+https://github.com/rust-lang/crates.io-index" 323 | dependencies = [ 324 | "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)", 325 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 326 | "libnghttp2-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 327 | "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 328 | "openssl-sys 0.9.49 (registry+https://github.com/rust-lang/crates.io-index)", 329 | "pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 330 | "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 331 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 332 | ] 333 | 334 | [[package]] 335 | name = "derive_builder" 336 | version = "0.5.1" 337 | source = "registry+https://github.com/rust-lang/crates.io-index" 338 | dependencies = [ 339 | "derive_builder_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 340 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 341 | "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", 342 | ] 343 | 344 | [[package]] 345 | name = "derive_builder_core" 346 | version = "0.2.0" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | dependencies = [ 349 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 350 | "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", 351 | ] 352 | 353 | [[package]] 354 | name = "digest" 355 | version = "0.8.1" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | dependencies = [ 358 | "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", 359 | ] 360 | 361 | [[package]] 362 | name = "dtoa" 363 | version = "0.4.4" 364 | source = "registry+https://github.com/rust-lang/crates.io-index" 365 | 366 | [[package]] 367 | name = "dtoa-short" 368 | version = "0.3.2" 369 | source = "registry+https://github.com/rust-lang/crates.io-index" 370 | dependencies = [ 371 | "dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 372 | ] 373 | 374 | [[package]] 375 | name = "ego-tree" 376 | version = "0.6.2" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | 379 | [[package]] 380 | name = "encoding_rs" 381 | version = "0.8.20" 382 | source = "registry+https://github.com/rust-lang/crates.io-index" 383 | dependencies = [ 384 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 385 | ] 386 | 387 | [[package]] 388 | name = "entities" 389 | version = "1.0.1" 390 | source = "registry+https://github.com/rust-lang/crates.io-index" 391 | 392 | [[package]] 393 | name = "failure" 394 | version = "0.1.5" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | dependencies = [ 397 | "backtrace 0.3.38 (registry+https://github.com/rust-lang/crates.io-index)", 398 | "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 399 | ] 400 | 401 | [[package]] 402 | name = "failure_derive" 403 | version = "0.1.5" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | dependencies = [ 406 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 407 | "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 408 | "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", 409 | "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", 410 | ] 411 | 412 | [[package]] 413 | name = "fake-simd" 414 | version = "0.1.2" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | 417 | [[package]] 418 | name = "filetime" 419 | version = "0.2.7" 420 | source = "registry+https://github.com/rust-lang/crates.io-index" 421 | dependencies = [ 422 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 423 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 424 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 425 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 426 | ] 427 | 428 | [[package]] 429 | name = "flate2" 430 | version = "1.0.11" 431 | source = "registry+https://github.com/rust-lang/crates.io-index" 432 | dependencies = [ 433 | "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 434 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 435 | "miniz-sys 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 436 | "miniz_oxide 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 437 | ] 438 | 439 | [[package]] 440 | name = "fnv" 441 | version = "1.0.6" 442 | source = "registry+https://github.com/rust-lang/crates.io-index" 443 | 444 | [[package]] 445 | name = "fuchsia-cprng" 446 | version = "0.1.1" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | 449 | [[package]] 450 | name = "fuchsia-zircon" 451 | version = "0.3.3" 452 | source = "registry+https://github.com/rust-lang/crates.io-index" 453 | dependencies = [ 454 | "bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 455 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 456 | ] 457 | 458 | [[package]] 459 | name = "fuchsia-zircon-sys" 460 | version = "0.3.3" 461 | source = "registry+https://github.com/rust-lang/crates.io-index" 462 | 463 | [[package]] 464 | name = "futf" 465 | version = "0.1.4" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | dependencies = [ 468 | "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 469 | "new_debug_unreachable 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 470 | ] 471 | 472 | [[package]] 473 | name = "futures-channel-preview" 474 | version = "0.3.0-alpha.18" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | dependencies = [ 477 | "futures-core-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 478 | "futures-sink-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 479 | ] 480 | 481 | [[package]] 482 | name = "futures-core-preview" 483 | version = "0.3.0-alpha.18" 484 | source = "registry+https://github.com/rust-lang/crates.io-index" 485 | 486 | [[package]] 487 | name = "futures-executor-preview" 488 | version = "0.3.0-alpha.18" 489 | source = "registry+https://github.com/rust-lang/crates.io-index" 490 | dependencies = [ 491 | "futures-core-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 492 | "futures-util-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 493 | "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 494 | ] 495 | 496 | [[package]] 497 | name = "futures-io-preview" 498 | version = "0.3.0-alpha.18" 499 | source = "registry+https://github.com/rust-lang/crates.io-index" 500 | 501 | [[package]] 502 | name = "futures-preview" 503 | version = "0.3.0-alpha.18" 504 | source = "registry+https://github.com/rust-lang/crates.io-index" 505 | dependencies = [ 506 | "futures-channel-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 507 | "futures-core-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 508 | "futures-executor-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 509 | "futures-io-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 510 | "futures-sink-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 511 | "futures-util-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 512 | ] 513 | 514 | [[package]] 515 | name = "futures-sink-preview" 516 | version = "0.3.0-alpha.18" 517 | source = "registry+https://github.com/rust-lang/crates.io-index" 518 | dependencies = [ 519 | "futures-core-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 520 | ] 521 | 522 | [[package]] 523 | name = "futures-timer" 524 | version = "0.4.0" 525 | source = "registry+https://github.com/rust-lang/crates.io-index" 526 | dependencies = [ 527 | "futures-core-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 528 | "futures-util-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 529 | "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", 530 | ] 531 | 532 | [[package]] 533 | name = "futures-util-preview" 534 | version = "0.3.0-alpha.18" 535 | source = "registry+https://github.com/rust-lang/crates.io-index" 536 | dependencies = [ 537 | "futures-channel-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 538 | "futures-core-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 539 | "futures-io-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 540 | "futures-sink-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 541 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 542 | "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", 543 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 544 | ] 545 | 546 | [[package]] 547 | name = "fxhash" 548 | version = "0.2.1" 549 | source = "registry+https://github.com/rust-lang/crates.io-index" 550 | dependencies = [ 551 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 552 | ] 553 | 554 | [[package]] 555 | name = "generic-array" 556 | version = "0.12.3" 557 | source = "registry+https://github.com/rust-lang/crates.io-index" 558 | dependencies = [ 559 | "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", 560 | ] 561 | 562 | [[package]] 563 | name = "html5ever" 564 | version = "0.24.1" 565 | source = "registry+https://github.com/rust-lang/crates.io-index" 566 | dependencies = [ 567 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 568 | "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 569 | "markup5ever 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 570 | "proc-macro2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 571 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 572 | "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 573 | ] 574 | 575 | [[package]] 576 | name = "http" 577 | version = "0.1.18" 578 | source = "registry+https://github.com/rust-lang/crates.io-index" 579 | dependencies = [ 580 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 581 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 582 | "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 583 | ] 584 | 585 | [[package]] 586 | name = "idna" 587 | version = "0.2.0" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | dependencies = [ 590 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 591 | "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 592 | "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 593 | ] 594 | 595 | [[package]] 596 | name = "iovec" 597 | version = "0.1.2" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | dependencies = [ 600 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 601 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 602 | ] 603 | 604 | [[package]] 605 | name = "isahc" 606 | version = "0.7.5" 607 | source = "registry+https://github.com/rust-lang/crates.io-index" 608 | dependencies = [ 609 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 610 | "chrono 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", 611 | "crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 612 | "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 613 | "curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)", 614 | "curl-sys 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)", 615 | "futures-io-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 616 | "futures-util-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 617 | "http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", 618 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 619 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 620 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 621 | "sluice 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 622 | ] 623 | 624 | [[package]] 625 | name = "itoa" 626 | version = "0.4.4" 627 | source = "registry+https://github.com/rust-lang/crates.io-index" 628 | 629 | [[package]] 630 | name = "kernel32-sys" 631 | version = "0.2.2" 632 | source = "registry+https://github.com/rust-lang/crates.io-index" 633 | dependencies = [ 634 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 635 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 636 | ] 637 | 638 | [[package]] 639 | name = "kv-log-macro" 640 | version = "1.0.4" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | dependencies = [ 643 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 644 | ] 645 | 646 | [[package]] 647 | name = "lazy_static" 648 | version = "1.4.0" 649 | source = "registry+https://github.com/rust-lang/crates.io-index" 650 | 651 | [[package]] 652 | name = "libc" 653 | version = "0.2.62" 654 | source = "registry+https://github.com/rust-lang/crates.io-index" 655 | 656 | [[package]] 657 | name = "libnghttp2-sys" 658 | version = "0.1.2" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | dependencies = [ 661 | "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)", 662 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 663 | ] 664 | 665 | [[package]] 666 | name = "libz-sys" 667 | version = "1.0.25" 668 | source = "registry+https://github.com/rust-lang/crates.io-index" 669 | dependencies = [ 670 | "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)", 671 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 672 | "pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 673 | "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 674 | ] 675 | 676 | [[package]] 677 | name = "log" 678 | version = "0.4.8" 679 | source = "registry+https://github.com/rust-lang/crates.io-index" 680 | dependencies = [ 681 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 682 | ] 683 | 684 | [[package]] 685 | name = "mac" 686 | version = "0.1.1" 687 | source = "registry+https://github.com/rust-lang/crates.io-index" 688 | 689 | [[package]] 690 | name = "maplit" 691 | version = "1.0.2" 692 | source = "registry+https://github.com/rust-lang/crates.io-index" 693 | 694 | [[package]] 695 | name = "markup5ever" 696 | version = "0.9.0" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | dependencies = [ 699 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 700 | "phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 701 | "phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 702 | "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", 703 | "serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", 704 | "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", 705 | "string_cache 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", 706 | "string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 707 | "tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 708 | ] 709 | 710 | [[package]] 711 | name = "matches" 712 | version = "0.1.8" 713 | source = "registry+https://github.com/rust-lang/crates.io-index" 714 | 715 | [[package]] 716 | name = "meili-crates" 717 | version = "0.1.0" 718 | dependencies = [ 719 | "async-std 0.99.6 (registry+https://github.com/rust-lang/crates.io-index)", 720 | "atom_syndication 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 721 | "cargo_toml 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 722 | "comrak 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 723 | "csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 724 | "flate2 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", 725 | "futures-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 726 | "futures-timer 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 727 | "isahc 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", 728 | "scraper 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 729 | "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", 730 | "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", 731 | "tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", 732 | "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 733 | "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", 734 | ] 735 | 736 | [[package]] 737 | name = "memchr" 738 | version = "2.2.1" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | dependencies = [ 741 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 742 | ] 743 | 744 | [[package]] 745 | name = "memoffset" 746 | version = "0.5.1" 747 | source = "registry+https://github.com/rust-lang/crates.io-index" 748 | dependencies = [ 749 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 750 | ] 751 | 752 | [[package]] 753 | name = "miniz-sys" 754 | version = "0.1.12" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | dependencies = [ 757 | "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)", 758 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 759 | ] 760 | 761 | [[package]] 762 | name = "miniz_oxide" 763 | version = "0.3.2" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | dependencies = [ 766 | "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 767 | ] 768 | 769 | [[package]] 770 | name = "mio" 771 | version = "0.6.19" 772 | source = "registry+https://github.com/rust-lang/crates.io-index" 773 | dependencies = [ 774 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 775 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 776 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 777 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 778 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 779 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 780 | "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 781 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 782 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 783 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 784 | ] 785 | 786 | [[package]] 787 | name = "mio-uds" 788 | version = "0.6.7" 789 | source = "registry+https://github.com/rust-lang/crates.io-index" 790 | dependencies = [ 791 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 792 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 793 | "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", 794 | ] 795 | 796 | [[package]] 797 | name = "miow" 798 | version = "0.2.1" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | dependencies = [ 801 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 802 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 803 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 804 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 805 | ] 806 | 807 | [[package]] 808 | name = "net2" 809 | version = "0.2.33" 810 | source = "registry+https://github.com/rust-lang/crates.io-index" 811 | dependencies = [ 812 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 813 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 814 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 815 | ] 816 | 817 | [[package]] 818 | name = "new_debug_unreachable" 819 | version = "1.0.3" 820 | source = "registry+https://github.com/rust-lang/crates.io-index" 821 | 822 | [[package]] 823 | name = "nodrop" 824 | version = "0.1.13" 825 | source = "registry+https://github.com/rust-lang/crates.io-index" 826 | 827 | [[package]] 828 | name = "num-integer" 829 | version = "0.1.41" 830 | source = "registry+https://github.com/rust-lang/crates.io-index" 831 | dependencies = [ 832 | "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 833 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 834 | ] 835 | 836 | [[package]] 837 | name = "num-traits" 838 | version = "0.2.8" 839 | source = "registry+https://github.com/rust-lang/crates.io-index" 840 | dependencies = [ 841 | "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 842 | ] 843 | 844 | [[package]] 845 | name = "num_cpus" 846 | version = "1.10.1" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | dependencies = [ 849 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 850 | ] 851 | 852 | [[package]] 853 | name = "opaque-debug" 854 | version = "0.2.3" 855 | source = "registry+https://github.com/rust-lang/crates.io-index" 856 | 857 | [[package]] 858 | name = "openssl-probe" 859 | version = "0.1.2" 860 | source = "registry+https://github.com/rust-lang/crates.io-index" 861 | 862 | [[package]] 863 | name = "openssl-sys" 864 | version = "0.9.49" 865 | source = "registry+https://github.com/rust-lang/crates.io-index" 866 | dependencies = [ 867 | "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 868 | "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)", 869 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 870 | "pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 871 | "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 872 | ] 873 | 874 | [[package]] 875 | name = "percent-encoding" 876 | version = "2.1.0" 877 | source = "registry+https://github.com/rust-lang/crates.io-index" 878 | 879 | [[package]] 880 | name = "pest" 881 | version = "2.1.2" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | dependencies = [ 884 | "ucd-trie 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 885 | ] 886 | 887 | [[package]] 888 | name = "pest_derive" 889 | version = "2.1.0" 890 | source = "registry+https://github.com/rust-lang/crates.io-index" 891 | dependencies = [ 892 | "pest 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 893 | "pest_generator 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 894 | ] 895 | 896 | [[package]] 897 | name = "pest_generator" 898 | version = "2.1.1" 899 | source = "registry+https://github.com/rust-lang/crates.io-index" 900 | dependencies = [ 901 | "pest 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 902 | "pest_meta 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 903 | "proc-macro2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 904 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 905 | "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 906 | ] 907 | 908 | [[package]] 909 | name = "pest_meta" 910 | version = "2.1.2" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | dependencies = [ 913 | "maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 914 | "pest 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 915 | "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 916 | ] 917 | 918 | [[package]] 919 | name = "phf" 920 | version = "0.7.24" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | dependencies = [ 923 | "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 924 | ] 925 | 926 | [[package]] 927 | name = "phf_codegen" 928 | version = "0.7.24" 929 | source = "registry+https://github.com/rust-lang/crates.io-index" 930 | dependencies = [ 931 | "phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 932 | "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 933 | ] 934 | 935 | [[package]] 936 | name = "phf_generator" 937 | version = "0.7.24" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | dependencies = [ 940 | "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 941 | "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 942 | ] 943 | 944 | [[package]] 945 | name = "phf_shared" 946 | version = "0.7.24" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | dependencies = [ 949 | "siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 950 | ] 951 | 952 | [[package]] 953 | name = "pin-utils" 954 | version = "0.1.0-alpha.4" 955 | source = "registry+https://github.com/rust-lang/crates.io-index" 956 | 957 | [[package]] 958 | name = "pkg-config" 959 | version = "0.3.16" 960 | source = "registry+https://github.com/rust-lang/crates.io-index" 961 | 962 | [[package]] 963 | name = "precomputed-hash" 964 | version = "0.1.1" 965 | source = "registry+https://github.com/rust-lang/crates.io-index" 966 | 967 | [[package]] 968 | name = "proc-macro2" 969 | version = "0.4.30" 970 | source = "registry+https://github.com/rust-lang/crates.io-index" 971 | dependencies = [ 972 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 973 | ] 974 | 975 | [[package]] 976 | name = "proc-macro2" 977 | version = "1.0.4" 978 | source = "registry+https://github.com/rust-lang/crates.io-index" 979 | dependencies = [ 980 | "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 981 | ] 982 | 983 | [[package]] 984 | name = "procedural-masquerade" 985 | version = "0.1.6" 986 | source = "registry+https://github.com/rust-lang/crates.io-index" 987 | 988 | [[package]] 989 | name = "quick-xml" 990 | version = "0.12.4" 991 | source = "registry+https://github.com/rust-lang/crates.io-index" 992 | dependencies = [ 993 | "encoding_rs 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)", 994 | "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 995 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 996 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 997 | ] 998 | 999 | [[package]] 1000 | name = "quote" 1001 | version = "0.3.15" 1002 | source = "registry+https://github.com/rust-lang/crates.io-index" 1003 | 1004 | [[package]] 1005 | name = "quote" 1006 | version = "0.6.13" 1007 | source = "registry+https://github.com/rust-lang/crates.io-index" 1008 | dependencies = [ 1009 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1010 | ] 1011 | 1012 | [[package]] 1013 | name = "quote" 1014 | version = "1.0.2" 1015 | source = "registry+https://github.com/rust-lang/crates.io-index" 1016 | dependencies = [ 1017 | "proc-macro2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1018 | ] 1019 | 1020 | [[package]] 1021 | name = "rand" 1022 | version = "0.6.5" 1023 | source = "registry+https://github.com/rust-lang/crates.io-index" 1024 | dependencies = [ 1025 | "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1026 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 1027 | "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1028 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1029 | "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1030 | "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1031 | "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1032 | "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1033 | "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1034 | "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1035 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1036 | ] 1037 | 1038 | [[package]] 1039 | name = "rand_chacha" 1040 | version = "0.1.1" 1041 | source = "registry+https://github.com/rust-lang/crates.io-index" 1042 | dependencies = [ 1043 | "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1044 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1045 | ] 1046 | 1047 | [[package]] 1048 | name = "rand_core" 1049 | version = "0.3.1" 1050 | source = "registry+https://github.com/rust-lang/crates.io-index" 1051 | dependencies = [ 1052 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1053 | ] 1054 | 1055 | [[package]] 1056 | name = "rand_core" 1057 | version = "0.4.2" 1058 | source = "registry+https://github.com/rust-lang/crates.io-index" 1059 | 1060 | [[package]] 1061 | name = "rand_hc" 1062 | version = "0.1.0" 1063 | source = "registry+https://github.com/rust-lang/crates.io-index" 1064 | dependencies = [ 1065 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1066 | ] 1067 | 1068 | [[package]] 1069 | name = "rand_isaac" 1070 | version = "0.1.1" 1071 | source = "registry+https://github.com/rust-lang/crates.io-index" 1072 | dependencies = [ 1073 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1074 | ] 1075 | 1076 | [[package]] 1077 | name = "rand_jitter" 1078 | version = "0.1.4" 1079 | source = "registry+https://github.com/rust-lang/crates.io-index" 1080 | dependencies = [ 1081 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 1082 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1083 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1084 | ] 1085 | 1086 | [[package]] 1087 | name = "rand_os" 1088 | version = "0.1.3" 1089 | source = "registry+https://github.com/rust-lang/crates.io-index" 1090 | dependencies = [ 1091 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 1092 | "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1093 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 1094 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1095 | "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1096 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1097 | ] 1098 | 1099 | [[package]] 1100 | name = "rand_pcg" 1101 | version = "0.1.2" 1102 | source = "registry+https://github.com/rust-lang/crates.io-index" 1103 | dependencies = [ 1104 | "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1105 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1106 | ] 1107 | 1108 | [[package]] 1109 | name = "rand_xorshift" 1110 | version = "0.1.1" 1111 | source = "registry+https://github.com/rust-lang/crates.io-index" 1112 | dependencies = [ 1113 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1114 | ] 1115 | 1116 | [[package]] 1117 | name = "rdrand" 1118 | version = "0.4.0" 1119 | source = "registry+https://github.com/rust-lang/crates.io-index" 1120 | dependencies = [ 1121 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1122 | ] 1123 | 1124 | [[package]] 1125 | name = "redox_syscall" 1126 | version = "0.1.56" 1127 | source = "registry+https://github.com/rust-lang/crates.io-index" 1128 | 1129 | [[package]] 1130 | name = "regex" 1131 | version = "1.3.1" 1132 | source = "registry+https://github.com/rust-lang/crates.io-index" 1133 | dependencies = [ 1134 | "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", 1135 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1136 | "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 1137 | "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1138 | ] 1139 | 1140 | [[package]] 1141 | name = "regex-automata" 1142 | version = "0.1.8" 1143 | source = "registry+https://github.com/rust-lang/crates.io-index" 1144 | dependencies = [ 1145 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1146 | ] 1147 | 1148 | [[package]] 1149 | name = "regex-syntax" 1150 | version = "0.6.12" 1151 | source = "registry+https://github.com/rust-lang/crates.io-index" 1152 | 1153 | [[package]] 1154 | name = "rustc-demangle" 1155 | version = "0.1.16" 1156 | source = "registry+https://github.com/rust-lang/crates.io-index" 1157 | 1158 | [[package]] 1159 | name = "rustc_version" 1160 | version = "0.2.3" 1161 | source = "registry+https://github.com/rust-lang/crates.io-index" 1162 | dependencies = [ 1163 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 1164 | ] 1165 | 1166 | [[package]] 1167 | name = "ryu" 1168 | version = "1.0.0" 1169 | source = "registry+https://github.com/rust-lang/crates.io-index" 1170 | 1171 | [[package]] 1172 | name = "same-file" 1173 | version = "1.0.5" 1174 | source = "registry+https://github.com/rust-lang/crates.io-index" 1175 | dependencies = [ 1176 | "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1177 | ] 1178 | 1179 | [[package]] 1180 | name = "schannel" 1181 | version = "0.1.16" 1182 | source = "registry+https://github.com/rust-lang/crates.io-index" 1183 | dependencies = [ 1184 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1185 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1186 | ] 1187 | 1188 | [[package]] 1189 | name = "scopeguard" 1190 | version = "1.0.0" 1191 | source = "registry+https://github.com/rust-lang/crates.io-index" 1192 | 1193 | [[package]] 1194 | name = "scraper" 1195 | version = "0.11.0" 1196 | source = "registry+https://github.com/rust-lang/crates.io-index" 1197 | dependencies = [ 1198 | "cssparser 0.25.9 (registry+https://github.com/rust-lang/crates.io-index)", 1199 | "ego-tree 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 1200 | "html5ever 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)", 1201 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1202 | "selectors 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)", 1203 | "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 1204 | "tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1205 | ] 1206 | 1207 | [[package]] 1208 | name = "selectors" 1209 | version = "0.21.0" 1210 | source = "registry+https://github.com/rust-lang/crates.io-index" 1211 | dependencies = [ 1212 | "bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1213 | "cssparser 0.25.9 (registry+https://github.com/rust-lang/crates.io-index)", 1214 | "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1215 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1216 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1217 | "phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 1218 | "phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 1219 | "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1220 | "servo_arc 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1221 | "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 1222 | "thin-slice 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1223 | ] 1224 | 1225 | [[package]] 1226 | name = "semver" 1227 | version = "0.9.0" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | dependencies = [ 1230 | "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1231 | ] 1232 | 1233 | [[package]] 1234 | name = "semver-parser" 1235 | version = "0.7.0" 1236 | source = "registry+https://github.com/rust-lang/crates.io-index" 1237 | 1238 | [[package]] 1239 | name = "serde" 1240 | version = "1.0.101" 1241 | source = "registry+https://github.com/rust-lang/crates.io-index" 1242 | dependencies = [ 1243 | "serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", 1244 | ] 1245 | 1246 | [[package]] 1247 | name = "serde_derive" 1248 | version = "1.0.101" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | dependencies = [ 1251 | "proc-macro2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1252 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1253 | "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 1254 | ] 1255 | 1256 | [[package]] 1257 | name = "serde_json" 1258 | version = "1.0.40" 1259 | source = "registry+https://github.com/rust-lang/crates.io-index" 1260 | dependencies = [ 1261 | "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 1262 | "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1263 | "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", 1264 | ] 1265 | 1266 | [[package]] 1267 | name = "servo_arc" 1268 | version = "0.1.1" 1269 | source = "registry+https://github.com/rust-lang/crates.io-index" 1270 | dependencies = [ 1271 | "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 1272 | "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1273 | ] 1274 | 1275 | [[package]] 1276 | name = "sha-1" 1277 | version = "0.8.1" 1278 | source = "registry+https://github.com/rust-lang/crates.io-index" 1279 | dependencies = [ 1280 | "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", 1281 | "digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 1282 | "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1283 | "opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1284 | ] 1285 | 1286 | [[package]] 1287 | name = "siphasher" 1288 | version = "0.2.3" 1289 | source = "registry+https://github.com/rust-lang/crates.io-index" 1290 | 1291 | [[package]] 1292 | name = "slab" 1293 | version = "0.4.2" 1294 | source = "registry+https://github.com/rust-lang/crates.io-index" 1295 | 1296 | [[package]] 1297 | name = "sluice" 1298 | version = "0.4.2" 1299 | source = "registry+https://github.com/rust-lang/crates.io-index" 1300 | dependencies = [ 1301 | "futures-channel-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 1302 | "futures-core-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 1303 | "futures-io-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", 1304 | ] 1305 | 1306 | [[package]] 1307 | name = "smallvec" 1308 | version = "0.6.10" 1309 | source = "registry+https://github.com/rust-lang/crates.io-index" 1310 | 1311 | [[package]] 1312 | name = "socket2" 1313 | version = "0.3.11" 1314 | source = "registry+https://github.com/rust-lang/crates.io-index" 1315 | dependencies = [ 1316 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1317 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 1318 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 1319 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1320 | ] 1321 | 1322 | [[package]] 1323 | name = "stable_deref_trait" 1324 | version = "1.1.1" 1325 | source = "registry+https://github.com/rust-lang/crates.io-index" 1326 | 1327 | [[package]] 1328 | name = "string_cache" 1329 | version = "0.7.5" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | dependencies = [ 1332 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1333 | "new_debug_unreachable 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 1334 | "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 1335 | "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1336 | "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", 1337 | "string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 1338 | "string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1339 | ] 1340 | 1341 | [[package]] 1342 | name = "string_cache_codegen" 1343 | version = "0.4.4" 1344 | source = "registry+https://github.com/rust-lang/crates.io-index" 1345 | dependencies = [ 1346 | "phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 1347 | "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 1348 | "proc-macro2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1349 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1350 | "string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1351 | ] 1352 | 1353 | [[package]] 1354 | name = "string_cache_shared" 1355 | version = "0.3.0" 1356 | source = "registry+https://github.com/rust-lang/crates.io-index" 1357 | 1358 | [[package]] 1359 | name = "syn" 1360 | version = "0.11.11" 1361 | source = "registry+https://github.com/rust-lang/crates.io-index" 1362 | dependencies = [ 1363 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 1364 | "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", 1365 | "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1366 | ] 1367 | 1368 | [[package]] 1369 | name = "syn" 1370 | version = "0.15.44" 1371 | source = "registry+https://github.com/rust-lang/crates.io-index" 1372 | dependencies = [ 1373 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1374 | "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 1375 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "syn" 1380 | version = "1.0.5" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | dependencies = [ 1383 | "proc-macro2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1384 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1385 | "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1386 | ] 1387 | 1388 | [[package]] 1389 | name = "synom" 1390 | version = "0.11.3" 1391 | source = "registry+https://github.com/rust-lang/crates.io-index" 1392 | dependencies = [ 1393 | "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1394 | ] 1395 | 1396 | [[package]] 1397 | name = "synstructure" 1398 | version = "0.10.2" 1399 | source = "registry+https://github.com/rust-lang/crates.io-index" 1400 | dependencies = [ 1401 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1402 | "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 1403 | "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", 1404 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1405 | ] 1406 | 1407 | [[package]] 1408 | name = "tar" 1409 | version = "0.4.26" 1410 | source = "registry+https://github.com/rust-lang/crates.io-index" 1411 | dependencies = [ 1412 | "filetime 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1413 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 1414 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 1415 | "xattr 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1416 | ] 1417 | 1418 | [[package]] 1419 | name = "tendril" 1420 | version = "0.4.1" 1421 | source = "registry+https://github.com/rust-lang/crates.io-index" 1422 | dependencies = [ 1423 | "futf 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1424 | "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1425 | "utf-8 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", 1426 | ] 1427 | 1428 | [[package]] 1429 | name = "thin-slice" 1430 | version = "0.1.1" 1431 | source = "registry+https://github.com/rust-lang/crates.io-index" 1432 | 1433 | [[package]] 1434 | name = "thread_local" 1435 | version = "0.3.6" 1436 | source = "registry+https://github.com/rust-lang/crates.io-index" 1437 | dependencies = [ 1438 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1439 | ] 1440 | 1441 | [[package]] 1442 | name = "time" 1443 | version = "0.1.42" 1444 | source = "registry+https://github.com/rust-lang/crates.io-index" 1445 | dependencies = [ 1446 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 1447 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 1448 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1449 | ] 1450 | 1451 | [[package]] 1452 | name = "toml" 1453 | version = "0.5.3" 1454 | source = "registry+https://github.com/rust-lang/crates.io-index" 1455 | dependencies = [ 1456 | "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", 1457 | ] 1458 | 1459 | [[package]] 1460 | name = "twoway" 1461 | version = "0.2.1" 1462 | source = "registry+https://github.com/rust-lang/crates.io-index" 1463 | dependencies = [ 1464 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1465 | "unchecked-index 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1466 | ] 1467 | 1468 | [[package]] 1469 | name = "typed-arena" 1470 | version = "1.7.0" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | 1473 | [[package]] 1474 | name = "typenum" 1475 | version = "1.11.2" 1476 | source = "registry+https://github.com/rust-lang/crates.io-index" 1477 | 1478 | [[package]] 1479 | name = "ucd-trie" 1480 | version = "0.1.2" 1481 | source = "registry+https://github.com/rust-lang/crates.io-index" 1482 | 1483 | [[package]] 1484 | name = "unchecked-index" 1485 | version = "0.2.2" 1486 | source = "registry+https://github.com/rust-lang/crates.io-index" 1487 | 1488 | [[package]] 1489 | name = "unicode-bidi" 1490 | version = "0.3.4" 1491 | source = "registry+https://github.com/rust-lang/crates.io-index" 1492 | dependencies = [ 1493 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1494 | ] 1495 | 1496 | [[package]] 1497 | name = "unicode-normalization" 1498 | version = "0.1.8" 1499 | source = "registry+https://github.com/rust-lang/crates.io-index" 1500 | dependencies = [ 1501 | "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 1502 | ] 1503 | 1504 | [[package]] 1505 | name = "unicode-xid" 1506 | version = "0.0.4" 1507 | source = "registry+https://github.com/rust-lang/crates.io-index" 1508 | 1509 | [[package]] 1510 | name = "unicode-xid" 1511 | version = "0.1.0" 1512 | source = "registry+https://github.com/rust-lang/crates.io-index" 1513 | 1514 | [[package]] 1515 | name = "unicode-xid" 1516 | version = "0.2.0" 1517 | source = "registry+https://github.com/rust-lang/crates.io-index" 1518 | 1519 | [[package]] 1520 | name = "unicode_categories" 1521 | version = "0.1.1" 1522 | source = "registry+https://github.com/rust-lang/crates.io-index" 1523 | 1524 | [[package]] 1525 | name = "url" 1526 | version = "2.1.0" 1527 | source = "registry+https://github.com/rust-lang/crates.io-index" 1528 | dependencies = [ 1529 | "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1530 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1531 | "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1532 | "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", 1533 | ] 1534 | 1535 | [[package]] 1536 | name = "utf-8" 1537 | version = "0.7.5" 1538 | source = "registry+https://github.com/rust-lang/crates.io-index" 1539 | 1540 | [[package]] 1541 | name = "vcpkg" 1542 | version = "0.2.7" 1543 | source = "registry+https://github.com/rust-lang/crates.io-index" 1544 | 1545 | [[package]] 1546 | name = "walkdir" 1547 | version = "2.2.9" 1548 | source = "registry+https://github.com/rust-lang/crates.io-index" 1549 | dependencies = [ 1550 | "same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 1551 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1552 | "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1553 | ] 1554 | 1555 | [[package]] 1556 | name = "winapi" 1557 | version = "0.2.8" 1558 | source = "registry+https://github.com/rust-lang/crates.io-index" 1559 | 1560 | [[package]] 1561 | name = "winapi" 1562 | version = "0.3.8" 1563 | source = "registry+https://github.com/rust-lang/crates.io-index" 1564 | dependencies = [ 1565 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1566 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1567 | ] 1568 | 1569 | [[package]] 1570 | name = "winapi-build" 1571 | version = "0.1.1" 1572 | source = "registry+https://github.com/rust-lang/crates.io-index" 1573 | 1574 | [[package]] 1575 | name = "winapi-i686-pc-windows-gnu" 1576 | version = "0.4.0" 1577 | source = "registry+https://github.com/rust-lang/crates.io-index" 1578 | 1579 | [[package]] 1580 | name = "winapi-util" 1581 | version = "0.1.2" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | dependencies = [ 1584 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1585 | ] 1586 | 1587 | [[package]] 1588 | name = "winapi-x86_64-pc-windows-gnu" 1589 | version = "0.4.0" 1590 | source = "registry+https://github.com/rust-lang/crates.io-index" 1591 | 1592 | [[package]] 1593 | name = "ws2_32-sys" 1594 | version = "0.2.1" 1595 | source = "registry+https://github.com/rust-lang/crates.io-index" 1596 | dependencies = [ 1597 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1598 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1599 | ] 1600 | 1601 | [[package]] 1602 | name = "xattr" 1603 | version = "0.2.2" 1604 | source = "registry+https://github.com/rust-lang/crates.io-index" 1605 | dependencies = [ 1606 | "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 1607 | ] 1608 | 1609 | [metadata] 1610 | "checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" 1611 | "checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d" 1612 | "checksum arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba" 1613 | "checksum async-macros 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e421d59b24c1feea2496e409b3e0a8de23e5fc130a2ddc0b012e551f3b272bba" 1614 | "checksum async-std 0.99.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d842f66e23e859bef2a9328f5b3f066b0bcb7d7e36261ef46058ec09ba23ad83" 1615 | "checksum async-task 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de6bd58f7b9cc49032559422595c81cbfcf04db2f2133592f70af19e258a1ced" 1616 | "checksum atom_syndication 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a9a7ab83635ff7a3b04856f4ad95324dccc9b947ab1e790fc5c769ee6d6f60c" 1617 | "checksum autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875" 1618 | "checksum backtrace 0.3.38 (registry+https://github.com/rust-lang/crates.io-index)" = "690a62be8920ccf773ee00ef0968649b0e724cda8bd5b12286302b4ae955fdf5" 1619 | "checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b" 1620 | "checksum bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8a606a02debe2813760609f57a64a2ffd27d9fdf5b2f133eaca0b248dd92cdd2" 1621 | "checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" 1622 | "checksum block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" 1623 | "checksum bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8d6c2c5b58ab920a4f5aeaaca34b4488074e8cc7596af94e6f8c6ff247c60245" 1624 | "checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" 1625 | "checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" 1626 | "checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" 1627 | "checksum cargo_toml 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e7877b00aaf997d7ed66a81281d3a8b9f9da5361df05b72785b985349979a0f3" 1628 | "checksum cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)" = "4fc9a35e1f4290eb9e5fc54ba6cf40671ed2a2514c3eeb2b2a908dda2ea5a1be" 1629 | "checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" 1630 | "checksum chrono 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e8493056968583b0193c1bb04d6f7684586f3726992d6c573261941a895dbd68" 1631 | "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 1632 | "checksum comrak 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ea4c29f52463abf5c7a3ae33dd9b404e2031af82f547cfe65bfac17ba785ea2e" 1633 | "checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" 1634 | "checksum crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa" 1635 | "checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" 1636 | "checksum crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9" 1637 | "checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" 1638 | "checksum cssparser 0.25.9 (registry+https://github.com/rust-lang/crates.io-index)" = "fbe18ca4efb9ba3716c6da66cc3d7e673bf59fa576353011f48c4cfddbdd740e" 1639 | "checksum cssparser-macros 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "5bb1c84e87c717666564ec056105052331431803d606bd45529b28547b611eef" 1640 | "checksum csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "37519ccdfd73a75821cac9319d4fce15a81b9fcf75f951df5b9988aa3a0af87d" 1641 | "checksum csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9b5cadb6b25c77aeff80ba701712494213f4a8418fcda2ee11b6560c3ad0bf4c" 1642 | "checksum curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)" = "06aa71e9208a54def20792d877bc663d6aae0732b9852e612c4a933177c31283" 1643 | "checksum curl-sys 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)" = "f71cd2dbddb49c744c1c9e0b96106f50a634e8759ec51bcd5399a578700a3ab3" 1644 | "checksum derive_builder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c998e6ab02a828dd9735c18f154e14100e674ed08cb4e1938f0e4177543f439" 1645 | "checksum derive_builder_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "735e24ee9e5fa8e16b86da5007856e97d592e11867e45d76e0c0d0a164a0b757" 1646 | "checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" 1647 | "checksum dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e" 1648 | "checksum dtoa-short 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "59020b8513b76630c49d918c33db9f4c91638e7d3404a28084083b87e33f76f2" 1649 | "checksum ego-tree 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3a68a4904193147e0a8dec3314640e6db742afd5f6e634f428a6af230d9b3591" 1650 | "checksum encoding_rs 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)" = "87240518927716f79692c2ed85bfe6e98196d18c6401ec75355760233a7e12e9" 1651 | "checksum entities 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b5320ae4c3782150d900b79807611a59a99fc9a1d61d686faafc24b93fc8d7ca" 1652 | "checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" 1653 | "checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" 1654 | "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" 1655 | "checksum filetime 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6bd7380b54ced79dda72ecc35cc4fbbd1da6bba54afaa37e96fd1c2a308cd469" 1656 | "checksum flate2 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "2adaffba6388640136149e18ed080b77a78611c1e1d6de75aedcdf78df5d4682" 1657 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 1658 | "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" 1659 | "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 1660 | "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 1661 | "checksum futf 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b" 1662 | "checksum futures-channel-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)" = "f477fd0292c4a4ae77044454e7f2b413207942ad405f759bb0b4698b7ace5b12" 1663 | "checksum futures-core-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)" = "4a2f26f774b81b3847dcda0c81bd4b6313acfb4f69e5a0390c7cb12c058953e9" 1664 | "checksum futures-executor-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)" = "80705612926df8a1bc05f0057e77460e29318801f988bf7d803a734cf54e7528" 1665 | "checksum futures-io-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)" = "ee7de0c1c9ed23f9457b0437fec7663ce64d9cc3c906597e714e529377b5ddd1" 1666 | "checksum futures-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)" = "efa8f90c4fb2328e381f8adfd4255b4a2b696f77d1c63a3dee6700b564c4e4b5" 1667 | "checksum futures-sink-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)" = "e9b65a2481863d1b78e094a07e9c0eed458cc7dc6e72b22b7138b8a67d924859" 1668 | "checksum futures-timer 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "878f1d2fc31355fa02ed2372e741b0c17e58373341e6a122569b4623a14a7d33" 1669 | "checksum futures-util-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)" = "7df53daff1e98cc024bf2720f3ceb0414d96fbb0a94f3cad3a5c3bf3be1d261c" 1670 | "checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" 1671 | "checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" 1672 | "checksum html5ever 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)" = "025483b0a1e4577bb28578318c886ee5f817dda6eb62473269349044406644cb" 1673 | "checksum http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "372bcb56f939e449117fb0869c2e8fd8753a8223d92a172c6e808cf123a5b6e4" 1674 | "checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" 1675 | "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" 1676 | "checksum isahc 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f3dc142be4e58ea9c04636bf6211ff133ada756f896b78a8fac58ab7819c411c" 1677 | "checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" 1678 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1679 | "checksum kv-log-macro 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c54d9f465d530a752e6ebdc217e081a7a614b48cb200f6f0aee21ba6bc9aabb" 1680 | "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1681 | "checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba" 1682 | "checksum libnghttp2-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02254d44f4435dd79e695f2c2b83cd06a47919adea30216ceaf0c57ca0a72463" 1683 | "checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe" 1684 | "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" 1685 | "checksum mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 1686 | "checksum maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" 1687 | "checksum markup5ever 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "65381d9d47506b8592b97c4efd936afcf673b09b059f2bef39c7211ee78b9d03" 1688 | "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" 1689 | "checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e" 1690 | "checksum memoffset 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ce6075db033bbbb7ee5a0bbd3a3186bbae616f57fb001c485c7ff77955f8177f" 1691 | "checksum miniz-sys 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9e3ae51cea1576ceba0dde3d484d30e6e5b86dee0b2d412fe3a16a15c98202" 1692 | "checksum miniz_oxide 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7108aff85b876d06f22503dcce091e29f76733b2bfdd91eebce81f5e68203a10" 1693 | "checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" 1694 | "checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" 1695 | "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" 1696 | "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" 1697 | "checksum new_debug_unreachable 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f40f005c60db6e03bae699e414c58bf9aa7ea02a2d0b9bfbcf19286cc4c82b30" 1698 | "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" 1699 | "checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09" 1700 | "checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32" 1701 | "checksum num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273" 1702 | "checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" 1703 | "checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" 1704 | "checksum openssl-sys 0.9.49 (registry+https://github.com/rust-lang/crates.io-index)" = "f4fad9e54bd23bd4cbbe48fdc08a1b8091707ac869ef8508edea2fec77dcc884" 1705 | "checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 1706 | "checksum pest 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e4fb201c5c22a55d8b24fef95f78be52738e5e1361129be1b5e862ecdb6894a" 1707 | "checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" 1708 | "checksum pest_generator 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7b9fcf299b5712d06ee128a556c94709aaa04512c4dffb8ead07c5c998447fc0" 1709 | "checksum pest_meta 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "df43fd99896fd72c485fe47542c7b500e4ac1e8700bf995544d1317a60ded547" 1710 | "checksum phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18" 1711 | "checksum phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e" 1712 | "checksum phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" 1713 | "checksum phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" 1714 | "checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" 1715 | "checksum pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "72d5370d90f49f70bd033c3d75e87fc529fbfff9d6f7cccef07d6170079d91ea" 1716 | "checksum precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 1717 | "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" 1718 | "checksum proc-macro2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afdc77cc74ec70ed262262942ebb7dac3d479e9e5cfa2da1841c0806f6cdabcc" 1719 | "checksum procedural-masquerade 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9a1574a51c3fd37b26d2c0032b649d08a7d51d4cca9c41bbc5bf7118fa4509d0" 1720 | "checksum quick-xml 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1d8065cbb01701c11cc195cde85cbf39d1c6a80705b67a157ebb3042e0e5777f" 1721 | "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" 1722 | "checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" 1723 | "checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" 1724 | "checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" 1725 | "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" 1726 | "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" 1727 | "checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" 1728 | "checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" 1729 | "checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" 1730 | "checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" 1731 | "checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" 1732 | "checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" 1733 | "checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" 1734 | "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 1735 | "checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" 1736 | "checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd" 1737 | "checksum regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "92b73c2a1770c255c240eaa4ee600df1704a38dc3feaa6e949e7fcd4f8dc09f9" 1738 | "checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716" 1739 | "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" 1740 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1741 | "checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997" 1742 | "checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" 1743 | "checksum schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "87f550b06b6cba9c8b8be3ee73f391990116bf527450d2556e9b9ce263b9a021" 1744 | "checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" 1745 | "checksum scraper 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "77e013440e2ab1c25065551adda5a9773698bb5be3dbab06ff2deac3d5c1a793" 1746 | "checksum selectors 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1b86b100bede4f651059740afc3b6cb83458d7401cb7c1ad96d8a11e91742c86" 1747 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1748 | "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1749 | "checksum serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)" = "9796c9b7ba2ffe7a9ce53c2287dfc48080f4b2b362fcc245a259b3a7201119dd" 1750 | "checksum serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)" = "4b133a43a1ecd55d4086bd5b4dc6c1751c68b1bfbeba7a5040442022c7e7c02e" 1751 | "checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704" 1752 | "checksum servo_arc 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" 1753 | "checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" 1754 | "checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" 1755 | "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" 1756 | "checksum sluice 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0a7d06dfb3e8743bc19e6de8a302277471d08077d68946b307280496dc5a3531" 1757 | "checksum smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ab606a9c5e214920bb66c458cd7be8ef094f813f20fe77a54cc7dbfff220d4b7" 1758 | "checksum socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85" 1759 | "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" 1760 | "checksum string_cache 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "89c058a82f9fd69b1becf8c274f412281038877c553182f1d02eb027045a2d67" 1761 | "checksum string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0f45ed1b65bf9a4bf2f7b7dc59212d1926e9eaf00fa998988e420fd124467c6" 1762 | "checksum string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc" 1763 | "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" 1764 | "checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" 1765 | "checksum syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf" 1766 | "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" 1767 | "checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" 1768 | "checksum tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)" = "b3196bfbffbba3e57481b6ea32249fbaf590396a52505a2615adbb79d9d826d3" 1769 | "checksum tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "707feda9f2582d5d680d733e38755547a3e8fb471e7ba11452ecfd9ce93a5d3b" 1770 | "checksum thin-slice 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" 1771 | "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" 1772 | "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" 1773 | "checksum toml 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c7aabe75941d914b72bf3e5d3932ed92ce0664d49d8432305a8b547c37227724" 1774 | "checksum twoway 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6b40075910de3a912adbd80b5d8bad6ad10a23eeb1f5bf9d4006839e899ba5bc" 1775 | "checksum typed-arena 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9b2228007eba4120145f785df0f6c92ea538f5a3635a612ecf4e334c8c1446d" 1776 | "checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" 1777 | "checksum ucd-trie 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8f00ed7be0c1ff1e24f46c3d2af4859f7e863672ba3a6e92e7cff702bf9f06c2" 1778 | "checksum unchecked-index 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eeba86d422ce181a719445e51872fa30f1f7413b62becb52e95ec91aa262d85c" 1779 | "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1780 | "checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" 1781 | "checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" 1782 | "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 1783 | "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" 1784 | "checksum unicode_categories 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" 1785 | "checksum url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "75b414f6c464c879d7f9babf951f23bc3743fb7313c081b2e6ca719067ea9d61" 1786 | "checksum utf-8 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" 1787 | "checksum vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "33dd455d0f96e90a75803cfeb7f948768c08d70a6de9a8d2362461935698bf95" 1788 | "checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e" 1789 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1790 | "checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" 1791 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 1792 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1793 | "checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" 1794 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1795 | "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 1796 | "checksum xattr 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" 1797 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "meili-crates" 3 | version = "0.1.0" 4 | authors = ["Clément Renault "] 5 | edition = "2018" 6 | 7 | [dependencies] 8 | async-std = "0.99.6" 9 | atom_syndication = "0.6.0" 10 | cargo_toml = "0.8.0" 11 | comrak = { version = "0.6.2", default-features = false } 12 | csv = "1.1.1" 13 | flate2 = "1.0.11" 14 | futures-preview = "0.3.0-alpha.14" 15 | futures-timer = "0.4.0" 16 | isahc = "0.7.5" 17 | scraper = { version = "0.11.0", default-features = false } 18 | serde = { version = "1.0.101", features = ["derive"] } 19 | serde_json = "1.0.40" 20 | tar = "0.4.26" 21 | url = { version = "2.0.1", features = ["serde"] } 22 | walkdir = "2.0" 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019-2021 MeiliSearch 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | **Please note: since January 2022, this demo is now hosted at ** 2 | 3 | --- 4 | 5 | 6 | # Finding Crates 7 | 8 | A [new experience of search](https://crates.meilisearch.com) to find your favorite crates 🎉 9 | 10 | **Search by crate name or by keywords.** 11 | 12 | [![crates demo gif](assets/crates-io-demo.gif)](https://crates.meilisearch.com) 13 | 14 | The search is powered by [MeiliSearch](https://github.com/meilisearch/MeiliSearch), the open-source and instant search engine. 15 | 16 | ## See also 17 | 18 | - MeiliSearch finds [PyPI packages](https://pypi.meilisearch.com/) (Python) 19 | - MeiliSearch finds [RubyGems](https://rubygems.meilisearch.com/) (Ruby) 20 | 21 | ## How to run the data collector 22 | 23 | Set the following envrionment variables: 24 | - `MEILI_HOST_URL` 25 | - `MEILI_API_KEY` 26 | - `MEILI_INDEX_UID` (it should set to `crates` to be used with the front of this repo) 27 | 28 | ```bash 29 | $ rm -rf crates.io-index/ 30 | $ ./run.sh 31 | ``` 32 | 33 | ## Details 34 | 35 | The front is deployed to GitHub Pages. 36 | 37 | We pull new crates and crates updates every 10 minutes from [docs.rs](https://docs.rs/releases) and all the downloads counts every day at 3:30 PM UTC from [crates.io](https://crates.io/data-access). 38 | 39 | Here is the [repository of MeiliSearch](https://github.com/meilisearch/MeiliSearch). 40 | -------------------------------------------------------------------------------- /RustConfig: -------------------------------------------------------------------------------- 1 | VERSION=nightly 2 | -------------------------------------------------------------------------------- /assets/crates-io-demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meilisearch/demo-finding-crates/c5ea49452bff3fd1570614dbdf0ab8fb8fdbfea1/assets/crates-io-demo.gif -------------------------------------------------------------------------------- /docs/index.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";code,pre{background:#f1f1f1;font-size:.9em}.readme,pre{overflow:auto}a:visited,header a :visited{color:#719}#readme-deps,.about-crate{display:flex}#deps .feature,#deps .label,#versions .new{display:inline-block;box-sizing:border-box}#deps .all>.k:not(:first-child),header nav>ul>li:first-child:not(.active):not(:hover)>a:not(.button){padding-left:0}#deps,#versions .new,body>footer,header .breadcrumbs,header .byline,header .keywords,header h2 .labels,header nav>ul>li{cursor:default}.ent-n,.ent-tbl-toml,header .breadcrumbs .parent-crate{font-weight:700}a,header .keyword>span,header nav>ul>li a:hover{text-decoration:none}#category-crates a:link h4,#category-subcategories a:link h4,a:link,header nav>ul>li a:hover:link{color:#01d}#category-crates a:hover,#category-subcategories a:hover,a:link code{background:#f7f7f7}#category-crates a:hover h4,#category-subcategories a:hover h4,a:link:hover,a:visited:hover{text-decoration:underline}#category-crates .version>span,header .keyword>span{opacity:.6;padding-right:.1ex}#deps .not,#deps .not>.any>.all,#versions .date,.seealso a,header .breadcrumbs .categories a,header .byline .contributors,header .byline .coowners>span,header .byline a,header .keywords>span,header nav>ul{white-space:nowrap}code,pre{font-family:sfmono-regular,consolas,liberation mono,menlo,monospace,monospace;padding:3px 5px 2px;border-radius:3px}a code{padding:3px 3px 2px}a:visited code{background:#fcf7fe}a:link:not(:hover) code{border-bottom:1px solid #ddd;padding-bottom:1px}a:visited:not(:hover) code{border-bottom:1px solid #e6b3f7;padding-bottom:1px}pre{padding:.5em 2ex;line-height:1.45;white-space:pre-wrap}pre code{border-radius:0;padding:0;background:0 0;font-size:inherit}h1 a>code,h2 a>code,h3 a>code,h4 a>code,h5 a>code{font-weight:400}h1 code,h2 code,h3 code,h4 code,h5 code{font-size:1.1em;font-family:'fira code','interstate mono',consolas,monospace,monospace;background-color:#fcfcfb}table{border-collapse:collapse}table img{vertical-align:bottom}.readme img{font-size:10px;line-height:15px;font-weight:300;-o-object-fit:contain;object-fit:contain;max-width:100%}.readme img[align=left]{margin:0 1em .7em 0}.readme img[align=right]{margin:0 0 .7em 1em}.readme table{margin-top:.25em;margin-bottom:1em}.readme table,.readme td,.readme th{border:1px solid #dddfe4}.readme td,.readme th{padding:4px 8px}.readme tr:nth-child(even) td,.readme tr:nth-child(even) th{background:#fbfcfd}@media (prefers-color-scheme:dark){a:link{color:#49a4e4}a:visited{color:#a68bfc}code{background:#202129;color:#f2f3f7}a code{text-shadow:1px 1px 0 #000}a:link code{background:rgba(17,35,255,.5)}a:visited code{background:rgba(155,22,199,.5)}a:link:not(:hover) code{border-bottom:1px solid #464959}a:visited:not(:hover) code{border-bottom:1px solid #fff}pre{background:#191a20;color:#fff}h1 code,h2 code,h3 code,h4 code,h5 code{background-color:rgba(252,252,251,.15)}.readme table,.readme td,.readme th{border-color:#666}.readme tr:nth-child(even) td,.readme tr:nth-child(even) th{background:rgba(0,0,0,.25)}}.readme thead>tr>td,.readme thead>tr>th{background:#f9fafb;border-color:#eee #eee #ccc}header{padding-top:1em;background:#eee}header a{padding:.4em 0}header .breadcrumbs{font-size:1em;line-height:1.33;display:inline}header .breadcrumbs>h1{font:inherit;font-weight:700;margin:0;display:inline}header .breadcrumbs .categories.has-keywords{margin-right:1.5em}header .keyword{padding-right:1.15ex}header .keyword:not([href]){opacity:.666;cursor:default}header .gh-logo{color:inherit}header h2{overflow-wrap:break-word;word-wrap:break-word;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;font-size:3.5em;line-height:1.08;margin:.44em 0 0}@media (prefers-color-scheme:dark){.readme thead>tr>td,.readme thead>tr>th{background:rgba(255,255,255,.1);border-color:#888}header{background:#353746}header a :visited{color:#a68bfc}header h2{color:#ccd1e1}}header h2 .un{font-weight:150;opacity:.75}@media (max-width:640px){header h2{font-size:3em}header .byline{font-size:.95em}}header h2 .labels{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:block;font-size:.4em;line-height:1;margin:0 0 .45em;font-weight:400}header h2 .labels>span{border:2px solid;border-radius:5px;padding:0 .4ex;color:#777}header h2 .labels>span.yanked{color:#a20}header h2 .labels>span.nightly{background:#019;color:#f8f8f8;border-color:#fff}header .desc{margin:.4em 0;font-weight:300}header .desc code{background:0 0;padding:0}header .byline{margin:0;line-height:1.33}header h2+.byline{margin-top:.7em}header nav{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:2em 0 0}header nav>ul{font-size:.85em;display:flex;flex-shrink:1;flex-wrap:wrap-reverse;list-style:none;margin:0;padding:0}header nav>ul>li{margin:0 .5em 0 0;padding:0 0 2px}header nav>ul>li.active{background:#fff;color:#222}@media (max-width:480px){header h2{font-size:2.5em}header nav>ul>li.active{display:none}}header nav>ul>li a{display:block}header nav>ul>li a.button{border-radius:3px;margin-right:1em;background-color:#f6f6f6}header nav>ul>li a.button:hover{background:#fbfbfb}@media (prefers-color-scheme:dark){header nav>ul>li.active{border-bottom-color:#fafafa;background:#282a36;color:#bcc2d7}header nav>ul>li a.button{background-color:#424557}header nav>ul>li a.button:hover{background-color:#4f5269}header nav>ul>li a:hover:link{color:#49a4e4}}#category-crates a:visited h4,#category-subcategories a:visited h4,header nav>ul>li a:hover:visited{color:#719}header nav>ul>li a,header nav>ul>li.active{padding:.42em 1.9em .4em}@media (max-width:640px){header nav>ul{font-size:.75em}header nav>ul>li a,header nav>ul>li.active{padding-right:1em;padding-left:1em}}header.nightly,header.yanked{color:#fafafa}@media (prefers-color-scheme:dark){header nav>ul>li a:hover:visited{color:#a68bfc}header.nightly,header.yanked{background:#000633}}header.nightly .keyword>span,header.yanked .keyword>span{opacity:.9}header.nightly h2 .labels>span,header.yanked h2 .labels>span{color:#b7b7b7}header.nightly h2 .labels>span.yanked,header.yanked h2 .labels>span.yanked{color:#dd2c00}header.nightly h2 .labels>span.nightly,header.yanked h2 .labels>span.nightly{color:#019;border-color:#ddd;background:#ddd}header.nightly{background:#000b66}header.nightly a:not(.button):link{color:#dde0ff}@media (prefers-color-scheme:dark){header.nightly a:not(.button):link{color:#49a4e4}}header.nightly a:not(.button):visited{color:#c757ec}header.yanked{background:#771800}header.yanked a:link{color:#ddd}header.yanked a:visited{color:#c4806f}#readme-deps>div{min-width:75%}#versions .edition-2018{font-size:.7em;margin-top:0}#downloads p:first-child,.about-crate #license{margin:1em 0 .5em}#versions del{color:#aaa;-webkit-text-decoration-color:#000;text-decoration-color:#000;font-weight:200}#deps h4,#versions .new,#versions h3>span{font-weight:400}#versions h3{font-size:1em;margin:1em 0 0}#versions .date{text-align:justify;-moz-text-align-last:justify;text-align-last:justify}#versions .new{border:1px solid #ffddc3;color:#fe7711;font-size:.7em;font-variant:small-caps;border-radius:4px;line-height:1;padding:0 3px 1px;vertical-align:20%}#versions table,#versions td,#versions th{border:0}#versions th{padding-right:.8ex;text-align:right;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.about-crate{margin:0 0 2em;flex-wrap:wrap;justify-content:space-between;flex-grow:1}.about-crate::after{content:"";width:0}.about-crate>*{margin:0 0 0 1em;padding:0 0 0 1em}.about-crate>:last-child{flex-grow:0;flex-shrink:1}.about-crate>:first-child{margin-left:0;padding-left:0;border-left:0}#downloads svg{display:block;margin:.8em 0 .5em}@media (prefers-color-scheme:dark){header.nightly a:not(.button):visited{color:#a68bfc}#versions del{color:#5d6b9d;-webkit-text-decoration-color:#9093a8;text-decoration-color:#9093a8}#versions .new{background:#464959;border:1px solid #5c6076;color:#fe7711}.about-crate b,.about-crate strong,.about-crate th{font-weight:500;color:#f7f5ff}#downloads svg{background:#3c3e4f}#deps .version.obsolete{color:#a20}}#downloads p{margin:0}#sloc{flex-basis:8em}#deps>p,#sloc p{margin:.5em 0}#deps{padding:1em .5em 1em 1.5em;min-width:10em;margin-bottom:1em;max-width:35%}#deps h4{margin:0 0 .25em}#deps li{margin:0;padding:0}#deps ul{margin:0 0 .5em 1.2em;padding:0}#deps li.optional,#deps ul.dev{list-style-type:circle}#deps ul.long,#deps ul.long+ul{line-height:1.3}#deps .label,#deps .with-feature{color:#a2a2a2}#deps .version.obsolete{color:#a20;font-weight:700}#deps .version.outdated{color:#fe7711}#deps .version.top{display:none}#deps code{background:0 0;padding:0}#deps .version,#deps .with-feature{font-size:.8em}#deps .feature,#deps .label,#deps li>.cfg{font-size:.7em;font-variant:small-caps;font-weight:400;vertical-align:17%}#deps .feature{background:#f9f9f9;border:1px dotted #aaa;color:#502917;padding:0 3px 1px}#deps .k,#deps .label{padding:1px 4px 2px}@media (prefers-color-scheme:dark){#deps .version.outdated{color:#fe7711}#deps .feature{background:#2f313d;color:#cd764d;border:1px dotted #9093a8}}#deps .cfg,#deps .label,body>footer{color:#fafafa}#deps .feature,#deps .label{border-radius:4px;line-height:1}#deps .label{background:#019}#category-crates a:hover code,#category-subcategories a:hover code,#deps .cfg{background:#c4c4c4}#deps .label.label-dev{color:#fafafa;background:#d28561}@media (prefers-color-scheme:dark){#deps .label.label-dev{background:sienna}}#deps .label.label-build{color:sienna;background:#fff;border:1px solid #e9c2b0;padding:0 3px 1px}#deps .label-{display:none}#deps .with-feature{line-height:1}@media (prefers-color-scheme:dark){#deps .label.label-build{color:#783e22;border:1px solid #e9c2b0;background:#d7d9e0}#deps .cfg{background:#464959;color:#fafafa}}#deps .cfg,#deps .k{box-sizing:border-box;border-radius:4px;display:inline-block;vertical-align:baseline;line-height:1}#deps .any{background:0 0;padding:0}#deps .all>.any{background:#fff;border:1px solid #c4c4c4;padding:1px}@media (prefers-color-scheme:dark){#deps .all>.any{background:#282a36;border:1px solid #2f313d}}#deps .all>.any .k{padding:0 3px}#deps .not{padding:0 0 0 3px}#deps .not>.any>.k,#deps .not>.k{background:#dd2c00;color:#fff;border:1px solid #dd2c00;text-shadow:none;padding-top:0;padding-bottom:1px}@media (prefers-color-scheme:dark){#deps .not>.any>.k,#deps .not>.k{background:#771800;color:#dcdfea;border:1px solid #911d00}}#deps .not>.any{margin-right:3px}#deps .not>.any>.all{border-left:1px solid #fff;border-right:1px solid #fff}@media (max-width:740px){#readme-deps{display:block}#readme-deps #deps{padding:1em 0 0;max-width:none}#readme-deps #deps>h4{font-weight:700}#readme-deps #deps>h4>a:not(:hover){color:inherit}#readme-deps #deps>div{-webkit-columns:auto;-moz-columns:auto;columns:auto;-webkit-column-width:10em;-moz-column-width:10em;column-width:10em}}#badges{padding-top:7px}#badges .badge{border-radius:3px;background:#fff;color:#fff;font-family:DejaVu Sans,Verdana,Geneva,sans-serif;font-size:11px;line-height:20px;display:inline-block;margin:0;vertical-align:top;padding:0 6px;border-right:7px solid #0a6}#badges>a{padding:10px 10px 10px 0}main{min-height:52vh}hr{border:0;border-top:1px dotted #5e5e5e;margin:1.4em 0;height:0}body>footer{background:#2b2b2b;margin:2em 0 0;font-weight:300;padding:1em}body>footer a:link{color:#49a4e4}@media (prefers-color-scheme:dark){hr{border-top:1px dotted #191a20}body>footer{color:#bcc2d7;background:#000}body>footer a:link{color:#8690ff}}body>footer a:visited{color:#dfd6fe}body>footer p{font-size:.9em}pre.to-copy{color:#6f3;background:#444;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;min-width:33%;font-size:1.25em;padding:1em 2em 1em 1em}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:300;src:local("Fira Sans Light"),local("FiraSans-Light"),url(/fira/va9B4kDNxMZdWfMOD5VnPKreSxf6Xl7Gl3LX.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:300;src:local("Fira Sans Light"),local("FiraSans-Light"),url(/fira/va9B4kDNxMZdWfMOD5VnPKreQhf6Xl7Gl3LX.woff2) format("woff2");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:300;src:local("Fira Sans Light"),local("FiraSans-Light"),url(/fira/va9B4kDNxMZdWfMOD5VnPKreShf6Xl7Gl3LX.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:300;src:local("Fira Sans Light"),local("FiraSans-Light"),url(/fira/va9B4kDNxMZdWfMOD5VnPKreRRf6Xl7Gl3LX.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:300;src:local("Fira Sans Light"),local("FiraSans-Light"),url(/fira/va9B4kDNxMZdWfMOD5VnPKreSRf6Xl7Gl3LX.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:300;src:local("Fira Sans Light"),local("FiraSans-Light"),url(/fira/va9B4kDNxMZdWfMOD5VnPKreSBf6Xl7Gl3LX.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:400;src:local("Fira Sans Regular"),local("FiraSans-Regular"),local("fira sans ot"),url(/fira/va9E4kDNxMZdWfMOD5VvmojLazX3dGTP.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:400;src:local("Fira Sans Regular"),local("FiraSans-Regular"),local("fira sans ot"),url(/fira/va9E4kDNxMZdWfMOD5Vvk4jLazX3dGTP.woff2) format("woff2");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:400;src:local("Fira Sans Regular"),local("FiraSans-Regular"),local("fira sans ot"),url(/fira/va9E4kDNxMZdWfMOD5Vvm4jLazX3dGTP.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:400;src:local("Fira Sans Regular"),local("FiraSans-Regular"),local("fira sans ot"),url(/fira/va9E4kDNxMZdWfMOD5VvlIjLazX3dGTP.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:400;src:local("Fira Sans Regular"),local("FiraSans-Regular"),local("fira sans ot"),url(/fira/va9E4kDNxMZdWfMOD5VvmIjLazX3dGTP.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:400;src:local("Fira Sans Regular"),local("FiraSans-Regular"),local("fira sans ot"),url(/fira/va9E4kDNxMZdWfMOD5VvmYjLazX3dGTP.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:700;src:local("Fira Sans Bold"),local("FiraSans-Bold"),url(/fira/va9B4kDNxMZdWfMOD5VnLK3eSxf6Xl7Gl3LX.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:700;src:local("Fira Sans Bold"),local("FiraSans-Bold"),url(/fira/va9B4kDNxMZdWfMOD5VnLK3eQhf6Xl7Gl3LX.woff2) format("woff2");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:700;src:local("Fira Sans Bold"),local("FiraSans-Bold"),url(/fira/va9B4kDNxMZdWfMOD5VnLK3eShf6Xl7Gl3LX.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:700;src:local("Fira Sans Bold"),local("FiraSans-Bold"),url(/fira/va9B4kDNxMZdWfMOD5VnLK3eRRf6Xl7Gl3LX.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:700;src:local("Fira Sans Bold"),local("FiraSans-Bold"),url(/fira/va9B4kDNxMZdWfMOD5VnLK3eSRf6Xl7Gl3LX.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:700;src:local("Fira Sans Bold"),local("FiraSans-Bold"),url(/fira/va9B4kDNxMZdWfMOD5VnLK3eSBf6Xl7Gl3LX.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}tt{font:inherit}.com-bl{color:#96928f}.com-ln,.src-toml .ent-n-tag{font-weight:400}.k-op{color:#398bc9}@media (prefers-color-scheme:dark){body>footer a:visited{color:#de9cf4}pre.to-copy{background:#3a3a43}pre.to-copy code{color:#cfc}.k-op,pre .const-num{color:#b1d1ea}}.src-sh .pun-sec-parens,.str-q{color:#bd7111}.str-q .const-ot,.str-q .pun-def-var,.str-q .var-ot{background:rgba(255,197,119,.075)}.str-unq{background:rgba(255,197,119,.1)}.str-unq .ent-n{background:0 0}pre .const-lang,pre .const-num{color:#341ed3}.const-char,.const-ot,.pun-def-var,.var-ot,.var-parm{color:#1b929e}@media (prefers-color-scheme:dark){pre .const-lang,pre .const-num{color:#a499f1}.const-char,.const-ot,.pun-def-var,.var-ot,.var-parm{color:#22baca}}.var-lang-this{color:#398bc9}.stor,.stor-mod,.var-parm-opt{color:#7b1fa2}@media (prefers-color-scheme:dark){.stor,.stor-mod,.var-parm-opt{color:#b4e}}.stor-mod-lf,.stor-ty{color:#af33a6}@media (prefers-color-scheme:dark){.stor-mod-lf,.stor-ty{color:#d672cf}}.k,.k-ctrl,.k-ot,.stor-ty-fn{color:#8521af}@media (prefers-color-scheme:dark){.k,.k-ctrl,.k-ot,.stor-ty-fn{color:#cc73f2}}.ent-ot-attr-n{color:#398bc9}.m-gen{color:#75400a}.m-gen .pun-def,.m-gen .pun-sec{color:#000}@media (prefers-color-scheme:dark){.m-gen{color:#c76739}.m-gen .pun-def,.m-gen .pun-sec{color:#bcc2d7}}.ent-ot-inherited,.sup-ty{color:#cb4718}.sup-mac{color:#8f8d14}.m-ann-rs .var-ann,.m-ann-rs .var-fn{color:#3f831e}.m-ann-rs{color:#888}.m-ann-rs .m-ann-parms,.m-ann-rs .m-fn-call{color:#666}.m-ann-rs .pun-sec,pre .m-ann-rs .m-ann-parms,pre .m-ann-rs .m-fn-call{color:#888}pre .m-ann-rs{color:#999}.pun-term-rs{opacity:.75}#category-crates a:hover .meta,#category-subcategories a:hover .meta,.m-path{opacity:.8}.com-ent-n-fn{color:#6c7b65}.sup-const,.sup-fn,.var-parameter{color:#398bc9}@media (prefers-color-scheme:dark){.sup-const,.sup-fn,.var-parameter{color:#89badf}}.sup-cls{color:#4e94ce}.sup-mac-rs{color:#3f831e}@media (prefers-color-scheme:dark){.sup-mac-rs{color:#53ac28}#category-crates a:link h4,#category-subcategories a:link h4{color:#49a4e4}}.sup-ot-var{color:#cb4718}.inv{color:#ff5722}.inv-depr{color:#ff8a65}.mk-heading{color:#cb4718}.ent-n-tag,.pun-def-tag-begin,.pun-def-tag-end,.pun-def-tag-html{color:#398bc9}.ent-ot-attribute-name,.ent-ot-attribute-name-id,.m-sel-css{color:#af33a6}.stor-mod-ts{color:#c07f00}.com-ln,.src-toml .com-ln .pun-def{color:#696}.com-ln{font-style:italic}.com-ln .pun-def{color:rgba(102,153,102,.5)}.var-fn-sh{font-weight:700}.m-path .pun-acc{opacity:.5}#category-crates>.inner-col,#category-subcategories>.inner-col{padding:0}#category-crates ul,#category-subcategories ul{margin:1em 0;padding:0;list-style:none}#category-crates ul>li,#category-subcategories ul>li{margin:0;padding:0}#category-crates a,#category-subcategories a{contain:style paint;display:block;overflow:hidden;padding:1em;text-decoration:none;color:inherit}#category-crates a:hover .desc,#category-subcategories a:hover .desc{color:#222}@media (prefers-color-scheme:dark){#category-crates a:visited h4,#category-subcategories a:visited h4{color:#a68bfc}#category-crates a:hover,#category-subcategories a:hover{background:#2f313d}#category-crates a:hover code,#category-subcategories a:hover code{background:#191a20}#category-crates a:hover .desc,#category-subcategories a:hover .desc{color:#ccd1e1}}#category-crates a:hover .nightly,#category-subcategories a:hover .nightly{background:#019;border-color:#000b66;color:#fafafa!important}#category-crates a>.h,#category-subcategories a>.h{line-height:1.3;font-size:1.05em;margin:0 0 .333em}#category-crates a .desc,#category-crates a h4,#category-subcategories a .desc,#category-subcategories a h4{display:inline}#category-crates a .desc,#category-subcategories a .desc{color:#555;font-weight:400}#category-crates a .desc code,#category-subcategories a .desc code{border:0;color:#888;background:#f7f7f7}@media (max-width:640px){#category-crates a h4,#category-subcategories a h4{font-size:1em}#category-crates a .desc,#category-subcategories a .desc{font-size:.85em}}#category-crates a h4,#category-subcategories a h4{font-size:1.1em;margin:0 .5ex 0 0;font-weight:500}#category-subcategories .h>h4{font-size:1.25em;font-weight:700}#category-subcategories .desc::before{content:"›";color:#555;margin-right:1ex}#category-crates .meta{font-size:.8em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#2f2f2f}@media (prefers-color-scheme:dark){#category-crates a .desc,#category-subcategories a .desc{color:#9ca5c4}#category-crates a .desc code,#category-subcategories a .desc code{color:#8c96ba;background:#464959}#category-subcategories .desc::before{color:#bcc2d7}#category-crates .meta{color:#dcdfea}}#category-crates .downloads,#category-crates .k,#category-crates .labels>span,#category-crates .version{margin-right:2ex}#category-crates .downloads{color:#222}#category-crates .downloads b{color:#222;font-weight:400;padding-left:.1ex}#category-crates .downloads::before{content:"⬇︎";color:#c4c4c4;margin:0 .25ex 0 0;text-decoration:underline;vertical-align:7%;font-size:.8em}@media (prefers-color-scheme:dark){#category-crates .downloads,#category-crates .downloads b{color:#9ca5c4}#category-crates .downloads::before{color:#737892}}#category-crates .version{color:#a02000}#category-crates .version.stable{color:#009b5d}@media (prefers-color-scheme:dark){#category-crates .version{color:#c51e00}#category-crates .version.stable{color:#0a6}}#category-crates .version.okay{color:#911d00}@media (prefers-color-scheme:dark){#category-crates .version.okay{color:#c88e05}}#category-crates .version.eek{color:#ff4111;font-weight:700}#category-crates .k{color:#888;font-weight:300}#category-crates .k>span{color:#bbb;padding-right:.1ex}@media (prefers-color-scheme:dark){#category-crates .version.eek{color:#f82600}#category-crates .k>span{color:#6f6f6f}}#category-crates .labels>span{font-size:.9em;vertical-align:3%;color:#888;border:1px solid #a2a2a2;border-radius:3px;padding:0 3px}#category-crates .labels>span.nightly{color:#019;border-color:1px solid #a2a2a2}@media (prefers-color-scheme:dark){#category-crates .labels>span.nightly{color:#67f;border-color:1px solid #fff}}.pager{margin:2em 0 0;padding:1em 0 0;border-top:1px dotted #ddd;text-align:right}.pager a::after{content:" В»";opacity:.7}.seealso{padding:1em 0;color:#bbb}.seealso a{padding:.333em 0;font-weight:400} 2 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Meili crates browser 2000 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 102 | 103 | 104 | 105 | 106 | 125 | 126 | 229 | 230 | 231 |
232 |
233 |

Meili crates browser 2000

234 | 235 |

236 | This search bar is provided by MeiliSearch, 237 | it is a demonstration of our instant search engine. 238 |
239 | If you want to take a look at the MeiliSearch source code, it's your lucky day as it is available on GitHub. 240 |
241 | Also, see the source code of this project. 242 |
243 | We wrote a blog post about how we made this search engine available for you. 244 |
245 | The whole design was taken from lib.rs because we love it. 246 |
247 |
248 | We pull new crates and crates updates every 10 minutes from docs.rs and 249 | all the downloads counts every day at 3:30 PM UTC from crates.io. 250 | Currently we have something like 31 729 crates. 251 |
252 |
253 | Have fun using it ⌨️ 💨 254 |
255 |

256 | 257 | 261 | 266 |
267 |
268 |
269 |
270 |
    271 | 272 |
273 |
274 |
275 | 276 |
277 |
278 |

Search powered by MeiliSearch.

279 |
280 |
281 | 282 | 283 | 284 | -------------------------------------------------------------------------------- /docs/va9B4kDNxMZdWfMOD5VnLK3eRhf6Xl7Glw.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meilisearch/demo-finding-crates/c5ea49452bff3fd1570614dbdf0ab8fb8fdbfea1/docs/va9B4kDNxMZdWfMOD5VnLK3eRhf6Xl7Glw.woff2 -------------------------------------------------------------------------------- /docs/va9B4kDNxMZdWfMOD5VnPKreRhf6Xl7Glw.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meilisearch/demo-finding-crates/c5ea49452bff3fd1570614dbdf0ab8fb8fdbfea1/docs/va9B4kDNxMZdWfMOD5VnPKreRhf6Xl7Glw.woff2 -------------------------------------------------------------------------------- /docs/va9E4kDNxMZdWfMOD5Vvl4jLazX3dA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meilisearch/demo-finding-crates/c5ea49452bff3fd1570614dbdf0ab8fb8fdbfea1/docs/va9E4kDNxMZdWfMOD5Vvl4jLazX3dA.woff2 -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -xe 4 | 5 | cargo build --release 6 | 7 | git clone --depth=1 https://github.com/rust-lang/crates.io-index.git 8 | 9 | cp ./target/release/full_init /usr/local/bin/init-meili-crates 10 | cp ./target/release/live /usr/local/bin/live-meili-crates 11 | 12 | /usr/local/bin/init-meili-crates 13 | 14 | echo please add the following line to your cronjobs with 'crontab -e' 15 | echo and check that it is not already there ':)' 16 | echo 17 | echo "*/10 * * * * MEILI_HOST_URL=$MEILI_HOST_URL MEILI_INDEX_UID=$MEILI_INDEX_UID MEILI_API_KEY=$MEILI_API_KEY /usr/local/bin/live-meili-crates" 18 | -------------------------------------------------------------------------------- /src/backoff.rs: -------------------------------------------------------------------------------- 1 | use std::iter; 2 | 3 | pub struct Fibonacci { 4 | curr: u32, 5 | next: u32, 6 | } 7 | 8 | impl Fibonacci { 9 | pub fn new() -> Fibonacci { 10 | Fibonacci { curr: 1, next: 1 } 11 | } 12 | } 13 | 14 | impl Iterator for Fibonacci { 15 | type Item = u32; 16 | fn next(&mut self) -> Option { 17 | let new_next = self.curr + self.next; 18 | 19 | self.curr = self.next; 20 | self.next = new_next; 21 | 22 | Some(self.curr) 23 | } 24 | } 25 | 26 | pub fn new() -> impl Iterator { 27 | // fib(21) = 10946 28 | Fibonacci::new().take(10).chain(iter::repeat(10)) 29 | } 30 | -------------------------------------------------------------------------------- /src/bin/full_init.rs: -------------------------------------------------------------------------------- 1 | use std::env; 2 | use std::path::Path; 3 | 4 | use async_std::task; 5 | use async_std::fs; 6 | use async_std::io::BufReader; 7 | use async_std::prelude::*; 8 | 9 | use futures::channel::mpsc; 10 | use futures::sink::SinkExt; 11 | use futures::stream::{self, TryStreamExt, StreamExt}; 12 | use walkdir::WalkDir; 13 | use isahc::prelude::*; 14 | use serde_json::json; 15 | 16 | use meili_crates::{chunk_complete_crates_info_to_meili, retrieve_crate_toml, CrateInfo, Result}; 17 | use meili_crates::{MEILI_API_KEY, MEILI_INDEX_UID, MEILI_HOST_URL}; 18 | 19 | async fn process_file(entry: walkdir::DirEntry) -> Result> { 20 | if entry.file_type().is_file() { 21 | let file = fs::File::open(entry.path()).await?; 22 | let file = BufReader::new(file); 23 | let mut lines = file.lines(); 24 | 25 | let mut last = None; 26 | while let Some(line) = lines.try_next().await? { 27 | last = Some(line); 28 | } 29 | 30 | let last_line = match last { 31 | Some(line) => line, 32 | None => return Ok(None), 33 | }; 34 | 35 | let info: CrateInfo = match serde_json::from_str(&last_line) { 36 | Ok(info) => info, 37 | Err(_) => return Ok(None), 38 | }; 39 | 40 | return Ok(Some(info)); 41 | } 42 | 43 | Ok(None) 44 | } 45 | 46 | async fn crates_infos>( 47 | mut sender: mpsc::Sender, 48 | crates_io_index: P, 49 | ) -> Result<()> 50 | { 51 | let walkdir = WalkDir::new(crates_io_index) 52 | .max_open(1) 53 | .contents_first(true); 54 | 55 | for result in walkdir { 56 | let entry = match result { 57 | Ok(entry) => entry, 58 | Err(e) => { eprintln!("{}", e); continue }, 59 | }; 60 | 61 | match process_file(entry).await { 62 | Ok(Some(info)) => { 63 | if let Err(e) = sender.send(info).await { 64 | eprintln!("{}", e); 65 | } 66 | }, 67 | Ok(None) => (), 68 | Err(e) => eprintln!("{}", e), 69 | } 70 | } 71 | 72 | Ok(()) 73 | } 74 | 75 | async fn init_index() -> Result<()> { 76 | let host_url = env::var(MEILI_HOST_URL).expect(MEILI_HOST_URL); 77 | let api_key = env::var(MEILI_API_KEY).expect(MEILI_API_KEY); 78 | let index_uid = env::var(MEILI_INDEX_UID).expect(MEILI_INDEX_UID); 79 | 80 | let url = format!("{host_url}/indexes", 81 | host_url = host_url 82 | ); 83 | 84 | let body = json!({ 85 | "uid": index_uid, 86 | "primaryKey": "name" 87 | }); 88 | 89 | let client = HttpClient::new()?; 90 | let request = Request::post(url) 91 | .header("X-Meili-API-Key", &api_key) 92 | .header("Content-Type", "application/json") 93 | .body(body.to_string())?; 94 | 95 | let mut res = client.send_async(request).await?; 96 | let res = res.text()?; 97 | eprintln!("{}", res); 98 | 99 | Ok(()) 100 | } 101 | 102 | async fn init_settings() -> Result<()> { 103 | let host_url = env::var(MEILI_HOST_URL).expect(MEILI_HOST_URL); 104 | let api_key = env::var(MEILI_API_KEY).expect(MEILI_API_KEY); 105 | let index_uid = env::var(MEILI_INDEX_UID).expect(MEILI_INDEX_UID); 106 | 107 | let url = format!("{host_url}/indexes/{index_uid}/settings", 108 | host_url = host_url, 109 | index_uid = index_uid, 110 | ); 111 | 112 | let body = r#"{ 113 | "rankingRules": [ 114 | "typo", 115 | "words", 116 | "proximity", 117 | "attribute", 118 | "wordsPosition", 119 | "exactness", 120 | "desc(downloads)" 121 | ], 122 | "searchableAttributes": [ 123 | "name", 124 | "description", 125 | "keywords", 126 | "categories", 127 | "readme" 128 | ], 129 | "displayedAttributes": [ 130 | "name", 131 | "description", 132 | "keywords", 133 | "categories", 134 | "readme", 135 | "version", 136 | "downloads" 137 | ] 138 | }"#; 139 | 140 | let client = HttpClient::new()?; 141 | let request = Request::post(url) 142 | .header("X-Meili-API-Key", &api_key) 143 | .header("Content-Type", "application/json") 144 | .body(body)?; 145 | 146 | let mut res = client.send_async(request).await?; 147 | let res = res.text()?; 148 | eprintln!("{}", res); 149 | 150 | Ok(()) 151 | } 152 | 153 | // git clone --depth=1 https://github.com/rust-lang/crates.io-index.git 154 | // https://static.crates.io/crates/{crate}/{crate}-{version}.crate 155 | 156 | fn main() -> Result<()> { 157 | task::block_on(async { 158 | let (infos_sender, infos_receiver) = mpsc::channel(1000); 159 | let (cinfos_sender, cinfos_receiver) = mpsc::channel(1000); 160 | 161 | init_index().await?; 162 | init_settings().await?; 163 | 164 | let retrieve_handler = task::spawn(async { 165 | crates_infos(infos_sender, "crates.io-index/").await 166 | }); 167 | 168 | let publish_handler = task::spawn(async { 169 | chunk_complete_crates_info_to_meili(cinfos_receiver).await 170 | }); 171 | 172 | let retrieve_toml = StreamExt::zip(infos_receiver, stream::repeat(cinfos_sender)) 173 | .for_each_concurrent(Some(64), |(info, mut sender)| { 174 | task::spawn(async move { 175 | match retrieve_crate_toml(&info).await { 176 | Ok(cinfo) => sender.send(cinfo).await.unwrap(), 177 | Err(e) => eprintln!("{:?} {}", info, e), 178 | } 179 | }) 180 | }); 181 | 182 | retrieve_toml.await; 183 | retrieve_handler.await?; 184 | publish_handler.await?; 185 | 186 | Ok(()) 187 | }) 188 | } 189 | -------------------------------------------------------------------------------- /src/bin/full_update.rs: -------------------------------------------------------------------------------- 1 | use std::ffi::OsStr; 2 | 3 | use async_std::task; 4 | use flate2::read::GzDecoder; 5 | use futures::channel::mpsc; 6 | use futures::sink::SinkExt; 7 | use futures::stream::{self, StreamExt}; 8 | use tar::Archive; 9 | 10 | use meili_crates::{chunk_downloads_crates_info_to_meili, DownloadsCrateInfos, Result}; 11 | 12 | async fn crates_downloads_infos() -> Result> { 13 | let body = isahc::get_async("https://static.crates.io/db-dump.tar.gz").await?.into_body(); 14 | let gz = GzDecoder::new(body); 15 | let mut tar = Archive::new(gz); 16 | 17 | let mut entry = None; 18 | for result in tar.entries()? { 19 | let e = result?; 20 | if e.path()?.file_name() == Some(OsStr::new("crates.csv")) { 21 | entry = Some(e); 22 | break 23 | } 24 | } 25 | 26 | let entry = match entry { 27 | Some(entry) => entry, 28 | None => return Ok(Vec::new()), 29 | }; 30 | 31 | let mut downloads_infos = Vec::new(); 32 | 33 | let mut rdr = csv::Reader::from_reader(entry); 34 | for result in rdr.deserialize() { 35 | let info: DownloadsCrateInfos = result?; 36 | downloads_infos.push(info); 37 | } 38 | 39 | Ok(downloads_infos) 40 | } 41 | 42 | fn main() -> Result<()> { 43 | task::block_on(async { 44 | let (cinfos_sender, cinfos_receiver) = mpsc::channel(100); 45 | 46 | let downloads_infos = stream::iter(crates_downloads_infos().await?); 47 | 48 | let publish_handler = task::spawn(async { 49 | chunk_downloads_crates_info_to_meili(cinfos_receiver).await 50 | }); 51 | 52 | StreamExt::zip(downloads_infos, stream::repeat(cinfos_sender)) 53 | .for_each_concurrent(Some(8), |(info, mut sender)| async move { 54 | sender.send(info).await.unwrap() 55 | }) 56 | .await; 57 | 58 | publish_handler.await?; 59 | 60 | Ok(()) 61 | }) 62 | } 63 | -------------------------------------------------------------------------------- /src/bin/live.rs: -------------------------------------------------------------------------------- 1 | use std::io::BufReader; 2 | 3 | use async_std::task; 4 | use atom_syndication::Feed; 5 | use futures::channel::mpsc; 6 | use futures::sink::SinkExt; 7 | use futures::stream::{self, StreamExt}; 8 | 9 | use meili_crates::{chunk_complete_crates_info_to_meili, retrieve_crate_toml, CrateInfo, Result}; 10 | 11 | async fn crates_infos(mut sender: mpsc::Sender) -> Result<()> { 12 | let body = isahc::get_async("https://docs.rs/releases/feed").await?.into_body(); 13 | let feed = Feed::read_from(BufReader::new(body)).unwrap(); 14 | 15 | for entry in feed.entries() { 16 | // urn:docs-rs:hello_exercism:0.2.8 17 | let name = match entry.id().split(':').nth(2) { 18 | Some(name) => name.to_string(), 19 | None => continue, 20 | }; 21 | 22 | let vers = match entry.id().split(':').nth(3) { 23 | Some(vers) => vers.to_string(), 24 | None => continue, 25 | }; 26 | 27 | let info = CrateInfo { name, vers }; 28 | 29 | if let Err(e) = sender.send(info).await { 30 | eprintln!("{}", e); 31 | } 32 | } 33 | 34 | Ok(()) 35 | } 36 | 37 | fn main() -> Result<()> { 38 | task::block_on(async { 39 | let (infos_sender, infos_receiver) = mpsc::channel(100); 40 | let (cinfos_sender, cinfos_receiver) = mpsc::channel(100); 41 | 42 | let retrieve_handler = task::spawn(async { 43 | crates_infos(infos_sender).await 44 | }); 45 | 46 | let publish_handler = task::spawn(async { 47 | chunk_complete_crates_info_to_meili(cinfos_receiver).await 48 | }); 49 | 50 | StreamExt::zip(infos_receiver, stream::repeat(cinfos_sender)) 51 | .for_each_concurrent(Some(8), |(info, mut sender)| async move { 52 | match retrieve_crate_toml(&info).await { 53 | Ok(cinfo) => sender.send(cinfo).await.unwrap(), 54 | Err(e) => eprintln!("{:?} {}", info, e), 55 | } 56 | }) 57 | .await; 58 | 59 | retrieve_handler.await?; 60 | publish_handler.await?; 61 | 62 | Ok(()) 63 | }) 64 | } 65 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | use std::env; 2 | use std::error::Error; 3 | use std::io::Read; 4 | use std::time::Duration; 5 | 6 | use futures::channel::mpsc; 7 | use futures::stream::StreamExt; 8 | use futures_timer::Delay; 9 | 10 | use cargo_toml::Manifest; 11 | use flate2::read::GzDecoder; 12 | use isahc::prelude::*; 13 | use serde::{Serialize, Deserialize}; 14 | use tar::Archive; 15 | 16 | pub const MEILI_HOST_URL: &str = "MEILI_HOST_URL"; 17 | pub const MEILI_INDEX_UID: &str = "MEILI_INDEX_UID"; 18 | pub const MEILI_API_KEY: &str = "MEILI_API_KEY"; 19 | 20 | pub mod backoff; 21 | 22 | pub type Result = std::result::Result>; 23 | 24 | #[derive(Debug, Deserialize)] 25 | pub struct CrateInfo { 26 | pub name: String, 27 | pub vers: String, 28 | } 29 | 30 | #[derive(Debug, Serialize)] 31 | pub struct CompleteCrateInfos { 32 | pub name: String, 33 | pub description: String, 34 | pub keywords: Vec, 35 | pub categories: Vec, 36 | pub readme: String, 37 | pub version: String, 38 | } 39 | 40 | #[derive(Debug, Deserialize, Serialize)] 41 | pub struct DownloadsCrateInfos { 42 | pub name: String, 43 | downloads: u64, 44 | } 45 | 46 | pub async fn retrieve_crate_toml(info: &CrateInfo) -> Result { 47 | let url = format!( 48 | "https://static.crates.io/crates/{name}/{name}-{version}.crate", 49 | name = info.name, 50 | version = info.vers, 51 | ); 52 | 53 | let mut result = None; 54 | for multiplier in backoff::new().take(10) { 55 | match isahc::get_async(&url).await { 56 | Ok(res) => { result = Some(res); break }, 57 | Err(e) => { 58 | let dur = Duration::from_secs(1) * (multiplier + 1); 59 | eprintln!("error downloading {} {} retrying in {:.2?}", url, e, dur); 60 | let _ = Delay::new(dur).await; 61 | }, 62 | } 63 | } 64 | 65 | let mut res = match result { 66 | Some(res) => res, 67 | None => return Err(format!("Could not download {}", url).into()), 68 | }; 69 | 70 | if !res.status().is_success() { 71 | let body = res.text()?; 72 | return Err(format!("{}", body).into()); 73 | } 74 | 75 | let gz = GzDecoder::new(res.into_body()); 76 | let mut tar = Archive::new(gz); 77 | 78 | let mut toml_infos = None; 79 | let mut readme = None; 80 | 81 | for res in tar.entries()? { 82 | // stop early if we found both files 83 | if toml_infos.is_some() && readme.is_some() { break } 84 | 85 | let mut entry = res?; 86 | let path = entry.path()?; 87 | let file_name = path.file_name().and_then(|s| s.to_str()); 88 | 89 | match file_name { 90 | Some("Cargo.toml") if toml_infos.is_none() => { 91 | let mut content = Vec::new(); 92 | entry.read_to_end(&mut content)?; 93 | 94 | let manifest = Manifest::from_slice(&content)?; 95 | let package = match manifest.package { 96 | Some(package) => package, 97 | None => break, 98 | }; 99 | 100 | let name = info.name.clone(); 101 | let description = package.description.unwrap_or_default(); 102 | let keywords = package.keywords; 103 | let categories = package.categories; 104 | let version = info.vers.clone(); 105 | 106 | toml_infos = Some(( 107 | name, 108 | description, 109 | keywords, 110 | categories, 111 | version, 112 | )); 113 | }, 114 | Some("README.md") if readme.is_none() => { 115 | let mut content = String::new(); 116 | entry.read_to_string(&mut content)?; 117 | 118 | let options = comrak::ComrakOptions::default(); 119 | let html = comrak::markdown_to_html(&content, &options); 120 | 121 | let document = scraper::Html::parse_document(&html); 122 | let html = document.root_element(); 123 | let text = html.text().collect(); 124 | 125 | readme = Some(text); 126 | }, 127 | _ => (), 128 | } 129 | } 130 | 131 | match (toml_infos, readme) { 132 | (Some((name, description, keywords, categories, version)), readme) => { 133 | Ok(CompleteCrateInfos { 134 | name, 135 | description, 136 | keywords, 137 | categories, 138 | readme: readme.unwrap_or_default(), 139 | version, 140 | }) 141 | }, 142 | (None, _) => Err(String::from("No Cargo.toml found in this crate").into()), 143 | } 144 | 145 | } 146 | 147 | pub async fn chunk_complete_crates_info_to_meili( 148 | receiver: mpsc::Receiver, 149 | ) -> Result<()> 150 | { 151 | let api_key = env::var(MEILI_API_KEY).expect(MEILI_API_KEY); 152 | let index_uid = env::var(MEILI_INDEX_UID).expect(MEILI_INDEX_UID); 153 | let host_url = env::var(MEILI_HOST_URL).expect(MEILI_HOST_URL); 154 | 155 | let client = HttpClient::new()?; 156 | 157 | let mut receiver = receiver.chunks(100); 158 | while let Some(chunk) = StreamExt::next(&mut receiver).await { 159 | let url = format!("{host_url}/indexes/{index_uid}/documents", 160 | host_url = host_url, 161 | index_uid = index_uid, 162 | ); 163 | 164 | let chunk_json = serde_json::to_string(&chunk)?; 165 | 166 | let request = Request::put(url) 167 | .header("X-Meili-API-Key", &api_key) 168 | .header("Content-Type", "application/json") 169 | .body(chunk_json)?; 170 | 171 | let mut res = client.send_async(request).await?; 172 | let res = res.text()?; 173 | eprintln!("{}", res); 174 | } 175 | 176 | Ok(()) 177 | } 178 | 179 | pub async fn chunk_downloads_crates_info_to_meili( 180 | receiver: mpsc::Receiver, 181 | ) -> Result<()> 182 | { 183 | let api_key = env::var(MEILI_API_KEY).expect(MEILI_API_KEY); 184 | let index_uid = env::var(MEILI_INDEX_UID).expect(MEILI_INDEX_UID); 185 | let host_url = env::var(MEILI_HOST_URL).expect(MEILI_HOST_URL); 186 | 187 | let client = HttpClient::new()?; 188 | 189 | let mut receiver = receiver.chunks(150); 190 | while let Some(chunk) = StreamExt::next(&mut receiver).await { 191 | let url = format!("{host_url}/indexes/{index_uid}/documents", 192 | host_url = host_url, 193 | index_uid = index_uid, 194 | ); 195 | 196 | let chunk_json = serde_json::to_string(&chunk)?; 197 | 198 | let request = Request::put(url) 199 | .header("X-Meili-API-Key", &api_key) 200 | .header("Content-Type", "application/json") 201 | .body(chunk_json)?; 202 | 203 | let mut res = client.send_async(request).await?; 204 | let res = res.text()?; 205 | eprintln!("{}", res); 206 | } 207 | 208 | Ok(()) 209 | } 210 | --------------------------------------------------------------------------------