├── .gitignore ├── .dockerignore ├── src ├── main.rs ├── arg.rs └── lib.rs ├── Cargo.toml ├── Dockerfile ├── tests ├── main.rs └── album.html ├── README.md ├── .github └── workflows │ └── release.yml └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | pastebin.txt 3 | /cyberdrop-dl 4 | todo.txt 5 | LICENSE 6 | 1.txt 7 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | /target 2 | /cyberdrop-dl 3 | ./.git 4 | todo.txt 5 | 1.txt 6 | ./.gitignore 7 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use cyberdrop_dl::arg::parse_args; 2 | use cyberdrop_dl::download_albums; 3 | use std::error::Error; 4 | pub mod arg; 5 | 6 | const HELP: &str = r#"Usage: 7 | cyberdrop-dl https://cyberdrop.me/a/album1 8 | cyberdrop-dl https://cyberdrop.me/a/album1 https://cyberdrop.me/a/album2 9 | cyberdrop-dl albums.txt 10 | cyberdrop-dl album.txt https://cyberdrop.me/a/album album2.txt 11 | "#; 12 | 13 | #[tokio::main] 14 | async fn main() -> Result<(), Box> { 15 | let albums = parse_args().await?; 16 | if albums.len() == 0 { 17 | println!("{}", HELP); 18 | std::process::exit(1); 19 | } 20 | println!("Albums to download: {}", albums.len()); 21 | 22 | let job = tokio::spawn(async move { 23 | let _ = download_albums(albums).await; 24 | }); 25 | let _ = tokio::join!(job); 26 | println!("Done!"); 27 | Ok(()) 28 | } 29 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "cyberdrop-dl" 3 | version = "0.3.2" 4 | authors = ["wmw "] 5 | edition = "2018" 6 | description = "Cyberdrop.me album downloader written in Rust" 7 | readme = "README.md" 8 | homepage = "https://github.com/wmw9/cyberdrop-dl" 9 | repository = "https://github.com/wmw9/cyberdrop-dl" 10 | license = "MIT" 11 | keywords = ["cyberdrop", "downloader", "scraper"] 12 | categories = ["command-line-utilities"] 13 | 14 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 15 | 16 | [dependencies] 17 | reqwest = { version = "0.11", features = ["json"] } 18 | tokio = { version = "1", features = ["macros", "rt-multi-thread", "fs"] } 19 | scraper = "0.12.0" 20 | byte-unit = "4.0.12" 21 | indicatif = "0.16.2" 22 | url = "2.2.2" 23 | bytes = "1.0.1" 24 | futures = "0.3.15" 25 | openssl = { version = "0.10", features = ["vendored"] } 26 | [dev-dependencies] 27 | tokio-test = "0.4.2" 28 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # -*- mode: dockerfile -*- 2 | # 3 | # An example Dockerfile showing how to build a Rust executable using this 4 | # image, and deploy it with a tiny Alpine Linux container. 5 | 6 | # You can override this `--build-arg BASE_IMAGE=...` to use different 7 | # version of Rust or OpenSSL. 8 | ARG BASE_IMAGE=ekidd/rust-musl-builder:latest 9 | 10 | # Our first FROM statement declares the build environment. 11 | FROM ${BASE_IMAGE} AS builder 12 | 13 | # Add our source code. 14 | ADD --chown=rust:rust . ./ 15 | 16 | # Build our application. 17 | RUN cargo test 18 | 19 | # Build our application. 20 | RUN cargo build --release 21 | 22 | # Now, we need to build our _real_ Docker container, copying in `using-diesel`. 23 | FROM alpine:latest 24 | RUN apk --no-cache add ca-certificates 25 | COPY --from=builder \ 26 | /home/rust/src/target/x86_64-unknown-linux-musl/release/cyberdrop-dl \ 27 | /usr/local/bin/cyberdrop-dl 28 | 29 | #USER 1000:1000 30 | CMD /usr/loca/bin/cyberdrop-dl 31 | -------------------------------------------------------------------------------- /src/arg.rs: -------------------------------------------------------------------------------- 1 | use std::env; 2 | use std::error::Error; 3 | use tokio::io::{AsyncBufReadExt, BufReader}; 4 | 5 | pub async fn parse_args() -> Result, Box> { 6 | let args: Vec = env::args().skip(1).collect(); 7 | let mut albums = Vec::::new(); 8 | 9 | for a in args { 10 | if a.contains("http://") || a.contains("https://") { 11 | albums.push(a); 12 | } else { 13 | let file_lines: Vec = read_from_file(&a).await?; 14 | for l in file_lines { 15 | albums.push(l); 16 | } 17 | } 18 | } 19 | Ok(albums) 20 | } 21 | 22 | async fn read_from_file(fname: &String) -> Result, Box> { 23 | let mut albums = Vec::::new(); 24 | let file = tokio::fs::File::open(fname) 25 | .await 26 | .expect("Failed to open file"); 27 | 28 | let reader = BufReader::new(file); 29 | let mut lines = reader.lines(); 30 | while let Some(line) = lines.next_line().await.expect("Failed to read file") { 31 | albums.push(line); 32 | } 33 | Ok(albums) 34 | } 35 | -------------------------------------------------------------------------------- /tests/main.rs: -------------------------------------------------------------------------------- 1 | use cyberdrop_dl::get_album_images; 2 | use cyberdrop_dl::get_album_size; 3 | use cyberdrop_dl::get_album_title; 4 | use cyberdrop_dl::image_name_from_url; 5 | 6 | #[tokio::test] 7 | async fn test_image_name_from_url() { 8 | let url = String::from("https://fs-01.cyberdrop.cc/123.jpg"); 9 | let name = image_name_from_url(&url).await.unwrap(); 10 | assert_eq!(name, "/123.jpg") 11 | } 12 | 13 | #[tokio::test] 14 | async fn test_get_album_title() { 15 | let body = include_str!("album.html"); 16 | let result = get_album_title(&body).await.unwrap(); 17 | assert_eq!(result, "Test") 18 | } 19 | 20 | #[tokio::test] 21 | async fn test_get_album_size() { 22 | let body = include_str!("album.html"); 23 | let result = get_album_size(&body).await.unwrap(); 24 | assert_eq!(result, "447.75 KB") 25 | } 26 | 27 | #[tokio::test] 28 | async fn test_get_album_images() { 29 | let body = include_str!("album.html"); 30 | let vec = vec![ 31 | "https://fs-03.cyberdrop.to/1.jpeg".to_string(), 32 | "https://fs-03.cyberdrop.to/2.jpeg".to_string(), 33 | ]; 34 | let result = get_album_images(&body).await.unwrap(); 35 | assert_eq!(result, vec) 36 | } 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 📦🌏 cyberdrop-dl - cyberdrop.me Downloader written in Rust 🦀 2 | ![cyberdrop-dl_demo](https://user-images.githubusercontent.com/4693125/125909983-6306d4e3-e377-41f4-aaf6-f03134203613.gif) 3 | 4 | > The fastest https://cyberdrop.me album downloader there is, written in Rust as an exercise. 5 | 6 | ### Usage 7 | 8 | - Download **single album** 9 | ``` 10 | $ cyberdrop-dl https://cyberdrop.me/a/album1 11 | ``` 12 | - Download **multiple albums** 13 | ``` 14 | $ cyberdrop-downloader albums.txt 15 | ``` 16 | - or 17 | ``` 18 | $ cyberdrop-dl https://cyberdrop.me/a/album1 https://cyberdrop.me/a/album2 19 | ``` 20 | Files are saved in current working directory named './cyberdrop-dl'. 21 | 22 | ### How to install 23 | 24 | **Recomended. Install using cargo. You need Rust toolchain installed, get it here @ https://rustup.rs/** 25 | 26 | It's that simple 27 | ``` 28 | $ cargo install cyberdrop-dl 29 | ``` 30 | 31 | ## Docker 32 | 33 | No need to build and install via Docker 34 | 35 | ``` 36 | $ docker run -it --rm -v "$(pwd)"/cyberdrop-dl:/cyberdrop-dl:rw wmw9/cyberdrop-dl cyberdrop-dl https://cyberdrop.me/a/album 37 | ``` 38 | ### TODO 39 | - [x] Download multiple albums simultaneously 40 | - [x] Download multiple album files in parallel 41 | - [ ] Accept list of albums.txt via remote URL 42 | - [ ] Custom destination directory via -o flag 43 | - [ ] Integrate with Telegram Bot for easier usage 44 | - [ ] Detect dublicate albums 45 | 46 | # What I Learned 🧠 47 | - Tokio runtime (using channels, green threads, Arc<>, Semaphore) 48 | - HTML scraping 49 | - Terminal UI (multiple progress bars, spinners) 50 | - Async/Await 51 | - Async I/O 52 | - Working with filesystem 53 | - Rust basics (HTTP requests, args parsing, error handling) 54 | -------------------------------------------------------------------------------- /tests/album.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 |
8 |
9 |

10 | Test 11 |

12 |
13 | 14 | 28 | 29 | 30 |
31 | 32 |
33 | 34 | 1.jpeg 35 | 36 |
37 |

p-51.jpeg

38 | 39 |

6.51 KB

40 |
41 |
42 | 43 |
44 | 45 | 2.jpeg 46 | 47 |
48 |

p-51.jpeg

49 | 50 |

6.51 KB

51 |
52 |
53 |
54 |
55 |
56 | 57 | 58 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | # .github/workflows/release.yml 2 | name: release 3 | on: 4 | release: 5 | types: 6 | - created 7 | jobs: 8 | build-linux: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout 12 | uses: actions/checkout@v1 13 | - name: Setup 14 | uses: actions-rs/toolchain@v1 15 | with: 16 | toolchain: stable 17 | default: true 18 | override: true 19 | - name: Build 20 | uses: actions-rs/cargo@v1 21 | with: 22 | use-cross: true 23 | command: build 24 | args: --release --all 25 | - name: Post 26 | run: | 27 | strip target/release/cyberdrop-dl && chmod +x target/release/cyberdrop-dl && mv target/release/cyberdrop-dl . 28 | tar cvf ./cyberdrop-dl_linux_amd64.tar ./cyberdrop-dl 29 | zip ./cyberdrop-dl_linux_amd64.zip ./cyberdrop-dl 30 | - name: Release 31 | uses: softprops/action-gh-release@v1 32 | if: startsWith(github.ref, 'refs/tags/') 33 | with: 34 | files: | 35 | ./cyberdrop-dl_linux_amd64.tar 36 | ./cyberdrop-dl_linux_amd64.zip 37 | env: 38 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 39 | build-win: 40 | runs-on: windows-latest 41 | steps: 42 | - name: Checkout 43 | uses: actions/checkout@v1 44 | - name: Setup 45 | uses: actions-rs/toolchain@v1 46 | with: 47 | toolchain: stable 48 | default: true 49 | override: true 50 | - name: Build 51 | uses: actions-rs/cargo@v1 52 | with: 53 | use-cross: true 54 | command: build 55 | args: --release --all 56 | - name: Post 57 | run: | 58 | cd ./target/release/ && 7z a -tzip -mx=0 ../../cyberdrop-dl_windows.zip ./cyberdrop-dl.exe 59 | - name: Release 60 | uses: softprops/action-gh-release@v1 61 | if: startsWith(github.ref, 'refs/tags/') 62 | with: 63 | files: | 64 | ./cyberdrop-dl_windows.zip 65 | env: 66 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 67 | build-mac: 68 | runs-on: macos-latest 69 | steps: 70 | - name: Checkout 71 | uses: actions/checkout@v1 72 | - name: Setup 73 | uses: actions-rs/toolchain@v1 74 | with: 75 | toolchain: stable 76 | target: x86_64-apple-darwin 77 | default: true 78 | override: true 79 | - name: Build 80 | uses: actions-rs/cargo@v1 81 | with: 82 | use-cross: true 83 | command: build 84 | args: --release --all 85 | - name: Post 86 | run: | 87 | strip target/release/cyberdrop-dl && chmod +x target/release/cyberdrop-dl && mv target/release/cyberdrop-dl . 88 | tar cvf ./cyberdrop-dl_apple-darwin.tar ./cyberdrop-dl 89 | zip ./cyberdrop-dl_apple-darwin.zip ./cyberdrop-dl 90 | - name: Release 91 | uses: softprops/action-gh-release@v1 92 | if: startsWith(github.ref, 'refs/tags/') 93 | with: 94 | files: | 95 | ./cyberdrop-dl_apple-darwin.tar 96 | ./cyberdrop-dl_apple-darwin.zip 97 | env: 98 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 99 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | use byte_unit::Byte; 2 | use bytes::Bytes; 3 | use indicatif::{MultiProgress, ProgressBar, ProgressStyle}; 4 | use scraper::{Html, Selector}; 5 | use std::cmp::min; 6 | use std::convert::TryInto; 7 | use std::error::Error; 8 | use std::path::Path; 9 | use std::sync::Arc; 10 | use tokio::fs::File; 11 | use tokio::io; 12 | use tokio::sync::mpsc; 13 | use tokio::sync::Semaphore; 14 | pub mod arg; 15 | 16 | const DOWNLOAD_FOLDER: &str = "./cyberdrop.me"; // Folder to place all your downloaded albums. Warning: If files already exist they're being overwritten by default 17 | const H1: &str = "h1#title"; 18 | const TABLE: &str = "#table :nth-child(1) > span > a[href]"; 19 | const SIZE: &str = "body > section > div > nav > div:nth-child(2) > div > p.title"; 20 | const ALBUM_BATCH_SIZE: usize = 2; // If multiple albums, how many we want to download simultaneously. More -> faster. 21 | const IMAGES_BATCH_SIZE: usize = 6; // How many images in an album we want to download simultaneously. Be wary: setting higher could cause 'Connection reset by peer' or 'Too many open files'. 22 | 23 | #[derive(Debug)] 24 | enum Image { 25 | Image { 26 | name: String, 27 | path: String, 28 | size: u128, 29 | data: Bytes, 30 | }, 31 | } 32 | 33 | pub async fn download_albums(albums: Vec) -> Result<(), Box> { 34 | let mut handles = Vec::new(); 35 | let m = Arc::new(MultiProgress::new()); 36 | let m2 = m.clone(); 37 | let sty = ProgressStyle::default_bar() 38 | .template("{prefix:>12.cyan.bold} [{bar:.green} {msg}{pos}/{len}]") 39 | .progress_chars("█▒░"); 40 | let pb_main = Arc::new(m.add(ProgressBar::new(albums.len().try_into().unwrap()))); 41 | pb_main.set_style(sty.clone()); 42 | pb_main.set_prefix("Overall"); 43 | pb_main.tick(); 44 | 45 | // Workaround to multiple bars being rendered 46 | let multibar = { 47 | let multibar = m2.clone(); 48 | tokio::task::spawn_blocking(move || multibar.join()) 49 | }; 50 | 51 | let client = Arc::new( 52 | reqwest::Client::builder() 53 | .danger_accept_invalid_certs(true) 54 | .build()?, 55 | ); // Use one client for all requests 56 | let sem = Arc::new(Semaphore::new(ALBUM_BATCH_SIZE)); // Limit concurrent tasks 57 | 58 | for a in albums { 59 | let sem_clone = Arc::clone(&sem); 60 | let mb = m.clone(); 61 | let pb = pb_main.clone(); 62 | let c = client.clone(); 63 | handles.push(tokio::spawn(async move { 64 | let _permit = sem_clone.acquire().await.unwrap(); 65 | download_album(c, pb, mb, a.to_string()).await; 66 | })); 67 | } 68 | for h in handles { 69 | h.await.unwrap(); 70 | } 71 | pb_main.finish(); 72 | multibar.await??; 73 | Ok(()) 74 | } 75 | 76 | pub async fn download_album( 77 | client: Arc, 78 | pb_main: Arc, 79 | mb: Arc, 80 | url: String, 81 | ) -> Result<(), Box> { 82 | let (title, images, size) = crawl_album(&url).await?; 83 | let dir = format!("{}/{}", DOWNLOAD_FOLDER, title); 84 | let size = Byte::from_str(size).unwrap(); 85 | create_dir(&dir).await; 86 | let mut downloaded: u128 = 0; 87 | let total_size: u128 = size.get_bytes().try_into().unwrap(); 88 | let pb = mb.add(ProgressBar::new(total_size.try_into().unwrap())); 89 | pb.set_style(ProgressStyle::default_bar().template("{prefix:>10.cyan.bold} {spinner:.green} [{bar:.green} {msg}] {bytes}/{total_bytes} ({bytes_per_sec}, {eta}) ").progress_chars("█▒░")); 90 | pb.set_prefix(format!("{}", title)); 91 | 92 | let (tx, mut rx) = mpsc::channel(100); 93 | let sem = Arc::new(Semaphore::new(IMAGES_BATCH_SIZE)); 94 | let dir_arc = Arc::new(dir); 95 | 96 | for i in images { 97 | let sem_clone = Arc::clone(&sem); 98 | let dir = dir_arc.clone(); 99 | let client = client.clone(); 100 | let tx2 = tx.clone(); 101 | tokio::spawn(async move { 102 | let _permit = sem_clone.acquire().await.unwrap(); // Wait for free slot 103 | let (name, path, size, data) = download_image(&dir, &i, &client).await.unwrap(); 104 | let img = Image::Image { 105 | name: name.to_string(), 106 | path: path, 107 | size: size, 108 | data: data, 109 | }; 110 | tx2.send(img).await.unwrap(); 111 | drop(tx2); 112 | }); 113 | } 114 | drop(tx); 115 | 116 | let pb2 = pb.clone(); 117 | let manager = tokio::spawn(async move { 118 | while let Some(img) = rx.recv().await { 119 | match img { 120 | Image::Image { 121 | name, 122 | path, 123 | size, 124 | data, 125 | } => { 126 | let fname = name; 127 | let mut dest = path; 128 | dest.push_str(&fname); 129 | let mut reader: &[u8] = &data; 130 | let mut file = File::create(&dest).await.unwrap(); 131 | io::copy(&mut reader, &mut file).await.unwrap(); 132 | let new = min(downloaded + size, total_size); 133 | downloaded = new; 134 | pb2.set_position(new.try_into().unwrap()); 135 | } 136 | } 137 | } 138 | }); 139 | manager.await.unwrap(); // Start accepting files via channel 140 | pb.finish_with_message("✔️ "); // Mark it done 141 | pb_main.inc(1); // +1 for 'Overall' progress bar 142 | Ok(()) 143 | } 144 | 145 | pub async fn crawl_album(url: &String) -> Result<(String, Vec, String), Box> { 146 | let body = reqwest::get(url).await?.text().await?; 147 | let images = get_album_images(&body).await?; 148 | let title = get_album_title(&body).await?; 149 | let size = get_album_size(&body).await?; 150 | Ok((title, images, size)) 151 | } 152 | 153 | pub async fn get_album_images(body: &str) -> Result, Box> { 154 | let fragment = Html::parse_document(&body); 155 | let selector = Selector::parse(TABLE).unwrap(); 156 | let mut v = Vec::::new(); 157 | for elem in fragment.select(&selector) { 158 | v.push(elem.value().attr("href").unwrap().to_string()); 159 | } 160 | Ok(v) 161 | } 162 | 163 | pub async fn get_album_title(body: &str) -> Result> { 164 | let fragment = Html::parse_document(&body); 165 | let selector = Selector::parse(H1).unwrap(); 166 | let title = fragment 167 | .select(&selector) 168 | .next() 169 | .expect("album not found") 170 | .inner_html() 171 | .trim() 172 | .to_string(); 173 | Ok(title) 174 | } 175 | 176 | pub async fn get_album_size(body: &str) -> Result> { 177 | let fragment = Html::parse_document(&body); 178 | let selector = Selector::parse(SIZE).unwrap(); 179 | let title = fragment 180 | .select(&selector) 181 | .next() 182 | .unwrap() 183 | .inner_html() 184 | .trim() 185 | .to_string(); 186 | Ok(title) 187 | } 188 | 189 | async fn create_dir>(path: P) { 190 | tokio::fs::create_dir_all(path) 191 | .await 192 | .unwrap_or_else(|e| panic!("Error creating dir: {}", e)); 193 | } 194 | 195 | pub async fn download_image( 196 | dir: &String, 197 | url: &String, 198 | client: &reqwest::Client, 199 | ) -> Result<(String, String, u128, Bytes), Box> { 200 | let fname = image_name_from_url(url).await?; 201 | let path = dir.clone(); 202 | let resp = client.get(url).send().await?.bytes().await?; 203 | let size = resp.len(); 204 | Ok((fname, path, size.try_into().unwrap(), resp)) 205 | } 206 | 207 | pub async fn image_name_from_url(url: &String) -> Result> { 208 | let parsed_url = reqwest::Url::parse(url)?; 209 | Ok(parsed_url.path().to_string()) 210 | } 211 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "async-stream" 7 | version = "0.3.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625" 10 | dependencies = [ 11 | "async-stream-impl", 12 | "futures-core", 13 | ] 14 | 15 | [[package]] 16 | name = "async-stream-impl" 17 | version = "0.3.2" 18 | source = "registry+https://github.com/rust-lang/crates.io-index" 19 | checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" 20 | dependencies = [ 21 | "proc-macro2", 22 | "quote", 23 | "syn", 24 | ] 25 | 26 | [[package]] 27 | name = "autocfg" 28 | version = "1.0.1" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" 31 | 32 | [[package]] 33 | name = "base64" 34 | version = "0.13.0" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 37 | 38 | [[package]] 39 | name = "bitflags" 40 | version = "1.2.1" 41 | source = "registry+https://github.com/rust-lang/crates.io-index" 42 | checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 43 | 44 | [[package]] 45 | name = "bumpalo" 46 | version = "3.7.0" 47 | source = "registry+https://github.com/rust-lang/crates.io-index" 48 | checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" 49 | 50 | [[package]] 51 | name = "byte-unit" 52 | version = "4.0.12" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "063197e6eb4b775b64160dedde7a0986bb2836cce140e9492e9e96f28e18bcd8" 55 | dependencies = [ 56 | "utf8-width", 57 | ] 58 | 59 | [[package]] 60 | name = "byteorder" 61 | version = "1.4.3" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 64 | 65 | [[package]] 66 | name = "bytes" 67 | version = "1.0.1" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" 70 | 71 | [[package]] 72 | name = "cc" 73 | version = "1.0.68" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "4a72c244c1ff497a746a7e1fb3d14bd08420ecda70c8f25c7112f2781652d787" 76 | 77 | [[package]] 78 | name = "cfg-if" 79 | version = "1.0.0" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 82 | 83 | [[package]] 84 | name = "console" 85 | version = "0.14.1" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | checksum = "3993e6445baa160675931ec041a5e03ca84b9c6e32a056150d3aa2bdda0a1f45" 88 | dependencies = [ 89 | "encode_unicode", 90 | "lazy_static", 91 | "libc", 92 | "terminal_size", 93 | "winapi", 94 | ] 95 | 96 | [[package]] 97 | name = "convert_case" 98 | version = "0.4.0" 99 | source = "registry+https://github.com/rust-lang/crates.io-index" 100 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" 101 | 102 | [[package]] 103 | name = "core-foundation" 104 | version = "0.9.1" 105 | source = "registry+https://github.com/rust-lang/crates.io-index" 106 | checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" 107 | dependencies = [ 108 | "core-foundation-sys", 109 | "libc", 110 | ] 111 | 112 | [[package]] 113 | name = "core-foundation-sys" 114 | version = "0.8.2" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" 117 | 118 | [[package]] 119 | name = "cssparser" 120 | version = "0.27.2" 121 | source = "registry+https://github.com/rust-lang/crates.io-index" 122 | checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" 123 | dependencies = [ 124 | "cssparser-macros", 125 | "dtoa-short", 126 | "itoa", 127 | "matches", 128 | "phf", 129 | "proc-macro2", 130 | "quote", 131 | "smallvec", 132 | "syn", 133 | ] 134 | 135 | [[package]] 136 | name = "cssparser-macros" 137 | version = "0.6.0" 138 | source = "registry+https://github.com/rust-lang/crates.io-index" 139 | checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" 140 | dependencies = [ 141 | "quote", 142 | "syn", 143 | ] 144 | 145 | [[package]] 146 | name = "cyberdrop-dl" 147 | version = "0.3.2" 148 | dependencies = [ 149 | "byte-unit", 150 | "bytes", 151 | "futures", 152 | "indicatif", 153 | "openssl", 154 | "reqwest", 155 | "scraper", 156 | "tokio", 157 | "tokio-test", 158 | "url", 159 | ] 160 | 161 | [[package]] 162 | name = "derive_more" 163 | version = "0.99.14" 164 | source = "registry+https://github.com/rust-lang/crates.io-index" 165 | checksum = "5cc7b9cef1e351660e5443924e4f43ab25fbbed3e9a5f052df3677deb4d6b320" 166 | dependencies = [ 167 | "convert_case", 168 | "proc-macro2", 169 | "quote", 170 | "syn", 171 | ] 172 | 173 | [[package]] 174 | name = "dtoa" 175 | version = "0.4.8" 176 | source = "registry+https://github.com/rust-lang/crates.io-index" 177 | checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" 178 | 179 | [[package]] 180 | name = "dtoa-short" 181 | version = "0.3.3" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" 184 | dependencies = [ 185 | "dtoa", 186 | ] 187 | 188 | [[package]] 189 | name = "ego-tree" 190 | version = "0.6.2" 191 | source = "registry+https://github.com/rust-lang/crates.io-index" 192 | checksum = "3a68a4904193147e0a8dec3314640e6db742afd5f6e634f428a6af230d9b3591" 193 | 194 | [[package]] 195 | name = "encode_unicode" 196 | version = "0.3.6" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" 199 | 200 | [[package]] 201 | name = "encoding_rs" 202 | version = "0.8.28" 203 | source = "registry+https://github.com/rust-lang/crates.io-index" 204 | checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065" 205 | dependencies = [ 206 | "cfg-if", 207 | ] 208 | 209 | [[package]] 210 | name = "fnv" 211 | version = "1.0.7" 212 | source = "registry+https://github.com/rust-lang/crates.io-index" 213 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 214 | 215 | [[package]] 216 | name = "foreign-types" 217 | version = "0.3.2" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 220 | dependencies = [ 221 | "foreign-types-shared", 222 | ] 223 | 224 | [[package]] 225 | name = "foreign-types-shared" 226 | version = "0.1.1" 227 | source = "registry+https://github.com/rust-lang/crates.io-index" 228 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 229 | 230 | [[package]] 231 | name = "form_urlencoded" 232 | version = "1.0.1" 233 | source = "registry+https://github.com/rust-lang/crates.io-index" 234 | checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" 235 | dependencies = [ 236 | "matches", 237 | "percent-encoding", 238 | ] 239 | 240 | [[package]] 241 | name = "futf" 242 | version = "0.1.4" 243 | source = "registry+https://github.com/rust-lang/crates.io-index" 244 | checksum = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b" 245 | dependencies = [ 246 | "mac", 247 | "new_debug_unreachable", 248 | ] 249 | 250 | [[package]] 251 | name = "futures" 252 | version = "0.3.15" 253 | source = "registry+https://github.com/rust-lang/crates.io-index" 254 | checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27" 255 | dependencies = [ 256 | "futures-channel", 257 | "futures-core", 258 | "futures-executor", 259 | "futures-io", 260 | "futures-sink", 261 | "futures-task", 262 | "futures-util", 263 | ] 264 | 265 | [[package]] 266 | name = "futures-channel" 267 | version = "0.3.15" 268 | source = "registry+https://github.com/rust-lang/crates.io-index" 269 | checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2" 270 | dependencies = [ 271 | "futures-core", 272 | "futures-sink", 273 | ] 274 | 275 | [[package]] 276 | name = "futures-core" 277 | version = "0.3.15" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1" 280 | 281 | [[package]] 282 | name = "futures-executor" 283 | version = "0.3.15" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79" 286 | dependencies = [ 287 | "futures-core", 288 | "futures-task", 289 | "futures-util", 290 | ] 291 | 292 | [[package]] 293 | name = "futures-io" 294 | version = "0.3.15" 295 | source = "registry+https://github.com/rust-lang/crates.io-index" 296 | checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1" 297 | 298 | [[package]] 299 | name = "futures-macro" 300 | version = "0.3.15" 301 | source = "registry+https://github.com/rust-lang/crates.io-index" 302 | checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121" 303 | dependencies = [ 304 | "autocfg", 305 | "proc-macro-hack", 306 | "proc-macro2", 307 | "quote", 308 | "syn", 309 | ] 310 | 311 | [[package]] 312 | name = "futures-sink" 313 | version = "0.3.15" 314 | source = "registry+https://github.com/rust-lang/crates.io-index" 315 | checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282" 316 | 317 | [[package]] 318 | name = "futures-task" 319 | version = "0.3.15" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae" 322 | 323 | [[package]] 324 | name = "futures-util" 325 | version = "0.3.15" 326 | source = "registry+https://github.com/rust-lang/crates.io-index" 327 | checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967" 328 | dependencies = [ 329 | "autocfg", 330 | "futures-channel", 331 | "futures-core", 332 | "futures-io", 333 | "futures-macro", 334 | "futures-sink", 335 | "futures-task", 336 | "memchr", 337 | "pin-project-lite", 338 | "pin-utils", 339 | "proc-macro-hack", 340 | "proc-macro-nested", 341 | "slab", 342 | ] 343 | 344 | [[package]] 345 | name = "fxhash" 346 | version = "0.2.1" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" 349 | dependencies = [ 350 | "byteorder", 351 | ] 352 | 353 | [[package]] 354 | name = "getopts" 355 | version = "0.2.21" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" 358 | dependencies = [ 359 | "unicode-width", 360 | ] 361 | 362 | [[package]] 363 | name = "getrandom" 364 | version = "0.1.16" 365 | source = "registry+https://github.com/rust-lang/crates.io-index" 366 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 367 | dependencies = [ 368 | "cfg-if", 369 | "libc", 370 | "wasi 0.9.0+wasi-snapshot-preview1", 371 | ] 372 | 373 | [[package]] 374 | name = "getrandom" 375 | version = "0.2.3" 376 | source = "registry+https://github.com/rust-lang/crates.io-index" 377 | checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" 378 | dependencies = [ 379 | "cfg-if", 380 | "libc", 381 | "wasi 0.10.2+wasi-snapshot-preview1", 382 | ] 383 | 384 | [[package]] 385 | name = "h2" 386 | version = "0.3.3" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726" 389 | dependencies = [ 390 | "bytes", 391 | "fnv", 392 | "futures-core", 393 | "futures-sink", 394 | "futures-util", 395 | "http", 396 | "indexmap", 397 | "slab", 398 | "tokio", 399 | "tokio-util", 400 | "tracing", 401 | ] 402 | 403 | [[package]] 404 | name = "hashbrown" 405 | version = "0.11.2" 406 | source = "registry+https://github.com/rust-lang/crates.io-index" 407 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 408 | 409 | [[package]] 410 | name = "hermit-abi" 411 | version = "0.1.19" 412 | source = "registry+https://github.com/rust-lang/crates.io-index" 413 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 414 | dependencies = [ 415 | "libc", 416 | ] 417 | 418 | [[package]] 419 | name = "html5ever" 420 | version = "0.25.1" 421 | source = "registry+https://github.com/rust-lang/crates.io-index" 422 | checksum = "aafcf38a1a36118242d29b92e1b08ef84e67e4a5ed06e0a80be20e6a32bfed6b" 423 | dependencies = [ 424 | "log", 425 | "mac", 426 | "markup5ever", 427 | "proc-macro2", 428 | "quote", 429 | "syn", 430 | ] 431 | 432 | [[package]] 433 | name = "http" 434 | version = "0.2.4" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" 437 | dependencies = [ 438 | "bytes", 439 | "fnv", 440 | "itoa", 441 | ] 442 | 443 | [[package]] 444 | name = "http-body" 445 | version = "0.4.2" 446 | source = "registry+https://github.com/rust-lang/crates.io-index" 447 | checksum = "60daa14be0e0786db0f03a9e57cb404c9d756eed2b6c62b9ea98ec5743ec75a9" 448 | dependencies = [ 449 | "bytes", 450 | "http", 451 | "pin-project-lite", 452 | ] 453 | 454 | [[package]] 455 | name = "httparse" 456 | version = "1.4.1" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "f3a87b616e37e93c22fb19bcd386f02f3af5ea98a25670ad0fce773de23c5e68" 459 | 460 | [[package]] 461 | name = "httpdate" 462 | version = "1.0.1" 463 | source = "registry+https://github.com/rust-lang/crates.io-index" 464 | checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" 465 | 466 | [[package]] 467 | name = "hyper" 468 | version = "0.14.9" 469 | source = "registry+https://github.com/rust-lang/crates.io-index" 470 | checksum = "07d6baa1b441335f3ce5098ac421fb6547c46dda735ca1bc6d0153c838f9dd83" 471 | dependencies = [ 472 | "bytes", 473 | "futures-channel", 474 | "futures-core", 475 | "futures-util", 476 | "h2", 477 | "http", 478 | "http-body", 479 | "httparse", 480 | "httpdate", 481 | "itoa", 482 | "pin-project-lite", 483 | "socket2", 484 | "tokio", 485 | "tower-service", 486 | "tracing", 487 | "want", 488 | ] 489 | 490 | [[package]] 491 | name = "hyper-tls" 492 | version = "0.5.0" 493 | source = "registry+https://github.com/rust-lang/crates.io-index" 494 | checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" 495 | dependencies = [ 496 | "bytes", 497 | "hyper", 498 | "native-tls", 499 | "tokio", 500 | "tokio-native-tls", 501 | ] 502 | 503 | [[package]] 504 | name = "idna" 505 | version = "0.2.3" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" 508 | dependencies = [ 509 | "matches", 510 | "unicode-bidi", 511 | "unicode-normalization", 512 | ] 513 | 514 | [[package]] 515 | name = "indexmap" 516 | version = "1.7.0" 517 | source = "registry+https://github.com/rust-lang/crates.io-index" 518 | checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" 519 | dependencies = [ 520 | "autocfg", 521 | "hashbrown", 522 | ] 523 | 524 | [[package]] 525 | name = "indicatif" 526 | version = "0.16.2" 527 | source = "registry+https://github.com/rust-lang/crates.io-index" 528 | checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b" 529 | dependencies = [ 530 | "console", 531 | "lazy_static", 532 | "number_prefix", 533 | "regex", 534 | ] 535 | 536 | [[package]] 537 | name = "ipnet" 538 | version = "2.3.1" 539 | source = "registry+https://github.com/rust-lang/crates.io-index" 540 | checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" 541 | 542 | [[package]] 543 | name = "itoa" 544 | version = "0.4.7" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" 547 | 548 | [[package]] 549 | name = "js-sys" 550 | version = "0.3.51" 551 | source = "registry+https://github.com/rust-lang/crates.io-index" 552 | checksum = "83bdfbace3a0e81a4253f73b49e960b053e396a11012cbd49b9b74d6a2b67062" 553 | dependencies = [ 554 | "wasm-bindgen", 555 | ] 556 | 557 | [[package]] 558 | name = "lazy_static" 559 | version = "1.4.0" 560 | source = "registry+https://github.com/rust-lang/crates.io-index" 561 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 562 | 563 | [[package]] 564 | name = "libc" 565 | version = "0.2.97" 566 | source = "registry+https://github.com/rust-lang/crates.io-index" 567 | checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6" 568 | 569 | [[package]] 570 | name = "log" 571 | version = "0.4.14" 572 | source = "registry+https://github.com/rust-lang/crates.io-index" 573 | checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" 574 | dependencies = [ 575 | "cfg-if", 576 | ] 577 | 578 | [[package]] 579 | name = "mac" 580 | version = "0.1.1" 581 | source = "registry+https://github.com/rust-lang/crates.io-index" 582 | checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 583 | 584 | [[package]] 585 | name = "markup5ever" 586 | version = "0.10.1" 587 | source = "registry+https://github.com/rust-lang/crates.io-index" 588 | checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" 589 | dependencies = [ 590 | "log", 591 | "phf", 592 | "phf_codegen", 593 | "string_cache", 594 | "string_cache_codegen", 595 | "tendril", 596 | ] 597 | 598 | [[package]] 599 | name = "matches" 600 | version = "0.1.8" 601 | source = "registry+https://github.com/rust-lang/crates.io-index" 602 | checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" 603 | 604 | [[package]] 605 | name = "memchr" 606 | version = "2.4.0" 607 | source = "registry+https://github.com/rust-lang/crates.io-index" 608 | checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" 609 | 610 | [[package]] 611 | name = "mime" 612 | version = "0.3.16" 613 | source = "registry+https://github.com/rust-lang/crates.io-index" 614 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 615 | 616 | [[package]] 617 | name = "mio" 618 | version = "0.7.13" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16" 621 | dependencies = [ 622 | "libc", 623 | "log", 624 | "miow", 625 | "ntapi", 626 | "winapi", 627 | ] 628 | 629 | [[package]] 630 | name = "miow" 631 | version = "0.3.7" 632 | source = "registry+https://github.com/rust-lang/crates.io-index" 633 | checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" 634 | dependencies = [ 635 | "winapi", 636 | ] 637 | 638 | [[package]] 639 | name = "native-tls" 640 | version = "0.2.7" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "b8d96b2e1c8da3957d58100b09f102c6d9cfdfced01b7ec5a8974044bb09dbd4" 643 | dependencies = [ 644 | "lazy_static", 645 | "libc", 646 | "log", 647 | "openssl", 648 | "openssl-probe", 649 | "openssl-sys", 650 | "schannel", 651 | "security-framework", 652 | "security-framework-sys", 653 | "tempfile", 654 | ] 655 | 656 | [[package]] 657 | name = "new_debug_unreachable" 658 | version = "1.0.4" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" 661 | 662 | [[package]] 663 | name = "nodrop" 664 | version = "0.1.14" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" 667 | 668 | [[package]] 669 | name = "ntapi" 670 | version = "0.3.6" 671 | source = "registry+https://github.com/rust-lang/crates.io-index" 672 | checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" 673 | dependencies = [ 674 | "winapi", 675 | ] 676 | 677 | [[package]] 678 | name = "num_cpus" 679 | version = "1.13.0" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" 682 | dependencies = [ 683 | "hermit-abi", 684 | "libc", 685 | ] 686 | 687 | [[package]] 688 | name = "number_prefix" 689 | version = "0.4.0" 690 | source = "registry+https://github.com/rust-lang/crates.io-index" 691 | checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" 692 | 693 | [[package]] 694 | name = "once_cell" 695 | version = "1.8.0" 696 | source = "registry+https://github.com/rust-lang/crates.io-index" 697 | checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" 698 | 699 | [[package]] 700 | name = "openssl" 701 | version = "0.10.35" 702 | source = "registry+https://github.com/rust-lang/crates.io-index" 703 | checksum = "549430950c79ae24e6d02e0b7404534ecf311d94cc9f861e9e4020187d13d885" 704 | dependencies = [ 705 | "bitflags", 706 | "cfg-if", 707 | "foreign-types", 708 | "libc", 709 | "once_cell", 710 | "openssl-sys", 711 | ] 712 | 713 | [[package]] 714 | name = "openssl-probe" 715 | version = "0.1.4" 716 | source = "registry+https://github.com/rust-lang/crates.io-index" 717 | checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" 718 | 719 | [[package]] 720 | name = "openssl-src" 721 | version = "111.16.0+1.1.1l" 722 | source = "registry+https://github.com/rust-lang/crates.io-index" 723 | checksum = "7ab2173f69416cf3ec12debb5823d244127d23a9b127d5a5189aa97c5fa2859f" 724 | dependencies = [ 725 | "cc", 726 | ] 727 | 728 | [[package]] 729 | name = "openssl-sys" 730 | version = "0.9.65" 731 | source = "registry+https://github.com/rust-lang/crates.io-index" 732 | checksum = "7a7907e3bfa08bb85105209cdfcb6c63d109f8f6c1ed6ca318fff5c1853fbc1d" 733 | dependencies = [ 734 | "autocfg", 735 | "cc", 736 | "libc", 737 | "openssl-src", 738 | "pkg-config", 739 | "vcpkg", 740 | ] 741 | 742 | [[package]] 743 | name = "percent-encoding" 744 | version = "2.1.0" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 747 | 748 | [[package]] 749 | name = "phf" 750 | version = "0.8.0" 751 | source = "registry+https://github.com/rust-lang/crates.io-index" 752 | checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" 753 | dependencies = [ 754 | "phf_macros", 755 | "phf_shared", 756 | "proc-macro-hack", 757 | ] 758 | 759 | [[package]] 760 | name = "phf_codegen" 761 | version = "0.8.0" 762 | source = "registry+https://github.com/rust-lang/crates.io-index" 763 | checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" 764 | dependencies = [ 765 | "phf_generator", 766 | "phf_shared", 767 | ] 768 | 769 | [[package]] 770 | name = "phf_generator" 771 | version = "0.8.0" 772 | source = "registry+https://github.com/rust-lang/crates.io-index" 773 | checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" 774 | dependencies = [ 775 | "phf_shared", 776 | "rand 0.7.3", 777 | ] 778 | 779 | [[package]] 780 | name = "phf_macros" 781 | version = "0.8.0" 782 | source = "registry+https://github.com/rust-lang/crates.io-index" 783 | checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" 784 | dependencies = [ 785 | "phf_generator", 786 | "phf_shared", 787 | "proc-macro-hack", 788 | "proc-macro2", 789 | "quote", 790 | "syn", 791 | ] 792 | 793 | [[package]] 794 | name = "phf_shared" 795 | version = "0.8.0" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" 798 | dependencies = [ 799 | "siphasher", 800 | ] 801 | 802 | [[package]] 803 | name = "pin-project-lite" 804 | version = "0.2.7" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" 807 | 808 | [[package]] 809 | name = "pin-utils" 810 | version = "0.1.0" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 813 | 814 | [[package]] 815 | name = "pkg-config" 816 | version = "0.3.19" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" 819 | 820 | [[package]] 821 | name = "ppv-lite86" 822 | version = "0.2.10" 823 | source = "registry+https://github.com/rust-lang/crates.io-index" 824 | checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" 825 | 826 | [[package]] 827 | name = "precomputed-hash" 828 | version = "0.1.1" 829 | source = "registry+https://github.com/rust-lang/crates.io-index" 830 | checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 831 | 832 | [[package]] 833 | name = "proc-macro-hack" 834 | version = "0.5.19" 835 | source = "registry+https://github.com/rust-lang/crates.io-index" 836 | checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" 837 | 838 | [[package]] 839 | name = "proc-macro-nested" 840 | version = "0.1.7" 841 | source = "registry+https://github.com/rust-lang/crates.io-index" 842 | checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" 843 | 844 | [[package]] 845 | name = "proc-macro2" 846 | version = "1.0.27" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038" 849 | dependencies = [ 850 | "unicode-xid", 851 | ] 852 | 853 | [[package]] 854 | name = "quote" 855 | version = "1.0.9" 856 | source = "registry+https://github.com/rust-lang/crates.io-index" 857 | checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" 858 | dependencies = [ 859 | "proc-macro2", 860 | ] 861 | 862 | [[package]] 863 | name = "rand" 864 | version = "0.7.3" 865 | source = "registry+https://github.com/rust-lang/crates.io-index" 866 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 867 | dependencies = [ 868 | "getrandom 0.1.16", 869 | "libc", 870 | "rand_chacha 0.2.2", 871 | "rand_core 0.5.1", 872 | "rand_hc 0.2.0", 873 | "rand_pcg", 874 | ] 875 | 876 | [[package]] 877 | name = "rand" 878 | version = "0.8.4" 879 | source = "registry+https://github.com/rust-lang/crates.io-index" 880 | checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" 881 | dependencies = [ 882 | "libc", 883 | "rand_chacha 0.3.1", 884 | "rand_core 0.6.3", 885 | "rand_hc 0.3.1", 886 | ] 887 | 888 | [[package]] 889 | name = "rand_chacha" 890 | version = "0.2.2" 891 | source = "registry+https://github.com/rust-lang/crates.io-index" 892 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 893 | dependencies = [ 894 | "ppv-lite86", 895 | "rand_core 0.5.1", 896 | ] 897 | 898 | [[package]] 899 | name = "rand_chacha" 900 | version = "0.3.1" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 903 | dependencies = [ 904 | "ppv-lite86", 905 | "rand_core 0.6.3", 906 | ] 907 | 908 | [[package]] 909 | name = "rand_core" 910 | version = "0.5.1" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 913 | dependencies = [ 914 | "getrandom 0.1.16", 915 | ] 916 | 917 | [[package]] 918 | name = "rand_core" 919 | version = "0.6.3" 920 | source = "registry+https://github.com/rust-lang/crates.io-index" 921 | checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" 922 | dependencies = [ 923 | "getrandom 0.2.3", 924 | ] 925 | 926 | [[package]] 927 | name = "rand_hc" 928 | version = "0.2.0" 929 | source = "registry+https://github.com/rust-lang/crates.io-index" 930 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 931 | dependencies = [ 932 | "rand_core 0.5.1", 933 | ] 934 | 935 | [[package]] 936 | name = "rand_hc" 937 | version = "0.3.1" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" 940 | dependencies = [ 941 | "rand_core 0.6.3", 942 | ] 943 | 944 | [[package]] 945 | name = "rand_pcg" 946 | version = "0.2.1" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" 949 | dependencies = [ 950 | "rand_core 0.5.1", 951 | ] 952 | 953 | [[package]] 954 | name = "redox_syscall" 955 | version = "0.2.9" 956 | source = "registry+https://github.com/rust-lang/crates.io-index" 957 | checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee" 958 | dependencies = [ 959 | "bitflags", 960 | ] 961 | 962 | [[package]] 963 | name = "regex" 964 | version = "1.5.4" 965 | source = "registry+https://github.com/rust-lang/crates.io-index" 966 | checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" 967 | dependencies = [ 968 | "regex-syntax", 969 | ] 970 | 971 | [[package]] 972 | name = "regex-syntax" 973 | version = "0.6.25" 974 | source = "registry+https://github.com/rust-lang/crates.io-index" 975 | checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" 976 | 977 | [[package]] 978 | name = "remove_dir_all" 979 | version = "0.5.3" 980 | source = "registry+https://github.com/rust-lang/crates.io-index" 981 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" 982 | dependencies = [ 983 | "winapi", 984 | ] 985 | 986 | [[package]] 987 | name = "reqwest" 988 | version = "0.11.4" 989 | source = "registry+https://github.com/rust-lang/crates.io-index" 990 | checksum = "246e9f61b9bb77df069a947682be06e31ac43ea37862e244a69f177694ea6d22" 991 | dependencies = [ 992 | "base64", 993 | "bytes", 994 | "encoding_rs", 995 | "futures-core", 996 | "futures-util", 997 | "http", 998 | "http-body", 999 | "hyper", 1000 | "hyper-tls", 1001 | "ipnet", 1002 | "js-sys", 1003 | "lazy_static", 1004 | "log", 1005 | "mime", 1006 | "native-tls", 1007 | "percent-encoding", 1008 | "pin-project-lite", 1009 | "serde", 1010 | "serde_json", 1011 | "serde_urlencoded", 1012 | "tokio", 1013 | "tokio-native-tls", 1014 | "url", 1015 | "wasm-bindgen", 1016 | "wasm-bindgen-futures", 1017 | "web-sys", 1018 | "winreg", 1019 | ] 1020 | 1021 | [[package]] 1022 | name = "ryu" 1023 | version = "1.0.5" 1024 | source = "registry+https://github.com/rust-lang/crates.io-index" 1025 | checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" 1026 | 1027 | [[package]] 1028 | name = "schannel" 1029 | version = "0.1.19" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" 1032 | dependencies = [ 1033 | "lazy_static", 1034 | "winapi", 1035 | ] 1036 | 1037 | [[package]] 1038 | name = "scraper" 1039 | version = "0.12.0" 1040 | source = "registry+https://github.com/rust-lang/crates.io-index" 1041 | checksum = "48e02aa790c80c2e494130dec6a522033b6a23603ffc06360e9fe6c611ea2c12" 1042 | dependencies = [ 1043 | "cssparser", 1044 | "ego-tree", 1045 | "getopts", 1046 | "html5ever", 1047 | "matches", 1048 | "selectors", 1049 | "smallvec", 1050 | "tendril", 1051 | ] 1052 | 1053 | [[package]] 1054 | name = "security-framework" 1055 | version = "2.3.1" 1056 | source = "registry+https://github.com/rust-lang/crates.io-index" 1057 | checksum = "23a2ac85147a3a11d77ecf1bc7166ec0b92febfa4461c37944e180f319ece467" 1058 | dependencies = [ 1059 | "bitflags", 1060 | "core-foundation", 1061 | "core-foundation-sys", 1062 | "libc", 1063 | "security-framework-sys", 1064 | ] 1065 | 1066 | [[package]] 1067 | name = "security-framework-sys" 1068 | version = "2.3.0" 1069 | source = "registry+https://github.com/rust-lang/crates.io-index" 1070 | checksum = "7e4effb91b4b8b6fb7732e670b6cee160278ff8e6bf485c7805d9e319d76e284" 1071 | dependencies = [ 1072 | "core-foundation-sys", 1073 | "libc", 1074 | ] 1075 | 1076 | [[package]] 1077 | name = "selectors" 1078 | version = "0.22.0" 1079 | source = "registry+https://github.com/rust-lang/crates.io-index" 1080 | checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" 1081 | dependencies = [ 1082 | "bitflags", 1083 | "cssparser", 1084 | "derive_more", 1085 | "fxhash", 1086 | "log", 1087 | "matches", 1088 | "phf", 1089 | "phf_codegen", 1090 | "precomputed-hash", 1091 | "servo_arc", 1092 | "smallvec", 1093 | "thin-slice", 1094 | ] 1095 | 1096 | [[package]] 1097 | name = "serde" 1098 | version = "1.0.126" 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" 1100 | checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03" 1101 | 1102 | [[package]] 1103 | name = "serde_json" 1104 | version = "1.0.64" 1105 | source = "registry+https://github.com/rust-lang/crates.io-index" 1106 | checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" 1107 | dependencies = [ 1108 | "itoa", 1109 | "ryu", 1110 | "serde", 1111 | ] 1112 | 1113 | [[package]] 1114 | name = "serde_urlencoded" 1115 | version = "0.7.0" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" 1118 | dependencies = [ 1119 | "form_urlencoded", 1120 | "itoa", 1121 | "ryu", 1122 | "serde", 1123 | ] 1124 | 1125 | [[package]] 1126 | name = "servo_arc" 1127 | version = "0.1.1" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" 1130 | dependencies = [ 1131 | "nodrop", 1132 | "stable_deref_trait", 1133 | ] 1134 | 1135 | [[package]] 1136 | name = "siphasher" 1137 | version = "0.3.5" 1138 | source = "registry+https://github.com/rust-lang/crates.io-index" 1139 | checksum = "cbce6d4507c7e4a3962091436e56e95290cb71fa302d0d270e32130b75fbff27" 1140 | 1141 | [[package]] 1142 | name = "slab" 1143 | version = "0.4.3" 1144 | source = "registry+https://github.com/rust-lang/crates.io-index" 1145 | checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527" 1146 | 1147 | [[package]] 1148 | name = "smallvec" 1149 | version = "1.6.1" 1150 | source = "registry+https://github.com/rust-lang/crates.io-index" 1151 | checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" 1152 | 1153 | [[package]] 1154 | name = "socket2" 1155 | version = "0.4.0" 1156 | source = "registry+https://github.com/rust-lang/crates.io-index" 1157 | checksum = "9e3dfc207c526015c632472a77be09cf1b6e46866581aecae5cc38fb4235dea2" 1158 | dependencies = [ 1159 | "libc", 1160 | "winapi", 1161 | ] 1162 | 1163 | [[package]] 1164 | name = "stable_deref_trait" 1165 | version = "1.2.0" 1166 | source = "registry+https://github.com/rust-lang/crates.io-index" 1167 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1168 | 1169 | [[package]] 1170 | name = "string_cache" 1171 | version = "0.8.1" 1172 | source = "registry+https://github.com/rust-lang/crates.io-index" 1173 | checksum = "8ddb1139b5353f96e429e1a5e19fbaf663bddedaa06d1dbd49f82e352601209a" 1174 | dependencies = [ 1175 | "lazy_static", 1176 | "new_debug_unreachable", 1177 | "phf_shared", 1178 | "precomputed-hash", 1179 | "serde", 1180 | ] 1181 | 1182 | [[package]] 1183 | name = "string_cache_codegen" 1184 | version = "0.5.1" 1185 | source = "registry+https://github.com/rust-lang/crates.io-index" 1186 | checksum = "f24c8e5e19d22a726626f1a5e16fe15b132dcf21d10177fa5a45ce7962996b97" 1187 | dependencies = [ 1188 | "phf_generator", 1189 | "phf_shared", 1190 | "proc-macro2", 1191 | "quote", 1192 | ] 1193 | 1194 | [[package]] 1195 | name = "syn" 1196 | version = "1.0.73" 1197 | source = "registry+https://github.com/rust-lang/crates.io-index" 1198 | checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7" 1199 | dependencies = [ 1200 | "proc-macro2", 1201 | "quote", 1202 | "unicode-xid", 1203 | ] 1204 | 1205 | [[package]] 1206 | name = "tempfile" 1207 | version = "3.2.0" 1208 | source = "registry+https://github.com/rust-lang/crates.io-index" 1209 | checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" 1210 | dependencies = [ 1211 | "cfg-if", 1212 | "libc", 1213 | "rand 0.8.4", 1214 | "redox_syscall", 1215 | "remove_dir_all", 1216 | "winapi", 1217 | ] 1218 | 1219 | [[package]] 1220 | name = "tendril" 1221 | version = "0.4.2" 1222 | source = "registry+https://github.com/rust-lang/crates.io-index" 1223 | checksum = "a9ef557cb397a4f0a5a3a628f06515f78563f2209e64d47055d9dc6052bf5e33" 1224 | dependencies = [ 1225 | "futf", 1226 | "mac", 1227 | "utf-8", 1228 | ] 1229 | 1230 | [[package]] 1231 | name = "terminal_size" 1232 | version = "0.1.17" 1233 | source = "registry+https://github.com/rust-lang/crates.io-index" 1234 | checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" 1235 | dependencies = [ 1236 | "libc", 1237 | "winapi", 1238 | ] 1239 | 1240 | [[package]] 1241 | name = "thin-slice" 1242 | version = "0.1.1" 1243 | source = "registry+https://github.com/rust-lang/crates.io-index" 1244 | checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" 1245 | 1246 | [[package]] 1247 | name = "tinyvec" 1248 | version = "1.2.0" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342" 1251 | dependencies = [ 1252 | "tinyvec_macros", 1253 | ] 1254 | 1255 | [[package]] 1256 | name = "tinyvec_macros" 1257 | version = "0.1.0" 1258 | source = "registry+https://github.com/rust-lang/crates.io-index" 1259 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 1260 | 1261 | [[package]] 1262 | name = "tokio" 1263 | version = "1.7.1" 1264 | source = "registry+https://github.com/rust-lang/crates.io-index" 1265 | checksum = "5fb2ed024293bb19f7a5dc54fe83bf86532a44c12a2bb8ba40d64a4509395ca2" 1266 | dependencies = [ 1267 | "autocfg", 1268 | "bytes", 1269 | "libc", 1270 | "memchr", 1271 | "mio", 1272 | "num_cpus", 1273 | "pin-project-lite", 1274 | "tokio-macros", 1275 | "winapi", 1276 | ] 1277 | 1278 | [[package]] 1279 | name = "tokio-macros" 1280 | version = "1.3.0" 1281 | source = "registry+https://github.com/rust-lang/crates.io-index" 1282 | checksum = "54473be61f4ebe4efd09cec9bd5d16fa51d70ea0192213d754d2d500457db110" 1283 | dependencies = [ 1284 | "proc-macro2", 1285 | "quote", 1286 | "syn", 1287 | ] 1288 | 1289 | [[package]] 1290 | name = "tokio-native-tls" 1291 | version = "0.3.0" 1292 | source = "registry+https://github.com/rust-lang/crates.io-index" 1293 | checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" 1294 | dependencies = [ 1295 | "native-tls", 1296 | "tokio", 1297 | ] 1298 | 1299 | [[package]] 1300 | name = "tokio-stream" 1301 | version = "0.1.6" 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" 1303 | checksum = "f8864d706fdb3cc0843a49647ac892720dac98a6eeb818b77190592cf4994066" 1304 | dependencies = [ 1305 | "futures-core", 1306 | "pin-project-lite", 1307 | "tokio", 1308 | ] 1309 | 1310 | [[package]] 1311 | name = "tokio-test" 1312 | version = "0.4.2" 1313 | source = "registry+https://github.com/rust-lang/crates.io-index" 1314 | checksum = "53474327ae5e166530d17f2d956afcb4f8a004de581b3cae10f12006bc8163e3" 1315 | dependencies = [ 1316 | "async-stream", 1317 | "bytes", 1318 | "futures-core", 1319 | "tokio", 1320 | "tokio-stream", 1321 | ] 1322 | 1323 | [[package]] 1324 | name = "tokio-util" 1325 | version = "0.6.7" 1326 | source = "registry+https://github.com/rust-lang/crates.io-index" 1327 | checksum = "1caa0b0c8d94a049db56b5acf8cba99dc0623aab1b26d5b5f5e2d945846b3592" 1328 | dependencies = [ 1329 | "bytes", 1330 | "futures-core", 1331 | "futures-sink", 1332 | "log", 1333 | "pin-project-lite", 1334 | "tokio", 1335 | ] 1336 | 1337 | [[package]] 1338 | name = "tower-service" 1339 | version = "0.3.1" 1340 | source = "registry+https://github.com/rust-lang/crates.io-index" 1341 | checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" 1342 | 1343 | [[package]] 1344 | name = "tracing" 1345 | version = "0.1.26" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d" 1348 | dependencies = [ 1349 | "cfg-if", 1350 | "pin-project-lite", 1351 | "tracing-core", 1352 | ] 1353 | 1354 | [[package]] 1355 | name = "tracing-core" 1356 | version = "0.1.18" 1357 | source = "registry+https://github.com/rust-lang/crates.io-index" 1358 | checksum = "a9ff14f98b1a4b289c6248a023c1c2fa1491062964e9fed67ab29c4e4da4a052" 1359 | dependencies = [ 1360 | "lazy_static", 1361 | ] 1362 | 1363 | [[package]] 1364 | name = "try-lock" 1365 | version = "0.2.3" 1366 | source = "registry+https://github.com/rust-lang/crates.io-index" 1367 | checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" 1368 | 1369 | [[package]] 1370 | name = "unicode-bidi" 1371 | version = "0.3.5" 1372 | source = "registry+https://github.com/rust-lang/crates.io-index" 1373 | checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0" 1374 | dependencies = [ 1375 | "matches", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "unicode-normalization" 1380 | version = "0.1.19" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" 1383 | dependencies = [ 1384 | "tinyvec", 1385 | ] 1386 | 1387 | [[package]] 1388 | name = "unicode-width" 1389 | version = "0.1.8" 1390 | source = "registry+https://github.com/rust-lang/crates.io-index" 1391 | checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" 1392 | 1393 | [[package]] 1394 | name = "unicode-xid" 1395 | version = "0.2.2" 1396 | source = "registry+https://github.com/rust-lang/crates.io-index" 1397 | checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" 1398 | 1399 | [[package]] 1400 | name = "url" 1401 | version = "2.2.2" 1402 | source = "registry+https://github.com/rust-lang/crates.io-index" 1403 | checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" 1404 | dependencies = [ 1405 | "form_urlencoded", 1406 | "idna", 1407 | "matches", 1408 | "percent-encoding", 1409 | ] 1410 | 1411 | [[package]] 1412 | name = "utf-8" 1413 | version = "0.7.6" 1414 | source = "registry+https://github.com/rust-lang/crates.io-index" 1415 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 1416 | 1417 | [[package]] 1418 | name = "utf8-width" 1419 | version = "0.1.5" 1420 | source = "registry+https://github.com/rust-lang/crates.io-index" 1421 | checksum = "7cf7d77f457ef8dfa11e4cd5933c5ddb5dc52a94664071951219a97710f0a32b" 1422 | 1423 | [[package]] 1424 | name = "vcpkg" 1425 | version = "0.2.15" 1426 | source = "registry+https://github.com/rust-lang/crates.io-index" 1427 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1428 | 1429 | [[package]] 1430 | name = "want" 1431 | version = "0.3.0" 1432 | source = "registry+https://github.com/rust-lang/crates.io-index" 1433 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" 1434 | dependencies = [ 1435 | "log", 1436 | "try-lock", 1437 | ] 1438 | 1439 | [[package]] 1440 | name = "wasi" 1441 | version = "0.9.0+wasi-snapshot-preview1" 1442 | source = "registry+https://github.com/rust-lang/crates.io-index" 1443 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 1444 | 1445 | [[package]] 1446 | name = "wasi" 1447 | version = "0.10.2+wasi-snapshot-preview1" 1448 | source = "registry+https://github.com/rust-lang/crates.io-index" 1449 | checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" 1450 | 1451 | [[package]] 1452 | name = "wasm-bindgen" 1453 | version = "0.2.74" 1454 | source = "registry+https://github.com/rust-lang/crates.io-index" 1455 | checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd" 1456 | dependencies = [ 1457 | "cfg-if", 1458 | "serde", 1459 | "serde_json", 1460 | "wasm-bindgen-macro", 1461 | ] 1462 | 1463 | [[package]] 1464 | name = "wasm-bindgen-backend" 1465 | version = "0.2.74" 1466 | source = "registry+https://github.com/rust-lang/crates.io-index" 1467 | checksum = "3b33f6a0694ccfea53d94db8b2ed1c3a8a4c86dd936b13b9f0a15ec4a451b900" 1468 | dependencies = [ 1469 | "bumpalo", 1470 | "lazy_static", 1471 | "log", 1472 | "proc-macro2", 1473 | "quote", 1474 | "syn", 1475 | "wasm-bindgen-shared", 1476 | ] 1477 | 1478 | [[package]] 1479 | name = "wasm-bindgen-futures" 1480 | version = "0.4.24" 1481 | source = "registry+https://github.com/rust-lang/crates.io-index" 1482 | checksum = "5fba7978c679d53ce2d0ac80c8c175840feb849a161664365d1287b41f2e67f1" 1483 | dependencies = [ 1484 | "cfg-if", 1485 | "js-sys", 1486 | "wasm-bindgen", 1487 | "web-sys", 1488 | ] 1489 | 1490 | [[package]] 1491 | name = "wasm-bindgen-macro" 1492 | version = "0.2.74" 1493 | source = "registry+https://github.com/rust-lang/crates.io-index" 1494 | checksum = "088169ca61430fe1e58b8096c24975251700e7b1f6fd91cc9d59b04fb9b18bd4" 1495 | dependencies = [ 1496 | "quote", 1497 | "wasm-bindgen-macro-support", 1498 | ] 1499 | 1500 | [[package]] 1501 | name = "wasm-bindgen-macro-support" 1502 | version = "0.2.74" 1503 | source = "registry+https://github.com/rust-lang/crates.io-index" 1504 | checksum = "be2241542ff3d9f241f5e2cb6dd09b37efe786df8851c54957683a49f0987a97" 1505 | dependencies = [ 1506 | "proc-macro2", 1507 | "quote", 1508 | "syn", 1509 | "wasm-bindgen-backend", 1510 | "wasm-bindgen-shared", 1511 | ] 1512 | 1513 | [[package]] 1514 | name = "wasm-bindgen-shared" 1515 | version = "0.2.74" 1516 | source = "registry+https://github.com/rust-lang/crates.io-index" 1517 | checksum = "d7cff876b8f18eed75a66cf49b65e7f967cb354a7aa16003fb55dbfd25b44b4f" 1518 | 1519 | [[package]] 1520 | name = "web-sys" 1521 | version = "0.3.51" 1522 | source = "registry+https://github.com/rust-lang/crates.io-index" 1523 | checksum = "e828417b379f3df7111d3a2a9e5753706cae29c41f7c4029ee9fd77f3e09e582" 1524 | dependencies = [ 1525 | "js-sys", 1526 | "wasm-bindgen", 1527 | ] 1528 | 1529 | [[package]] 1530 | name = "winapi" 1531 | version = "0.3.9" 1532 | source = "registry+https://github.com/rust-lang/crates.io-index" 1533 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1534 | dependencies = [ 1535 | "winapi-i686-pc-windows-gnu", 1536 | "winapi-x86_64-pc-windows-gnu", 1537 | ] 1538 | 1539 | [[package]] 1540 | name = "winapi-i686-pc-windows-gnu" 1541 | version = "0.4.0" 1542 | source = "registry+https://github.com/rust-lang/crates.io-index" 1543 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1544 | 1545 | [[package]] 1546 | name = "winapi-x86_64-pc-windows-gnu" 1547 | version = "0.4.0" 1548 | source = "registry+https://github.com/rust-lang/crates.io-index" 1549 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1550 | 1551 | [[package]] 1552 | name = "winreg" 1553 | version = "0.7.0" 1554 | source = "registry+https://github.com/rust-lang/crates.io-index" 1555 | checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" 1556 | dependencies = [ 1557 | "winapi", 1558 | ] 1559 | --------------------------------------------------------------------------------