├── Rustfmt.toml ├── .gitignore ├── Cargo.toml ├── LICENSE ├── README.md ├── src ├── main.rs └── lib.rs └── Cargo.lock /Rustfmt.toml: -------------------------------------------------------------------------------- 1 | max_width = 85 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk 3 | output/ 4 | tiles/ 5 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "osm-tile-downloader" 3 | description = "Download tiles from an OpenStreetMap tileserver to the file system" 4 | version = "0.2.4" 5 | authors = ["Moritz Gunz "] 6 | edition = "2018" 7 | 8 | repository = "https://github.com/NeoLegends/osm-tile-downloader" 9 | keywords = ["open", "street", "map", "osm", "tile"] 10 | categories = ["command-line-utilities"] 11 | license = "MIT" 12 | readme = "README.md" 13 | 14 | [dependencies] 15 | anyhow = "1.0.28" 16 | clap = "2.33.0" 17 | futures = "0.3.4" 18 | indicatif = "0.14.0" 19 | rand = "0.7.3" 20 | reqwest = { version = "0.10.4", features = ["stream"] } 21 | strfmt = "0.1.6" 22 | tokio = { version = "0.2.20", features = ["fs", "macros", "stream", "time"] } 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Moritz Gunz 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 | # osm-tile-downloader 2 | 3 | Download OpenStreetMap-tiles to your disk en-masse. 4 | 5 | **Use with absolute caution.** Downloading tiles en-masse can hog 6 | down a tile server easily. I am not responsible for any damage this 7 | tool may cause. 8 | 9 | ## Usage 10 | 11 | This tool is available on [crates.io](https://crates.io) and can be 12 | installed via `cargo install osm-tile-downloader`. It features a helpful 13 | CLI you can access via `-h` / `--help`. 14 | 15 | It is also available as a library. 16 | 17 | ## CLI Example 18 | 19 | ```bash 20 | osm-tile-downloader \ 21 | --north 50.811 \ 22 | --east 6.1649 \ 23 | --south 50.7492 \ 24 | --west 6.031 \ 25 | --url https://\{s\}.tile.openstreetmap.de/\{z\}/\{x\}/\{y\}.png \ 26 | --output ./tiles \ 27 | --rate 10 28 | ``` 29 | 30 | ## Library Example 31 | ```rust 32 | use osm_tile_downloader::{fetch, BoundingBox, Config}; 33 | use std::path::Path; 34 | 35 | let config = Config { 36 | bounding_box: BoundingBox::new_deg(50.811, 6.1649, 50.7492, 6.031), 37 | fetch_rate: 10, 38 | output_folder: Path::new("./tiles"), 39 | request_retries_amount: 3, 40 | url: "https://{s}.tile.openstreetmap.de/{z}/{x}/{y}.png", 41 | timeout_secs: 30, 42 | zoom_level: 10, 43 | }; 44 | 45 | fetch(config).await.expect("failed fetching tiles"); 46 | ``` 47 | 48 | License: MIT 49 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Result; 2 | use clap::{ 3 | app_from_crate, crate_authors, crate_description, crate_name, crate_version, 4 | AppSettings, Arg, 5 | }; 6 | use std::{f64, path::Path, str::FromStr, time::Duration}; 7 | 8 | use osm_tile_downloader::*; 9 | 10 | const BBOX_NORTH_ARG: &str = "BBOX_NORTH"; 11 | const BBOX_SOUTH_ARG: &str = "BBOX_SOUTH"; 12 | const BBOX_WEST_ARG: &str = "BBOX_WEST"; 13 | const BBOX_EAST_ARG: &str = "BBOX_EAST"; 14 | const OUTPUT_ARG: &str = "OUTPUT"; 15 | const PARALLEL_FETCHES_ARG: &str = "PARALLEL_FETCHES"; 16 | const REQUEST_RETRIES_ARG: &str = "REQUEST_RETRIES"; 17 | const UP_TO_ZOOM_ARG: &str = "UP_TO_ZOOM"; 18 | const URL_ARG: &str = "URL"; 19 | const TIMEOUT_ARG: &str = "TIMEOUT"; 20 | 21 | #[tokio::main] 22 | async fn main() -> Result<()> { 23 | fn is_numeric(v: String) -> Result<(), String> { 24 | v.parse::() 25 | .map(|_| ()) 26 | .map_err(|_| "must be numeric".to_owned()) 27 | } 28 | fn is_positive_u8(v: String) -> Result<(), String> { 29 | let val = v.parse::().map_err(|_| "must be numeric".to_owned())?; 30 | if val > 0 { 31 | Ok(()) 32 | } else { 33 | Err("must be > 0".to_owned()) 34 | } 35 | } 36 | fn is_geo_coord(v: String) -> Result<(), String> { 37 | let val = v.parse::().map_err(|_| "must be numeric".to_owned())?; 38 | 39 | if val < 0f64 { 40 | return Err("must be >= 0°".to_owned()); 41 | } else if val >= 360f64 { 42 | return Err("must be < 360°".to_owned()); 43 | } 44 | 45 | Ok(()) 46 | } 47 | 48 | let matches = app_from_crate!() 49 | .setting(AppSettings::GlobalVersion) 50 | .setting(AppSettings::VersionlessSubcommands) 51 | .arg( 52 | Arg::with_name(BBOX_NORTH_ARG) 53 | .help("Latitude of north bounding box boundary (in degrees)") 54 | .validator(is_geo_coord) 55 | .required(true) 56 | .takes_value(true) 57 | .short("n") 58 | .long("north"), 59 | ) 60 | .arg( 61 | Arg::with_name(BBOX_SOUTH_ARG) 62 | .help("Latitude of south bounding box boundary (in degrees)") 63 | .validator(is_geo_coord) 64 | .required(true) 65 | .takes_value(true) 66 | .short("s") 67 | .long("south"), 68 | ) 69 | .arg( 70 | Arg::with_name(BBOX_EAST_ARG) 71 | .help("Longitude of east bounding box boundary (in degrees)") 72 | .validator(is_geo_coord) 73 | .required(true) 74 | .takes_value(true) 75 | .short("e") 76 | .long("east"), 77 | ) 78 | .arg( 79 | Arg::with_name(BBOX_WEST_ARG) 80 | .help("Longitude of west bounding box boundary (in degrees)") 81 | .validator(is_geo_coord) 82 | .required(true) 83 | .takes_value(true) 84 | .short("w") 85 | .long("west"), 86 | ) 87 | .arg( 88 | Arg::with_name(PARALLEL_FETCHES_ARG) 89 | .help("The amount of tiles fetched in parallel.") 90 | .validator(is_positive_u8) 91 | .default_value("5") 92 | .takes_value(true) 93 | .short("r") 94 | .long("rate"), 95 | ) 96 | .arg( 97 | Arg::with_name(REQUEST_RETRIES_ARG) 98 | .help("The amount of times to retry a failed HTTP request.") 99 | .validator(is_positive_u8) 100 | .default_value("3") 101 | .takes_value(true) 102 | .long("retries"), 103 | ) 104 | .arg( 105 | Arg::with_name(TIMEOUT_ARG) 106 | .help("The timeout (in seconds) for fetching a single tile. Pass 0 for no timeout.") 107 | .validator(is_numeric::) 108 | .default_value("10") 109 | .takes_value(true) 110 | .short("t") 111 | .long("timeout"), 112 | ) 113 | .arg( 114 | Arg::with_name(UP_TO_ZOOM_ARG) 115 | .help("The maximum zoom level to fetch") 116 | .validator(is_numeric::) 117 | .default_value("18") 118 | .takes_value(true) 119 | .short("z") 120 | .long("zoom"), 121 | ) 122 | .arg( 123 | Arg::with_name(OUTPUT_ARG) 124 | .help("The folder to output the tiles to. May contain format specifiers (and subfolders) to specify how the files will be laid out on disk.") 125 | .default_value("output") 126 | .takes_value(true) 127 | .short("o") 128 | .long("output"), 129 | ) 130 | .arg( 131 | Arg::with_name(URL_ARG) 132 | .help("The URL with format specifiers `{x}`, `{y}`, `{z}` to fetch the tiles from. Also supports the format specifier `{s}` which is replaced with `a`, `b` or `c` randomly to spread the load between different servers.") 133 | .required(true) 134 | .takes_value(true) 135 | .short("u") 136 | .long("url") 137 | ) 138 | .get_matches(); 139 | 140 | let config = Config { 141 | bounding_box: BoundingBox::new_deg( 142 | matches.value_of(BBOX_NORTH_ARG).unwrap().parse().unwrap(), 143 | matches.value_of(BBOX_EAST_ARG).unwrap().parse().unwrap(), 144 | matches.value_of(BBOX_SOUTH_ARG).unwrap().parse().unwrap(), 145 | matches.value_of(BBOX_WEST_ARG).unwrap().parse().unwrap(), 146 | ), 147 | fetch_rate: matches 148 | .value_of(PARALLEL_FETCHES_ARG) 149 | .unwrap() 150 | .parse() 151 | .unwrap(), 152 | output_folder: Path::new(matches.value_of(OUTPUT_ARG).unwrap()), 153 | request_retries_amount: matches 154 | .value_of(REQUEST_RETRIES_ARG) 155 | .unwrap() 156 | .parse() 157 | .unwrap(), 158 | url: matches.value_of(URL_ARG).unwrap(), 159 | timeout: Duration::from_secs( 160 | matches.value_of(TIMEOUT_ARG).unwrap().parse().unwrap(), 161 | ), 162 | zoom_level: matches.value_of(UP_TO_ZOOM_ARG).unwrap().parse().unwrap(), 163 | }; 164 | 165 | fetch(config).await?; 166 | Ok(()) 167 | } 168 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | //! Download OpenStreetMap-tiles to your disk en-masse. 2 | //! 3 | //! **Use with absolute caution.** Downloading tiles en-masse can hog 4 | //! down a tile server easily. I am not responsible for any damage this 5 | //! tool may cause. 6 | //! 7 | //! # Usage 8 | //! 9 | //! This tool is available on [crates.io](https://crates.io) and can be 10 | //! installed via `cargo install osm-tile-downloader`. It features a helpful 11 | //! CLI you can access via `-h` / `--help`. 12 | //! 13 | //! It is also available as a library. 14 | //! 15 | //! # CLI Example 16 | //! 17 | //! ```bash 18 | //! osm-tile-downloader \ 19 | //! --north 50.811 \ 20 | //! --east 6.1649 \ 21 | //! --south 50.7492 \ 22 | //! --west 6.031 \ 23 | //! --url https://\{s\}.tile.openstreetmap.de/\{z\}/\{x\}/\{y\}.png \ 24 | //! --output ./tiles \ 25 | //! --rate 10 26 | //! ``` 27 | //! 28 | //! # Library Example 29 | //! ```rust 30 | //! use osm_tile_downloader::{fetch, BoundingBox, Config}; 31 | //! use std::path::Path; 32 | //! 33 | //! # #[tokio::main] 34 | //! # async fn main() { 35 | //! let config = Config { 36 | //! bounding_box: BoundingBox::new_deg(50.811, 6.1649, 50.7492, 6.031), 37 | //! fetch_rate: 10, 38 | //! output_folder: Path::new("./tiles"), 39 | //! request_retries_amount: 3, 40 | //! url: "https://{s}.tile.openstreetmap.de/{z}/{x}/{y}.png", 41 | //! timeout_secs: 30, 42 | //! zoom_level: 10, 43 | //! }; 44 | //! 45 | //! fetch(config).await.expect("failed fetching tiles"); 46 | //! # } 47 | //! ``` 48 | 49 | use anyhow::{Context, Result}; 50 | use futures::{prelude::*, stream}; 51 | use indicatif::ProgressBar; 52 | use rand::{self, seq::SliceRandom}; 53 | use reqwest::{Client, StatusCode}; 54 | use std::{ 55 | collections::HashMap, 56 | f64, 57 | fmt::Debug, 58 | io::{Error as IoError, ErrorKind}, 59 | path::Path, 60 | time::Duration, 61 | u64, 62 | }; 63 | use tokio::{ 64 | self, 65 | fs::{self, File}, 66 | io, time, 67 | }; 68 | 69 | const BACKOFF_DELAY: Duration = Duration::from_secs(10); 70 | const ZERO_DURATION: Duration = Duration::from_secs(0); 71 | 72 | /// A bounding box consisting of north, east, south and west coordinate boundaries 73 | /// given from 0 to 2π. 74 | /// 75 | /// # Example 76 | /// ```rust 77 | /// # use osm_tile_downloader::BoundingBox; 78 | /// let aachen_germany = BoundingBox::new_deg(50.811, 6.1649, 50.7492, 6.031); 79 | /// ``` 80 | #[derive(Copy, Clone, Debug, PartialEq)] 81 | pub struct BoundingBox { 82 | north: f64, 83 | west: f64, 84 | east: f64, 85 | south: f64, 86 | } 87 | 88 | /// Tile fetching configuration. 89 | #[derive(Copy, Clone, Debug, PartialEq)] 90 | pub struct Config<'a> { 91 | /// Bounding box in top, right, bottom, left order. 92 | pub bounding_box: BoundingBox, 93 | 94 | /// Maximum number of parallel downloads. 95 | pub fetch_rate: u8, 96 | 97 | /// The folder to output the data to. 98 | pub output_folder: &'a Path, 99 | 100 | /// How many times to retry a failed HTTP request. 101 | pub request_retries_amount: u8, 102 | 103 | /// The URL to download individual tiles from including the replacement 104 | /// specifiers `{x}`, `{y}` and `{z}`. 105 | pub url: &'a str, 106 | 107 | /// Timeout for fetching a single tile. 108 | /// 109 | /// Pass the zero duration to disable the timeout. 110 | pub timeout: Duration, 111 | 112 | /// The zoom level to download to. 113 | pub zoom_level: u8, 114 | } 115 | 116 | /// An OSM slippy-map tile with x, y and z-coordinate. 117 | #[derive(Clone, Copy, Debug, Eq, PartialEq)] 118 | pub struct Tile { 119 | x: usize, 120 | y: usize, 121 | z: u8, 122 | } 123 | 124 | /// Asynchronously fetch the open street map tiles specified in `cfg` and save them 125 | /// to the file system. 126 | /// 127 | /// Creates the required directories recursively and overwrites any existing files 128 | /// at the destination. 129 | /// 130 | /// # Example 131 | /// ```rust 132 | /// use osm_tile_downloader::{fetch, BoundingBox, Config}; 133 | /// # use std::path::Path; 134 | /// 135 | /// # #[tokio::main] 136 | /// # async fn main() { 137 | /// let config = Config { 138 | /// bounding_box: BoundingBox::new_deg(50.811, 6.1649, 50.7492, 6.031), 139 | /// fetch_rate: 10, 140 | /// output_folder: Path::new("./tiles"), 141 | /// request_retries_amount: 3, 142 | /// url: "https://{s}.tile.openstreetmap.de/{z}/{x}/{y}.png", 143 | /// timeout_secs: 30, 144 | /// zoom_level: 10, 145 | /// }; 146 | /// 147 | /// fetch(config).await.expect("failed fetching tiles"); 148 | /// # } 149 | /// ``` 150 | /// 151 | /// # Panics 152 | /// Panics if the specified output folder exists and is not a folder but a file. 153 | pub async fn fetch(cfg: Config<'_>) -> Result<()> { 154 | assert!( 155 | !cfg.output_folder.exists() || cfg.output_folder.is_dir(), 156 | "output must be a directory", 157 | ); 158 | 159 | if !cfg.output_folder.exists() { 160 | fs::create_dir_all(cfg.output_folder) 161 | .await 162 | .context("failed to create root output directory")?; 163 | } 164 | 165 | let pb = ProgressBar::new(cfg.tiles().count() as u64); 166 | 167 | let mut builder = Client::builder(); 168 | if cfg.timeout > ZERO_DURATION { 169 | builder = builder.timeout(cfg.timeout); 170 | } 171 | 172 | let client = builder 173 | .build() 174 | .with_context(|| "failed creating HTTP client")?; 175 | 176 | stream::iter(pb.wrap_iter(cfg.tiles())) 177 | .for_each_concurrent(cfg.fetch_rate as usize, |tile| { 178 | let http_client = client.clone(); 179 | 180 | async move { 181 | let mut res = Ok(()); 182 | 183 | for _ in 0..cfg.request_retries_amount { 184 | res = tile 185 | .fetch_from(&http_client, cfg.url, cfg.output_folder) 186 | .await; 187 | 188 | if res.is_ok() { 189 | return; 190 | } 191 | 192 | time::delay_for(BACKOFF_DELAY).await; 193 | } 194 | 195 | eprintln!( 196 | "Failed fetching tile {}x{}x{}: {:?}", 197 | tile.z, 198 | tile.x, 199 | tile.y, 200 | res.unwrap_err(), 201 | ); 202 | } 203 | }) 204 | .await; 205 | 206 | pb.finish(); 207 | 208 | Ok(()) 209 | } 210 | 211 | impl BoundingBox { 212 | /// Create a new bounding box from the specified coordinates specified in degrees (0-360°). 213 | /// 214 | /// # Example 215 | /// ```rust 216 | /// # use osm_tile_downloader::BoundingBox; 217 | /// let aachen_germany = BoundingBox::new_deg(50.811, 6.1649, 50.7492, 6.031); 218 | /// ``` 219 | /// 220 | /// # Panics 221 | /// Panics if the coordinates are < 0, or >= 360. 222 | pub fn new_deg(north: f64, east: f64, south: f64, west: f64) -> Self { 223 | Self::new( 224 | north.to_radians(), 225 | east.to_radians(), 226 | south.to_radians(), 227 | west.to_radians(), 228 | ) 229 | } 230 | 231 | /// Create a new bounding box from the specified coordinates specified in radians (0-2π). 232 | /// 233 | /// # Panics 234 | /// Panics if the coordinates are < 0, or >= 2π. 235 | pub fn new(north: f64, east: f64, south: f64, west: f64) -> Self { 236 | assert!(north >= 0.0 && north < 2f64 * f64::consts::PI); 237 | assert!(east >= 0.0 && east < 2f64 * f64::consts::PI); 238 | assert!(south >= 0.0 && south < 2f64 * f64::consts::PI); 239 | assert!(west >= 0.0 && west < 2f64 * f64::consts::PI); 240 | 241 | BoundingBox { 242 | north, 243 | east, 244 | south, 245 | west, 246 | } 247 | } 248 | 249 | /// Gets the north coordinate. 250 | pub fn north(&self) -> f64 { 251 | self.north 252 | } 253 | 254 | /// Gets the east coordinate. 255 | pub fn east(&self) -> f64 { 256 | self.east 257 | } 258 | 259 | /// Gets the south coordinate. 260 | pub fn south(&self) -> f64 { 261 | self.south 262 | } 263 | 264 | /// Gets the west coordinate. 265 | pub fn west(&self) -> f64 { 266 | self.west 267 | } 268 | 269 | /// Creates an iterator iterating over all tiles in the bounding box. 270 | /// 271 | /// # Panics 272 | /// Panics if `upto_zoom` is 0. 273 | pub fn tiles(&self, upto_zoom: u8) -> impl Iterator + Debug { 274 | assert!(upto_zoom >= 1); 275 | 276 | let (north, east, south, west) = 277 | (self.north, self.east, self.south, self.west); 278 | 279 | (1..=upto_zoom).flat_map(move |level| { 280 | let (top_x, top_y) = tile_indices(level, west, north); 281 | let (bot_x, bot_y) = tile_indices(level, east, south); 282 | 283 | (top_x..=bot_x).flat_map(move |x| { 284 | (top_y..=bot_y).map(move |y| Tile { x, y, z: level }) 285 | }) 286 | }) 287 | } 288 | } 289 | 290 | impl Config<'_> { 291 | /// Creates an iterator iterating over all tiles in the contained bounding box. 292 | pub fn tiles(&self) -> impl Iterator + Debug { 293 | self.bounding_box.tiles(self.zoom_level) 294 | } 295 | } 296 | 297 | impl Tile { 298 | /// Fetches the given tile from the given URL using the given HTTP client. 299 | pub async fn fetch_from( 300 | self, 301 | client: &Client, 302 | url_fmt: &str, 303 | output_folder: &Path, 304 | ) -> Result<()> { 305 | const OSM_SERVERS: &[&'static str] = &["a", "b", "c"]; 306 | 307 | let formatted_url = { 308 | let mut map = HashMap::with_capacity(4); 309 | map.insert( 310 | "s".to_owned(), 311 | OSM_SERVERS 312 | .choose(&mut rand::thread_rng()) 313 | .unwrap() 314 | .to_string(), 315 | ); 316 | map.insert("x".to_owned(), self.x.to_string()); 317 | map.insert("y".to_owned(), self.y.to_string()); 318 | map.insert("z".to_owned(), self.z.to_string()); 319 | 320 | strfmt::strfmt(url_fmt, &map).context("failed formatting URL")? 321 | }; 322 | 323 | let mut response_reader = loop { 324 | let raw_response = 325 | client.get(&formatted_url).send().await.with_context(|| { 326 | format!("failed fetching tile {}x{}x{}", self.x, self.y, self.z) 327 | })?; 328 | 329 | if raw_response.status() == StatusCode::TOO_MANY_REQUESTS { 330 | let retry_after = raw_response 331 | .headers() 332 | .get("Retry-After") 333 | .and_then(|v| v.to_str().ok()) 334 | .and_then(|val| val.parse::().ok()) 335 | .map(Duration::from_secs) 336 | .unwrap_or(BACKOFF_DELAY); 337 | 338 | time::delay_for(retry_after).await; 339 | continue; 340 | } 341 | 342 | let response_stream = raw_response 343 | .error_for_status() 344 | .with_context(|| { 345 | format!( 346 | "received invalid status code fetching tile {}x{}x{}", 347 | self.x, self.y, self.z 348 | ) 349 | })? 350 | .bytes_stream() 351 | .map_err(|e| IoError::new(ErrorKind::Other, e)); 352 | 353 | break io::stream_reader(response_stream); 354 | }; 355 | 356 | let mut output_file = { 357 | let mut target = output_folder.join(self.z.to_string()); 358 | target.push(self.x.to_string()); 359 | fs::create_dir_all(&target).await.with_context(|| { 360 | format!( 361 | "failed creating output directory for tile {}x{}x{}", 362 | self.x, self.y, self.z 363 | ) 364 | })?; 365 | target.push(self.y.to_string()); 366 | 367 | File::create(target).await? 368 | }; 369 | 370 | io::copy(&mut response_reader, &mut output_file) 371 | .await 372 | .with_context(|| { 373 | format!( 374 | "failed streaming tile {}x{}x{} to disk", 375 | self.x, self.y, self.z 376 | ) 377 | })?; 378 | 379 | Ok(()) 380 | } 381 | } 382 | 383 | fn tile_indices(zoom: u8, lon_rad: f64, lat_rad: f64) -> (usize, usize) { 384 | assert!(zoom > 0); 385 | assert!(lon_rad >= 0.0); 386 | assert!(lat_rad >= 0.0); 387 | 388 | let tile_x = { 389 | let deg = (lon_rad + f64::consts::PI) / (2f64 * f64::consts::PI); 390 | 391 | deg * 2f64.powi(zoom as i32) 392 | }; 393 | let tile_y = { 394 | let trig = (lat_rad.tan() + (1f64 / lat_rad.cos())).ln(); 395 | let inner = 1f64 - (trig / f64::consts::PI); 396 | 397 | inner * 2f64.powi(zoom as i32 - 1) 398 | }; 399 | 400 | (tile_x as usize, tile_y as usize) 401 | } 402 | 403 | #[cfg(test)] 404 | mod tests { 405 | use super::*; 406 | 407 | #[test] 408 | #[should_panic] 409 | fn bbox_panics_deg() { 410 | BoundingBox::new_deg(360.0, 0.0, 0.0, 0.0); 411 | } 412 | 413 | #[test] 414 | #[should_panic] 415 | fn bbox_panics_rad() { 416 | BoundingBox::new(7.0, 3.0, 3.0, 3.0); 417 | } 418 | 419 | #[test] 420 | fn tile_index() { 421 | assert_eq!( 422 | tile_indices(18, 6.0402f64.to_radians(), 50.7929f64.to_radians()), 423 | (135470, 87999) 424 | ); 425 | } 426 | } 427 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "ansi_term" 5 | version = "0.11.0" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | dependencies = [ 8 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 9 | ] 10 | 11 | [[package]] 12 | name = "anyhow" 13 | version = "1.0.28" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | 16 | [[package]] 17 | name = "atty" 18 | version = "0.2.14" 19 | source = "registry+https://github.com/rust-lang/crates.io-index" 20 | dependencies = [ 21 | "hermit-abi 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 22 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 23 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 24 | ] 25 | 26 | [[package]] 27 | name = "autocfg" 28 | version = "1.0.0" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | 31 | [[package]] 32 | name = "base64" 33 | version = "0.11.0" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | 36 | [[package]] 37 | name = "bitflags" 38 | version = "1.2.1" 39 | source = "registry+https://github.com/rust-lang/crates.io-index" 40 | 41 | [[package]] 42 | name = "bumpalo" 43 | version = "3.2.1" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | 46 | [[package]] 47 | name = "bytes" 48 | version = "0.5.4" 49 | source = "registry+https://github.com/rust-lang/crates.io-index" 50 | 51 | [[package]] 52 | name = "cc" 53 | version = "1.0.52" 54 | source = "registry+https://github.com/rust-lang/crates.io-index" 55 | 56 | [[package]] 57 | name = "cfg-if" 58 | version = "0.1.10" 59 | source = "registry+https://github.com/rust-lang/crates.io-index" 60 | 61 | [[package]] 62 | name = "clap" 63 | version = "2.33.0" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | dependencies = [ 66 | "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 67 | "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", 68 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 69 | "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 70 | "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 71 | "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 72 | "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 73 | ] 74 | 75 | [[package]] 76 | name = "console" 77 | version = "0.11.2" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | dependencies = [ 80 | "encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 81 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 82 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 83 | "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 84 | "terminal_size 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 85 | "termios 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 86 | "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 87 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 88 | "winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 89 | ] 90 | 91 | [[package]] 92 | name = "core-foundation" 93 | version = "0.7.0" 94 | source = "registry+https://github.com/rust-lang/crates.io-index" 95 | dependencies = [ 96 | "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 97 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 98 | ] 99 | 100 | [[package]] 101 | name = "core-foundation-sys" 102 | version = "0.7.0" 103 | source = "registry+https://github.com/rust-lang/crates.io-index" 104 | 105 | [[package]] 106 | name = "dtoa" 107 | version = "0.4.5" 108 | source = "registry+https://github.com/rust-lang/crates.io-index" 109 | 110 | [[package]] 111 | name = "encode_unicode" 112 | version = "0.3.6" 113 | source = "registry+https://github.com/rust-lang/crates.io-index" 114 | 115 | [[package]] 116 | name = "encoding_rs" 117 | version = "0.8.22" 118 | source = "registry+https://github.com/rust-lang/crates.io-index" 119 | dependencies = [ 120 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 121 | ] 122 | 123 | [[package]] 124 | name = "fnv" 125 | version = "1.0.6" 126 | source = "registry+https://github.com/rust-lang/crates.io-index" 127 | 128 | [[package]] 129 | name = "foreign-types" 130 | version = "0.3.2" 131 | source = "registry+https://github.com/rust-lang/crates.io-index" 132 | dependencies = [ 133 | "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 134 | ] 135 | 136 | [[package]] 137 | name = "foreign-types-shared" 138 | version = "0.1.1" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | 141 | [[package]] 142 | name = "fuchsia-zircon" 143 | version = "0.3.3" 144 | source = "registry+https://github.com/rust-lang/crates.io-index" 145 | dependencies = [ 146 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 147 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 148 | ] 149 | 150 | [[package]] 151 | name = "fuchsia-zircon-sys" 152 | version = "0.3.3" 153 | source = "registry+https://github.com/rust-lang/crates.io-index" 154 | 155 | [[package]] 156 | name = "futures" 157 | version = "0.3.4" 158 | source = "registry+https://github.com/rust-lang/crates.io-index" 159 | dependencies = [ 160 | "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 161 | "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 162 | "futures-executor 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 163 | "futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 164 | "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 165 | "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 166 | "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 167 | ] 168 | 169 | [[package]] 170 | name = "futures-channel" 171 | version = "0.3.4" 172 | source = "registry+https://github.com/rust-lang/crates.io-index" 173 | dependencies = [ 174 | "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 175 | "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 176 | ] 177 | 178 | [[package]] 179 | name = "futures-core" 180 | version = "0.3.4" 181 | source = "registry+https://github.com/rust-lang/crates.io-index" 182 | 183 | [[package]] 184 | name = "futures-executor" 185 | version = "0.3.4" 186 | source = "registry+https://github.com/rust-lang/crates.io-index" 187 | dependencies = [ 188 | "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 189 | "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 190 | "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 191 | ] 192 | 193 | [[package]] 194 | name = "futures-io" 195 | version = "0.3.4" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | 198 | [[package]] 199 | name = "futures-macro" 200 | version = "0.3.4" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | dependencies = [ 203 | "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", 204 | "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", 205 | "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 206 | "syn 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", 207 | ] 208 | 209 | [[package]] 210 | name = "futures-sink" 211 | version = "0.3.4" 212 | source = "registry+https://github.com/rust-lang/crates.io-index" 213 | 214 | [[package]] 215 | name = "futures-task" 216 | version = "0.3.4" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | 219 | [[package]] 220 | name = "futures-util" 221 | version = "0.3.4" 222 | source = "registry+https://github.com/rust-lang/crates.io-index" 223 | dependencies = [ 224 | "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 225 | "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 226 | "futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 227 | "futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 228 | "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 229 | "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 230 | "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 231 | "pin-utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 232 | "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", 233 | "proc-macro-nested 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 234 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 235 | ] 236 | 237 | [[package]] 238 | name = "getrandom" 239 | version = "0.1.14" 240 | source = "registry+https://github.com/rust-lang/crates.io-index" 241 | dependencies = [ 242 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 243 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 244 | "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)", 245 | ] 246 | 247 | [[package]] 248 | name = "h2" 249 | version = "0.2.4" 250 | source = "registry+https://github.com/rust-lang/crates.io-index" 251 | dependencies = [ 252 | "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", 253 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 254 | "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 255 | "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 256 | "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 257 | "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 258 | "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 259 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 260 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 261 | "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", 262 | "tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 263 | ] 264 | 265 | [[package]] 266 | name = "hermit-abi" 267 | version = "0.1.12" 268 | source = "registry+https://github.com/rust-lang/crates.io-index" 269 | dependencies = [ 270 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 271 | ] 272 | 273 | [[package]] 274 | name = "http" 275 | version = "0.2.1" 276 | source = "registry+https://github.com/rust-lang/crates.io-index" 277 | dependencies = [ 278 | "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", 279 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 280 | "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", 281 | ] 282 | 283 | [[package]] 284 | name = "http-body" 285 | version = "0.3.1" 286 | source = "registry+https://github.com/rust-lang/crates.io-index" 287 | dependencies = [ 288 | "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", 289 | "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 290 | ] 291 | 292 | [[package]] 293 | name = "httparse" 294 | version = "1.3.4" 295 | source = "registry+https://github.com/rust-lang/crates.io-index" 296 | 297 | [[package]] 298 | name = "hyper" 299 | version = "0.13.5" 300 | source = "registry+https://github.com/rust-lang/crates.io-index" 301 | dependencies = [ 302 | "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", 303 | "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 304 | "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 305 | "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 306 | "h2 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 307 | "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 308 | "http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 309 | "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 310 | "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", 311 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 312 | "net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", 313 | "pin-project 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", 314 | "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 315 | "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", 316 | "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 317 | "want 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 318 | ] 319 | 320 | [[package]] 321 | name = "hyper-tls" 322 | version = "0.4.1" 323 | source = "registry+https://github.com/rust-lang/crates.io-index" 324 | dependencies = [ 325 | "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", 326 | "hyper 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)", 327 | "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 328 | "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", 329 | "tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 330 | ] 331 | 332 | [[package]] 333 | name = "idna" 334 | version = "0.2.0" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | dependencies = [ 337 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 338 | "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 339 | "unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 340 | ] 341 | 342 | [[package]] 343 | name = "indexmap" 344 | version = "1.3.2" 345 | source = "registry+https://github.com/rust-lang/crates.io-index" 346 | dependencies = [ 347 | "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 348 | ] 349 | 350 | [[package]] 351 | name = "indicatif" 352 | version = "0.14.0" 353 | source = "registry+https://github.com/rust-lang/crates.io-index" 354 | dependencies = [ 355 | "console 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)", 356 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 357 | "number_prefix 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 358 | "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 359 | ] 360 | 361 | [[package]] 362 | name = "iovec" 363 | version = "0.1.4" 364 | source = "registry+https://github.com/rust-lang/crates.io-index" 365 | dependencies = [ 366 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 367 | ] 368 | 369 | [[package]] 370 | name = "itoa" 371 | version = "0.4.5" 372 | source = "registry+https://github.com/rust-lang/crates.io-index" 373 | 374 | [[package]] 375 | name = "js-sys" 376 | version = "0.3.39" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | dependencies = [ 379 | "wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 380 | ] 381 | 382 | [[package]] 383 | name = "kernel32-sys" 384 | version = "0.2.2" 385 | source = "registry+https://github.com/rust-lang/crates.io-index" 386 | dependencies = [ 387 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 388 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 389 | ] 390 | 391 | [[package]] 392 | name = "lazy_static" 393 | version = "1.4.0" 394 | source = "registry+https://github.com/rust-lang/crates.io-index" 395 | 396 | [[package]] 397 | name = "libc" 398 | version = "0.2.69" 399 | source = "registry+https://github.com/rust-lang/crates.io-index" 400 | 401 | [[package]] 402 | name = "log" 403 | version = "0.4.8" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | dependencies = [ 406 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 407 | ] 408 | 409 | [[package]] 410 | name = "matches" 411 | version = "0.1.8" 412 | source = "registry+https://github.com/rust-lang/crates.io-index" 413 | 414 | [[package]] 415 | name = "memchr" 416 | version = "2.3.3" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | 419 | [[package]] 420 | name = "mime" 421 | version = "0.3.16" 422 | source = "registry+https://github.com/rust-lang/crates.io-index" 423 | 424 | [[package]] 425 | name = "mime_guess" 426 | version = "2.0.3" 427 | source = "registry+https://github.com/rust-lang/crates.io-index" 428 | dependencies = [ 429 | "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 430 | "unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 431 | ] 432 | 433 | [[package]] 434 | name = "mio" 435 | version = "0.6.22" 436 | source = "registry+https://github.com/rust-lang/crates.io-index" 437 | dependencies = [ 438 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 439 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 440 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 441 | "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 442 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 443 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 444 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 445 | "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 446 | "net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", 447 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 448 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 449 | ] 450 | 451 | [[package]] 452 | name = "miow" 453 | version = "0.2.1" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | dependencies = [ 456 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 457 | "net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", 458 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 459 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 460 | ] 461 | 462 | [[package]] 463 | name = "native-tls" 464 | version = "0.2.4" 465 | source = "registry+https://github.com/rust-lang/crates.io-index" 466 | dependencies = [ 467 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 468 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 469 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 470 | "openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)", 471 | "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 472 | "openssl-sys 0.9.55 (registry+https://github.com/rust-lang/crates.io-index)", 473 | "schannel 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", 474 | "security-framework 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 475 | "security-framework-sys 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 476 | "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 477 | ] 478 | 479 | [[package]] 480 | name = "net2" 481 | version = "0.2.34" 482 | source = "registry+https://github.com/rust-lang/crates.io-index" 483 | dependencies = [ 484 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 485 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 486 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 487 | ] 488 | 489 | [[package]] 490 | name = "number_prefix" 491 | version = "0.3.0" 492 | source = "registry+https://github.com/rust-lang/crates.io-index" 493 | 494 | [[package]] 495 | name = "openssl" 496 | version = "0.10.29" 497 | source = "registry+https://github.com/rust-lang/crates.io-index" 498 | dependencies = [ 499 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 500 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 501 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 502 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 503 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 504 | "openssl-sys 0.9.55 (registry+https://github.com/rust-lang/crates.io-index)", 505 | ] 506 | 507 | [[package]] 508 | name = "openssl-probe" 509 | version = "0.1.2" 510 | source = "registry+https://github.com/rust-lang/crates.io-index" 511 | 512 | [[package]] 513 | name = "openssl-sys" 514 | version = "0.9.55" 515 | source = "registry+https://github.com/rust-lang/crates.io-index" 516 | dependencies = [ 517 | "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 518 | "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)", 519 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 520 | "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", 521 | "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 522 | ] 523 | 524 | [[package]] 525 | name = "osm-tile-downloader" 526 | version = "0.2.4" 527 | dependencies = [ 528 | "anyhow 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", 529 | "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", 530 | "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 531 | "indicatif 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", 532 | "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", 533 | "reqwest 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)", 534 | "strfmt 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 535 | "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", 536 | ] 537 | 538 | [[package]] 539 | name = "percent-encoding" 540 | version = "2.1.0" 541 | source = "registry+https://github.com/rust-lang/crates.io-index" 542 | 543 | [[package]] 544 | name = "pin-project" 545 | version = "0.4.10" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | dependencies = [ 548 | "pin-project-internal 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", 549 | ] 550 | 551 | [[package]] 552 | name = "pin-project-internal" 553 | version = "0.4.10" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | dependencies = [ 556 | "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", 557 | "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 558 | "syn 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", 559 | ] 560 | 561 | [[package]] 562 | name = "pin-project-lite" 563 | version = "0.1.4" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | 566 | [[package]] 567 | name = "pin-utils" 568 | version = "0.1.0" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | 571 | [[package]] 572 | name = "pkg-config" 573 | version = "0.3.17" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | 576 | [[package]] 577 | name = "ppv-lite86" 578 | version = "0.2.6" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | 581 | [[package]] 582 | name = "proc-macro-hack" 583 | version = "0.5.15" 584 | source = "registry+https://github.com/rust-lang/crates.io-index" 585 | 586 | [[package]] 587 | name = "proc-macro-nested" 588 | version = "0.1.4" 589 | source = "registry+https://github.com/rust-lang/crates.io-index" 590 | 591 | [[package]] 592 | name = "proc-macro2" 593 | version = "1.0.12" 594 | source = "registry+https://github.com/rust-lang/crates.io-index" 595 | dependencies = [ 596 | "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 597 | ] 598 | 599 | [[package]] 600 | name = "quote" 601 | version = "1.0.4" 602 | source = "registry+https://github.com/rust-lang/crates.io-index" 603 | dependencies = [ 604 | "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", 605 | ] 606 | 607 | [[package]] 608 | name = "rand" 609 | version = "0.7.3" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | dependencies = [ 612 | "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 613 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 614 | "rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 615 | "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 616 | "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 617 | ] 618 | 619 | [[package]] 620 | name = "rand_chacha" 621 | version = "0.2.2" 622 | source = "registry+https://github.com/rust-lang/crates.io-index" 623 | dependencies = [ 624 | "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 625 | "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 626 | ] 627 | 628 | [[package]] 629 | name = "rand_core" 630 | version = "0.5.1" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | dependencies = [ 633 | "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 634 | ] 635 | 636 | [[package]] 637 | name = "rand_hc" 638 | version = "0.2.0" 639 | source = "registry+https://github.com/rust-lang/crates.io-index" 640 | dependencies = [ 641 | "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 642 | ] 643 | 644 | [[package]] 645 | name = "redox_syscall" 646 | version = "0.1.56" 647 | source = "registry+https://github.com/rust-lang/crates.io-index" 648 | 649 | [[package]] 650 | name = "regex" 651 | version = "1.3.7" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | dependencies = [ 654 | "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)", 655 | ] 656 | 657 | [[package]] 658 | name = "regex-syntax" 659 | version = "0.6.17" 660 | source = "registry+https://github.com/rust-lang/crates.io-index" 661 | 662 | [[package]] 663 | name = "remove_dir_all" 664 | version = "0.5.2" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | dependencies = [ 667 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 668 | ] 669 | 670 | [[package]] 671 | name = "reqwest" 672 | version = "0.10.4" 673 | source = "registry+https://github.com/rust-lang/crates.io-index" 674 | dependencies = [ 675 | "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 676 | "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", 677 | "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)", 678 | "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 679 | "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 680 | "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 681 | "http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 682 | "hyper 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)", 683 | "hyper-tls 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 684 | "js-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", 685 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 686 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 687 | "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 688 | "mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 689 | "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 690 | "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 691 | "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 692 | "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", 693 | "serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 694 | "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 695 | "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", 696 | "tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 697 | "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 698 | "wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 699 | "wasm-bindgen-futures 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 700 | "web-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", 701 | "winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 702 | ] 703 | 704 | [[package]] 705 | name = "ryu" 706 | version = "1.0.4" 707 | source = "registry+https://github.com/rust-lang/crates.io-index" 708 | 709 | [[package]] 710 | name = "schannel" 711 | version = "0.1.18" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | dependencies = [ 714 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 715 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 716 | ] 717 | 718 | [[package]] 719 | name = "security-framework" 720 | version = "0.4.3" 721 | source = "registry+https://github.com/rust-lang/crates.io-index" 722 | dependencies = [ 723 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 724 | "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 725 | "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 726 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 727 | "security-framework-sys 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 728 | ] 729 | 730 | [[package]] 731 | name = "security-framework-sys" 732 | version = "0.4.3" 733 | source = "registry+https://github.com/rust-lang/crates.io-index" 734 | dependencies = [ 735 | "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 736 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 737 | ] 738 | 739 | [[package]] 740 | name = "serde" 741 | version = "1.0.106" 742 | source = "registry+https://github.com/rust-lang/crates.io-index" 743 | 744 | [[package]] 745 | name = "serde_json" 746 | version = "1.0.52" 747 | source = "registry+https://github.com/rust-lang/crates.io-index" 748 | dependencies = [ 749 | "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", 750 | "ryu 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 751 | "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", 752 | ] 753 | 754 | [[package]] 755 | name = "serde_urlencoded" 756 | version = "0.6.1" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | dependencies = [ 759 | "dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", 760 | "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", 761 | "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", 762 | "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 763 | ] 764 | 765 | [[package]] 766 | name = "slab" 767 | version = "0.4.2" 768 | source = "registry+https://github.com/rust-lang/crates.io-index" 769 | 770 | [[package]] 771 | name = "smallvec" 772 | version = "1.4.0" 773 | source = "registry+https://github.com/rust-lang/crates.io-index" 774 | 775 | [[package]] 776 | name = "strfmt" 777 | version = "0.1.6" 778 | source = "registry+https://github.com/rust-lang/crates.io-index" 779 | 780 | [[package]] 781 | name = "strsim" 782 | version = "0.8.0" 783 | source = "registry+https://github.com/rust-lang/crates.io-index" 784 | 785 | [[package]] 786 | name = "syn" 787 | version = "1.0.18" 788 | source = "registry+https://github.com/rust-lang/crates.io-index" 789 | dependencies = [ 790 | "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", 791 | "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 792 | "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 793 | ] 794 | 795 | [[package]] 796 | name = "tempfile" 797 | version = "3.1.0" 798 | source = "registry+https://github.com/rust-lang/crates.io-index" 799 | dependencies = [ 800 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 801 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 802 | "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", 803 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 804 | "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 805 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 806 | ] 807 | 808 | [[package]] 809 | name = "terminal_size" 810 | version = "0.1.12" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | dependencies = [ 813 | "libc 0.2.69 (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 = "termios" 819 | version = "0.3.2" 820 | source = "registry+https://github.com/rust-lang/crates.io-index" 821 | dependencies = [ 822 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 823 | ] 824 | 825 | [[package]] 826 | name = "textwrap" 827 | version = "0.11.0" 828 | source = "registry+https://github.com/rust-lang/crates.io-index" 829 | dependencies = [ 830 | "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 831 | ] 832 | 833 | [[package]] 834 | name = "time" 835 | version = "0.1.43" 836 | source = "registry+https://github.com/rust-lang/crates.io-index" 837 | dependencies = [ 838 | "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", 839 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 840 | ] 841 | 842 | [[package]] 843 | name = "tokio" 844 | version = "0.2.20" 845 | source = "registry+https://github.com/rust-lang/crates.io-index" 846 | dependencies = [ 847 | "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", 848 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 849 | "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 850 | "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 851 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 852 | "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 853 | "mio 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)", 854 | "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 855 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 856 | "tokio-macros 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", 857 | ] 858 | 859 | [[package]] 860 | name = "tokio-macros" 861 | version = "0.2.5" 862 | source = "registry+https://github.com/rust-lang/crates.io-index" 863 | dependencies = [ 864 | "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", 865 | "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 866 | "syn 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", 867 | ] 868 | 869 | [[package]] 870 | name = "tokio-tls" 871 | version = "0.3.0" 872 | source = "registry+https://github.com/rust-lang/crates.io-index" 873 | dependencies = [ 874 | "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 875 | "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", 876 | ] 877 | 878 | [[package]] 879 | name = "tokio-util" 880 | version = "0.3.1" 881 | source = "registry+https://github.com/rust-lang/crates.io-index" 882 | dependencies = [ 883 | "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", 884 | "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 885 | "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 886 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 887 | "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 888 | "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", 889 | ] 890 | 891 | [[package]] 892 | name = "tower-service" 893 | version = "0.3.0" 894 | source = "registry+https://github.com/rust-lang/crates.io-index" 895 | 896 | [[package]] 897 | name = "try-lock" 898 | version = "0.2.2" 899 | source = "registry+https://github.com/rust-lang/crates.io-index" 900 | 901 | [[package]] 902 | name = "unicase" 903 | version = "2.6.0" 904 | source = "registry+https://github.com/rust-lang/crates.io-index" 905 | dependencies = [ 906 | "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", 907 | ] 908 | 909 | [[package]] 910 | name = "unicode-bidi" 911 | version = "0.3.4" 912 | source = "registry+https://github.com/rust-lang/crates.io-index" 913 | dependencies = [ 914 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 915 | ] 916 | 917 | [[package]] 918 | name = "unicode-normalization" 919 | version = "0.1.12" 920 | source = "registry+https://github.com/rust-lang/crates.io-index" 921 | dependencies = [ 922 | "smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 923 | ] 924 | 925 | [[package]] 926 | name = "unicode-width" 927 | version = "0.1.7" 928 | source = "registry+https://github.com/rust-lang/crates.io-index" 929 | 930 | [[package]] 931 | name = "unicode-xid" 932 | version = "0.2.0" 933 | source = "registry+https://github.com/rust-lang/crates.io-index" 934 | 935 | [[package]] 936 | name = "url" 937 | version = "2.1.1" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | dependencies = [ 940 | "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 941 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 942 | "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 943 | ] 944 | 945 | [[package]] 946 | name = "vcpkg" 947 | version = "0.2.8" 948 | source = "registry+https://github.com/rust-lang/crates.io-index" 949 | 950 | [[package]] 951 | name = "vec_map" 952 | version = "0.8.1" 953 | source = "registry+https://github.com/rust-lang/crates.io-index" 954 | 955 | [[package]] 956 | name = "version_check" 957 | version = "0.9.1" 958 | source = "registry+https://github.com/rust-lang/crates.io-index" 959 | 960 | [[package]] 961 | name = "want" 962 | version = "0.3.0" 963 | source = "registry+https://github.com/rust-lang/crates.io-index" 964 | dependencies = [ 965 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 966 | "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 967 | ] 968 | 969 | [[package]] 970 | name = "wasi" 971 | version = "0.9.0+wasi-snapshot-preview1" 972 | source = "registry+https://github.com/rust-lang/crates.io-index" 973 | 974 | [[package]] 975 | name = "wasm-bindgen" 976 | version = "0.2.62" 977 | source = "registry+https://github.com/rust-lang/crates.io-index" 978 | dependencies = [ 979 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 980 | "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", 981 | "serde_json 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)", 982 | "wasm-bindgen-macro 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 983 | ] 984 | 985 | [[package]] 986 | name = "wasm-bindgen-backend" 987 | version = "0.2.62" 988 | source = "registry+https://github.com/rust-lang/crates.io-index" 989 | dependencies = [ 990 | "bumpalo 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 991 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 992 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 993 | "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", 994 | "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 995 | "syn 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", 996 | "wasm-bindgen-shared 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 997 | ] 998 | 999 | [[package]] 1000 | name = "wasm-bindgen-futures" 1001 | version = "0.4.12" 1002 | source = "registry+https://github.com/rust-lang/crates.io-index" 1003 | dependencies = [ 1004 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1005 | "js-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", 1006 | "wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 1007 | "web-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", 1008 | ] 1009 | 1010 | [[package]] 1011 | name = "wasm-bindgen-macro" 1012 | version = "0.2.62" 1013 | source = "registry+https://github.com/rust-lang/crates.io-index" 1014 | dependencies = [ 1015 | "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1016 | "wasm-bindgen-macro-support 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 1017 | ] 1018 | 1019 | [[package]] 1020 | name = "wasm-bindgen-macro-support" 1021 | version = "0.2.62" 1022 | source = "registry+https://github.com/rust-lang/crates.io-index" 1023 | dependencies = [ 1024 | "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", 1025 | "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1026 | "syn 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", 1027 | "wasm-bindgen-backend 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 1028 | "wasm-bindgen-shared 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 1029 | ] 1030 | 1031 | [[package]] 1032 | name = "wasm-bindgen-shared" 1033 | version = "0.2.62" 1034 | source = "registry+https://github.com/rust-lang/crates.io-index" 1035 | 1036 | [[package]] 1037 | name = "web-sys" 1038 | version = "0.3.39" 1039 | source = "registry+https://github.com/rust-lang/crates.io-index" 1040 | dependencies = [ 1041 | "js-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", 1042 | "wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", 1043 | ] 1044 | 1045 | [[package]] 1046 | name = "winapi" 1047 | version = "0.2.8" 1048 | source = "registry+https://github.com/rust-lang/crates.io-index" 1049 | 1050 | [[package]] 1051 | name = "winapi" 1052 | version = "0.3.8" 1053 | source = "registry+https://github.com/rust-lang/crates.io-index" 1054 | dependencies = [ 1055 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1056 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1057 | ] 1058 | 1059 | [[package]] 1060 | name = "winapi-build" 1061 | version = "0.1.1" 1062 | source = "registry+https://github.com/rust-lang/crates.io-index" 1063 | 1064 | [[package]] 1065 | name = "winapi-i686-pc-windows-gnu" 1066 | version = "0.4.0" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | 1069 | [[package]] 1070 | name = "winapi-util" 1071 | version = "0.1.5" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | dependencies = [ 1074 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1075 | ] 1076 | 1077 | [[package]] 1078 | name = "winapi-x86_64-pc-windows-gnu" 1079 | version = "0.4.0" 1080 | source = "registry+https://github.com/rust-lang/crates.io-index" 1081 | 1082 | [[package]] 1083 | name = "winreg" 1084 | version = "0.6.2" 1085 | source = "registry+https://github.com/rust-lang/crates.io-index" 1086 | dependencies = [ 1087 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1088 | ] 1089 | 1090 | [[package]] 1091 | name = "ws2_32-sys" 1092 | version = "0.2.1" 1093 | source = "registry+https://github.com/rust-lang/crates.io-index" 1094 | dependencies = [ 1095 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1096 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1097 | ] 1098 | 1099 | [metadata] 1100 | "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" 1101 | "checksum anyhow 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)" = "d9a60d744a80c30fcb657dfe2c1b22bcb3e814c1a1e3674f32bf5820b570fbff" 1102 | "checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 1103 | "checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" 1104 | "checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" 1105 | "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 1106 | "checksum bumpalo 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187" 1107 | "checksum bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" 1108 | "checksum cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)" = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d" 1109 | "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 1110 | "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" 1111 | "checksum console 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dea0f3e2e8d7dba335e913b97f9e1992c86c4399d54f8be1d31c8727d0652064" 1112 | "checksum core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" 1113 | "checksum core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" 1114 | "checksum dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" 1115 | "checksum encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" 1116 | "checksum encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)" = "cd8d03faa7fe0c1431609dfad7bbe827af30f82e1e2ae6f7ee4fca6bd764bc28" 1117 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 1118 | "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1119 | "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1120 | "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 1121 | "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 1122 | "checksum futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5c329ae8753502fb44ae4fc2b622fa2a94652c41e795143765ba0927f92ab780" 1123 | "checksum futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c77d04ce8edd9cb903932b608268b3fffec4163dc053b3b402bf47eac1f1a8" 1124 | "checksum futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a" 1125 | "checksum futures-executor 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f674f3e1bcb15b37284a90cedf55afdba482ab061c407a9c0ebbd0f3109741ba" 1126 | "checksum futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6" 1127 | "checksum futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" 1128 | "checksum futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3466821b4bc114d95b087b850a724c6f83115e929bc88f1fa98a3304a944c8a6" 1129 | "checksum futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27" 1130 | "checksum futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" 1131 | "checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" 1132 | "checksum h2 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "377038bf3c89d18d6ca1431e7a5027194fbd724ca10592b9487ede5e8e144f42" 1133 | "checksum hermit-abi 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "61565ff7aaace3525556587bd2dc31d4a07071957be715e63ce7b1eccf51a8f4" 1134 | "checksum http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9" 1135 | "checksum http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" 1136 | "checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" 1137 | "checksum hyper 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)" = "96816e1d921eca64d208a85aab4f7798455a8e34229ee5a88c935bdee1b78b14" 1138 | "checksum hyper-tls 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3adcd308402b9553630734e9c36b77a7e48b3821251ca2493e8cd596763aafaa" 1139 | "checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" 1140 | "checksum indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292" 1141 | "checksum indicatif 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a68371cf417889c9d7f98235b7102ea7c54fc59bcbd22f3dea785be9d27e40" 1142 | "checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" 1143 | "checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" 1144 | "checksum js-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5a448de267e7358beaf4a5d849518fe9a0c13fce7afd44b06e68550e5562a7" 1145 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1146 | "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1147 | "checksum libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)" = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005" 1148 | "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" 1149 | "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" 1150 | "checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" 1151 | "checksum mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 1152 | "checksum mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" 1153 | "checksum mio 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)" = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430" 1154 | "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" 1155 | "checksum native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" 1156 | "checksum net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)" = "2ba7c918ac76704fb42afcbbb43891e72731f3dcca3bef2a19786297baf14af7" 1157 | "checksum number_prefix 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b02fc0ff9a9e4b35b3342880f48e896ebf69f2967921fe8646bf5b7125956a" 1158 | "checksum openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)" = "cee6d85f4cb4c4f59a6a85d5b68a233d280c82e29e822913b9c8b129fbf20bdd" 1159 | "checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" 1160 | "checksum openssl-sys 0.9.55 (registry+https://github.com/rust-lang/crates.io-index)" = "7717097d810a0f2e2323f9e5d11e71608355e24828410b55b9d4f18aa5f9a5d8" 1161 | "checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 1162 | "checksum pin-project 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "36e3dcd42688c05a66f841d22c5d8390d9a5d4c9aaf57b9285eae4900a080063" 1163 | "checksum pin-project-internal 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "f4d7346ac577ff1296e06a418e7618e22655bae834d4970cb6e39d6da8119969" 1164 | "checksum pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "237844750cfbb86f67afe27eee600dfbbcb6188d734139b534cbfbf4f96792ae" 1165 | "checksum pin-utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1166 | "checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" 1167 | "checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" 1168 | "checksum proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)" = "0d659fe7c6d27f25e9d80a1a094c223f5246f6a6596453e09d7229bf42750b63" 1169 | "checksum proc-macro-nested 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694" 1170 | "checksum proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)" = "8872cf6f48eee44265156c111456a700ab3483686b3f96df4cf5481c89157319" 1171 | "checksum quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4c1f4b0efa5fc5e8ceb705136bfee52cfdb6a4e3509f770b478cd6ed434232a7" 1172 | "checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 1173 | "checksum rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 1174 | "checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 1175 | "checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 1176 | "checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" 1177 | "checksum regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a6020f034922e3194c711b82a627453881bc4682166cabb07134a10c26ba7692" 1178 | "checksum regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae" 1179 | "checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" 1180 | "checksum reqwest 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)" = "02b81e49ddec5109a9dcfc5f2a317ff53377c915e9ae9d4f2fb50914b85614e2" 1181 | "checksum ryu 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ed3d612bc64430efeb3f7ee6ef26d590dce0c43249217bddc62112540c7941e1" 1182 | "checksum schannel 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "039c25b130bd8c1321ee2d7de7fde2659fa9c2744e4bb29711cfc852ea53cd19" 1183 | "checksum security-framework 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3f331b9025654145cd425b9ded0caf8f5ae0df80d418b326e2dc1c3dc5eb0620" 1184 | "checksum security-framework-sys 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405" 1185 | "checksum serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399" 1186 | "checksum serde_json 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)" = "a7894c8ed05b7a3a279aeb79025fdec1d3158080b75b98a08faf2806bb799edd" 1187 | "checksum serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" 1188 | "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" 1189 | "checksum smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4" 1190 | "checksum strfmt 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b278b244ef7aa5852b277f52dd0c6cac3a109919e1f6d699adde63251227a30f" 1191 | "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 1192 | "checksum syn 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)" = "410a7488c0a728c7ceb4ad59b9567eb4053d02e8cc7f5c0e0eeeb39518369213" 1193 | "checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" 1194 | "checksum terminal_size 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "8038f95fc7a6f351163f4b964af631bd26c9e828f7db085f2a84aca56f70d13b" 1195 | "checksum termios 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6f0fcee7b24a25675de40d5bb4de6e41b0df07bc9856295e7e2b3a3600c400c2" 1196 | "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 1197 | "checksum time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" 1198 | "checksum tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)" = "05c1d570eb1a36f0345a5ce9c6c6e665b70b73d11236912c0b477616aeec47b1" 1199 | "checksum tokio-macros 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c3acc6aa564495a0f2e1d59fab677cd7f81a19994cfc7f3ad0e64301560389" 1200 | "checksum tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7bde02a3a5291395f59b06ec6945a3077602fac2b07eeeaf0dee2122f3619828" 1201 | "checksum tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" 1202 | "checksum tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860" 1203 | "checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" 1204 | "checksum unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" 1205 | "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1206 | "checksum unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" 1207 | "checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" 1208 | "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" 1209 | "checksum url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" 1210 | "checksum vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" 1211 | "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" 1212 | "checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" 1213 | "checksum want 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" 1214 | "checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 1215 | "checksum wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "e3c7d40d09cdbf0f4895ae58cf57d92e1e57a9dd8ed2e8390514b54a47cc5551" 1216 | "checksum wasm-bindgen-backend 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "c3972e137ebf830900db522d6c8fd74d1900dcfc733462e9a12e942b00b4ac94" 1217 | "checksum wasm-bindgen-futures 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "8a369c5e1dfb7569e14d62af4da642a3cbc2f9a3652fe586e26ac22222aa4b04" 1218 | "checksum wasm-bindgen-macro 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "2cd85aa2c579e8892442954685f0d801f9129de24fa2136b2c6a539c76b65776" 1219 | "checksum wasm-bindgen-macro-support 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "8eb197bd3a47553334907ffd2f16507b4f4f01bbec3ac921a7719e0decdfe72a" 1220 | "checksum wasm-bindgen-shared 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "a91c2916119c17a8e316507afaaa2dd94b47646048014bbdf6bef098c1bb58ad" 1221 | "checksum web-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)" = "8bc359e5dd3b46cb9687a051d50a2fdd228e4ba7cf6fcf861a5365c3d671a642" 1222 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1223 | "checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" 1224 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 1225 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1226 | "checksum winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 1227 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1228 | "checksum winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" 1229 | "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 1230 | --------------------------------------------------------------------------------