├── .gitignore ├── .github └── FUNDING.yml ├── src ├── main.rs └── lib.rs ├── Cargo.toml ├── LICENSE ├── README.md └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | a7106d3f-82ae-4fc6-b752-48e4bacf4a96.flac 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: 0pandadev 2 | buy_me_a_coffee: pandadev_ 3 | ko_fi: pandadev_ 4 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use downcida::{Downcida, AudioFormat}; 2 | use std::env; 3 | 4 | #[tokio::main] 5 | async fn main() -> Result<(), Box> { 6 | Downcida::download("5xPcP28rWbFUlYDOhcH58l", env::current_dir()?, Some("AU"), AudioFormat::FLAC).await?; 7 | Ok(()) 8 | } -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "downcida" 3 | version = "0.1.3" 4 | edition = "2021" 5 | description = "A Rust crate to download audio files using the Lucida API" 6 | license = "MIT" 7 | repository = "https://github.com/0pandadev/downcida" 8 | readme = "README.md" 9 | authors = ["PandaDEV"] 10 | 11 | [dependencies] 12 | reqwest = { version = "0.12.7", features = ["json"] } 13 | serde_json = "1.0.97" 14 | tokio = { version = "1.28.2", features = ["full"] } 15 | indicatif = "0.17.8" 16 | 17 | [lib] 18 | name = "downcida" 19 | path = "src/lib.rs" 20 | 21 | [[bin]] 22 | name = "downcida" 23 | path = "src/main.rs" 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 PandaDEV 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 | ### **This crate does currently not work because of a Token that is needed! see [#1](https://github.com/0PandaDEV/downcida/issues/1)** 2 | 3 | # Downcida 4 | 5 | Downcida is a Rust crate that allows you to download Spotify tracks using the [Lucida API](https://lucida.to/). It provides a simple interface to download audio files from Spotify tracks and save them to a specified directory. 6 | 7 | ## Features 8 | 9 | - [x] Different download Formats (FLAC, WAV, OGG, OPUS, M4A, MP3 e.g) 10 | - [x] Spotify 11 | - [ ] Qobuz 12 | - [ ] Tidal 13 | - [ ] Soundcloud 14 | - [ ] Deezer 15 | - [ ] Amazon Music 16 | - [ ] Beatport 17 | 18 | ## Installation 19 | 20 | Add this to your `Cargo.toml`: 21 | 22 | ```toml 23 | [dependencies] 24 | downcida = "0.1.3" 25 | ``` 26 | 27 | ## Usage 28 | 29 | Here's a basic example of how to use Downcida: 30 | 31 | ```rs 32 | use downcida::{Downcida, AudioFormat}; 33 | use std::env; 34 | 35 | #[tokio::main] 36 | async fn main() -> Result<(), Box> { 37 | Downcida::download("5xPcP28rWbFUlYDOhcH58l", env::current_dir()?, Some("US"), AudioFormat::FLAC).await?; 38 | Ok(()) 39 | } 40 | ``` 41 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | use indicatif::{ProgressBar, ProgressStyle}; 2 | use reqwest::Client; 3 | use serde_json::Value; 4 | use std::fs::File; 5 | use std::io::Write; 6 | use std::path::PathBuf; 7 | use std::time::Instant; 8 | 9 | #[macro_export] 10 | macro_rules! downcida_err { 11 | ($($arg:tt)*) => { 12 | Err(Box::new(std::io::Error::new(std::io::ErrorKind::Other, format!($($arg)*)))) 13 | }; 14 | } 15 | 16 | #[macro_export] 17 | macro_rules! download_track { 18 | ($spotify_id:expr, $output_dir:expr, $country:expr, $format:expr) => { 19 | Downcida::download($spotify_id, $output_dir, $country, $format).await 20 | }; 21 | } 22 | 23 | pub struct Downcida; 24 | 25 | #[derive(Debug, Clone, Copy)] 26 | pub enum AudioFormat { 27 | FLAC, 28 | M4A, 29 | MP3, 30 | OGG, 31 | OPUS, 32 | WAV, 33 | } 34 | 35 | impl AudioFormat { 36 | fn to_downscale_string(&self) -> &'static str { 37 | match self { 38 | AudioFormat::FLAC => "flac-16", 39 | AudioFormat::M4A => "m4a-320", 40 | AudioFormat::MP3 => "mp3-320", 41 | AudioFormat::OGG => "ogg-320", 42 | AudioFormat::OPUS => "opus-320", 43 | AudioFormat::WAV => "wav", 44 | } 45 | } 46 | 47 | fn to_extension(&self) -> &'static str { 48 | match self { 49 | AudioFormat::FLAC => "flac", 50 | AudioFormat::M4A => "m4a", 51 | AudioFormat::MP3 => "mp3", 52 | AudioFormat::OGG => "ogg", 53 | AudioFormat::OPUS => "opus", 54 | AudioFormat::WAV => "wav", 55 | } 56 | } 57 | } 58 | 59 | impl Downcida { 60 | /// Downloads a track from Spotify and saves it as an audio file. 61 | /// 62 | /// # Arguments 63 | /// 64 | /// * `spotify_id` - A string slice that holds the Spotify track ID. 65 | /// * `output_dir` - A PathBuf representing the directory where the downloaded file will be saved. 66 | /// * `country` - An optional string slice specifying the country code for the download region. 67 | /// * `format` - An AudioFormat enum specifying the desired audio format for the download. 68 | /// 69 | /// # Example 70 | /// 71 | /// ``` 72 | /// use downcida::{Downcida, AudioFormat}; 73 | /// use std::env; 74 | 75 | /// #[tokio::main] 76 | /// async fn main() -> Result<(), Box> { 77 | /// Downcida::download("5xPcP28rWbFUlYDOhcH58l", env::current_dir()?, Some("US"), AudioFormat::FLAC).await?; 78 | /// Ok(()) 79 | /// } 80 | /// ``` 81 | /// 82 | /// # Errors 83 | /// 84 | /// This function will return an error if the download process fails at any stage, 85 | /// such as network issues, API errors, or file system problems. 86 | pub async fn download( 87 | spotify_id: &str, 88 | output_dir: PathBuf, 89 | country: Option<&str>, 90 | format: AudioFormat, 91 | ) -> Result<(PathBuf, u128), Box> { 92 | let start_time = Instant::now(); 93 | let spinner_style = ProgressStyle::default_spinner() 94 | .tick_chars("⠁⠂⠄⡀⢀⠠⠐⠈ ") 95 | .template("{spinner:.green} {msg}") 96 | .unwrap(); 97 | 98 | let progress_bar = ProgressBar::new_spinner(); 99 | progress_bar.set_style(spinner_style); 100 | 101 | progress_bar.set_message(format!("Starting download for Spotify ID: {}", spotify_id)); 102 | let client = Client::new(); 103 | let spotify_url = format!("https://open.spotify.com/track/{}", spotify_id); 104 | let country = country.unwrap_or("auto"); 105 | 106 | let initial_request = serde_json::json!({ 107 | "account": { 108 | "id": country, 109 | "type": "country" 110 | }, 111 | "downscale": format.to_downscale_string(), 112 | "handoff": true, 113 | "metadata": false, 114 | "private": true, 115 | "token": { 116 | "expiry": 1727529052, 117 | "primary": "qwUGICHFtvwf98Jfn5m3L6E_O5U" 118 | }, 119 | "upload": { 120 | "enabled": false, 121 | "service": "pixeldrain" 122 | }, 123 | "url": spotify_url 124 | }); 125 | 126 | progress_bar.set_message("Sending initial request to Lucida API"); 127 | let response = client 128 | .post("https://lucida.to/api/load?url=/api/fetch/stream/v2") 129 | .json(&initial_request) 130 | .send() 131 | .await?; 132 | 133 | let initial_response: Value = response.json().await?; 134 | 135 | if !initial_response["success"].as_bool().unwrap_or(false) { 136 | let error_message = initial_response["error"].as_str().unwrap_or("Unknown error"); 137 | progress_bar.finish_with_message(format!("❌ Initial request failed: {}", error_message)); 138 | return downcida_err!("Initial request failed: {}. Please check the Spotify ID and try again.", error_message); 139 | } 140 | 141 | let handoff = initial_response["handoff"].as_str().ok_or("No handoff value in response")?; 142 | let server = initial_response["server"].as_str().ok_or("No server value in response")?; 143 | 144 | let completion_url = format!("https://{}.lucida.to/api/fetch/request/{}", server, handoff); 145 | 146 | progress_bar.set_message("Waiting for track processing to complete"); 147 | loop { 148 | let completion_response: Value = client.get(&completion_url).send().await?.json().await?; 149 | 150 | if completion_response["status"].as_str() == Some("completed") { 151 | break; 152 | } 153 | 154 | if completion_response["status"].as_str() == Some("error") { 155 | let error_message = completion_response["message"].as_str().unwrap_or("Unknown error"); 156 | progress_bar.finish_with_message(format!("❌ API request failed: {}", error_message)); 157 | return downcida_err!("API request failed: {}", error_message); 158 | } 159 | 160 | progress_bar.tick(); 161 | tokio::time::sleep(tokio::time::Duration::from_secs(1)).await; 162 | } 163 | 164 | let download_url = format!("https://{}.lucida.to/api/fetch/request/{}/download", server, handoff); 165 | progress_bar.set_message("Starting file download"); 166 | let mut download_response = client.get(&download_url).send().await?; 167 | 168 | let file_extension = format.to_extension(); 169 | let file_name = format!("{}.{}", handoff, file_extension); 170 | let output_path = output_dir.join(&file_name); 171 | 172 | let mut file = File::create(&output_path)?; 173 | 174 | let total_size = download_response.content_length().unwrap_or(0); 175 | let progress_style = ProgressStyle::default_bar() 176 | .template("[{elapsed_precise}] {bar:40.cyan/blue} {bytes}/{total_bytes} ({eta}) {bytes_per_sec}") 177 | .unwrap() 178 | .progress_chars("##-"); 179 | 180 | let download_progress = ProgressBar::new(total_size); 181 | download_progress.set_style(progress_style); 182 | 183 | while let Some(chunk) = download_response.chunk().await? { 184 | file.write_all(&chunk)?; 185 | download_progress.inc(chunk.len() as u64); 186 | } 187 | 188 | download_progress.finish_with_message("Download completed"); 189 | 190 | let duration = start_time.elapsed().as_millis(); 191 | println!("✅ Download completed: {} in {} ms", output_path.display(), duration); 192 | Ok((output_path, duration)) 193 | } 194 | } -------------------------------------------------------------------------------- /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 = "addr2line" 7 | version = "0.24.1" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler2" 16 | version = "2.0.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 | 20 | [[package]] 21 | name = "atomic-waker" 22 | version = "1.1.2" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 25 | 26 | [[package]] 27 | name = "autocfg" 28 | version = "1.3.0" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 31 | 32 | [[package]] 33 | name = "backtrace" 34 | version = "0.3.74" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 37 | dependencies = [ 38 | "addr2line", 39 | "cfg-if", 40 | "libc", 41 | "miniz_oxide", 42 | "object", 43 | "rustc-demangle", 44 | "windows-targets", 45 | ] 46 | 47 | [[package]] 48 | name = "base64" 49 | version = "0.22.1" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 52 | 53 | [[package]] 54 | name = "bitflags" 55 | version = "2.6.0" 56 | source = "registry+https://github.com/rust-lang/crates.io-index" 57 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 58 | 59 | [[package]] 60 | name = "bumpalo" 61 | version = "3.16.0" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 64 | 65 | [[package]] 66 | name = "bytes" 67 | version = "1.7.2" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" 70 | 71 | [[package]] 72 | name = "cc" 73 | version = "1.1.21" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" 76 | dependencies = [ 77 | "shlex", 78 | ] 79 | 80 | [[package]] 81 | name = "cfg-if" 82 | version = "1.0.0" 83 | source = "registry+https://github.com/rust-lang/crates.io-index" 84 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 85 | 86 | [[package]] 87 | name = "console" 88 | version = "0.15.8" 89 | source = "registry+https://github.com/rust-lang/crates.io-index" 90 | checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" 91 | dependencies = [ 92 | "encode_unicode", 93 | "lazy_static", 94 | "libc", 95 | "unicode-width", 96 | "windows-sys 0.52.0", 97 | ] 98 | 99 | [[package]] 100 | name = "core-foundation" 101 | version = "0.9.4" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 104 | dependencies = [ 105 | "core-foundation-sys", 106 | "libc", 107 | ] 108 | 109 | [[package]] 110 | name = "core-foundation-sys" 111 | version = "0.8.7" 112 | source = "registry+https://github.com/rust-lang/crates.io-index" 113 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 114 | 115 | [[package]] 116 | name = "downcida" 117 | version = "0.1.3" 118 | dependencies = [ 119 | "indicatif", 120 | "reqwest", 121 | "serde_json", 122 | "tokio", 123 | ] 124 | 125 | [[package]] 126 | name = "encode_unicode" 127 | version = "0.3.6" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" 130 | 131 | [[package]] 132 | name = "encoding_rs" 133 | version = "0.8.34" 134 | source = "registry+https://github.com/rust-lang/crates.io-index" 135 | checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" 136 | dependencies = [ 137 | "cfg-if", 138 | ] 139 | 140 | [[package]] 141 | name = "equivalent" 142 | version = "1.0.1" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 145 | 146 | [[package]] 147 | name = "errno" 148 | version = "0.3.9" 149 | source = "registry+https://github.com/rust-lang/crates.io-index" 150 | checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 151 | dependencies = [ 152 | "libc", 153 | "windows-sys 0.52.0", 154 | ] 155 | 156 | [[package]] 157 | name = "fastrand" 158 | version = "2.1.1" 159 | source = "registry+https://github.com/rust-lang/crates.io-index" 160 | checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" 161 | 162 | [[package]] 163 | name = "fnv" 164 | version = "1.0.7" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 167 | 168 | [[package]] 169 | name = "foreign-types" 170 | version = "0.3.2" 171 | source = "registry+https://github.com/rust-lang/crates.io-index" 172 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 173 | dependencies = [ 174 | "foreign-types-shared", 175 | ] 176 | 177 | [[package]] 178 | name = "foreign-types-shared" 179 | version = "0.1.1" 180 | source = "registry+https://github.com/rust-lang/crates.io-index" 181 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 182 | 183 | [[package]] 184 | name = "form_urlencoded" 185 | version = "1.2.1" 186 | source = "registry+https://github.com/rust-lang/crates.io-index" 187 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 188 | dependencies = [ 189 | "percent-encoding", 190 | ] 191 | 192 | [[package]] 193 | name = "futures-channel" 194 | version = "0.3.30" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 197 | dependencies = [ 198 | "futures-core", 199 | ] 200 | 201 | [[package]] 202 | name = "futures-core" 203 | version = "0.3.30" 204 | source = "registry+https://github.com/rust-lang/crates.io-index" 205 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 206 | 207 | [[package]] 208 | name = "futures-sink" 209 | version = "0.3.30" 210 | source = "registry+https://github.com/rust-lang/crates.io-index" 211 | checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 212 | 213 | [[package]] 214 | name = "futures-task" 215 | version = "0.3.30" 216 | source = "registry+https://github.com/rust-lang/crates.io-index" 217 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 218 | 219 | [[package]] 220 | name = "futures-util" 221 | version = "0.3.30" 222 | source = "registry+https://github.com/rust-lang/crates.io-index" 223 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 224 | dependencies = [ 225 | "futures-core", 226 | "futures-task", 227 | "pin-project-lite", 228 | "pin-utils", 229 | ] 230 | 231 | [[package]] 232 | name = "getrandom" 233 | version = "0.2.15" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 236 | dependencies = [ 237 | "cfg-if", 238 | "libc", 239 | "wasi", 240 | ] 241 | 242 | [[package]] 243 | name = "gimli" 244 | version = "0.31.0" 245 | source = "registry+https://github.com/rust-lang/crates.io-index" 246 | checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" 247 | 248 | [[package]] 249 | name = "h2" 250 | version = "0.4.6" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" 253 | dependencies = [ 254 | "atomic-waker", 255 | "bytes", 256 | "fnv", 257 | "futures-core", 258 | "futures-sink", 259 | "http", 260 | "indexmap", 261 | "slab", 262 | "tokio", 263 | "tokio-util", 264 | "tracing", 265 | ] 266 | 267 | [[package]] 268 | name = "hashbrown" 269 | version = "0.14.5" 270 | source = "registry+https://github.com/rust-lang/crates.io-index" 271 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 272 | 273 | [[package]] 274 | name = "hermit-abi" 275 | version = "0.3.9" 276 | source = "registry+https://github.com/rust-lang/crates.io-index" 277 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 278 | 279 | [[package]] 280 | name = "http" 281 | version = "1.1.0" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" 284 | dependencies = [ 285 | "bytes", 286 | "fnv", 287 | "itoa", 288 | ] 289 | 290 | [[package]] 291 | name = "http-body" 292 | version = "1.0.1" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 295 | dependencies = [ 296 | "bytes", 297 | "http", 298 | ] 299 | 300 | [[package]] 301 | name = "http-body-util" 302 | version = "0.1.2" 303 | source = "registry+https://github.com/rust-lang/crates.io-index" 304 | checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" 305 | dependencies = [ 306 | "bytes", 307 | "futures-util", 308 | "http", 309 | "http-body", 310 | "pin-project-lite", 311 | ] 312 | 313 | [[package]] 314 | name = "httparse" 315 | version = "1.9.4" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" 318 | 319 | [[package]] 320 | name = "hyper" 321 | version = "1.4.1" 322 | source = "registry+https://github.com/rust-lang/crates.io-index" 323 | checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" 324 | dependencies = [ 325 | "bytes", 326 | "futures-channel", 327 | "futures-util", 328 | "h2", 329 | "http", 330 | "http-body", 331 | "httparse", 332 | "itoa", 333 | "pin-project-lite", 334 | "smallvec", 335 | "tokio", 336 | "want", 337 | ] 338 | 339 | [[package]] 340 | name = "hyper-rustls" 341 | version = "0.27.3" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" 344 | dependencies = [ 345 | "futures-util", 346 | "http", 347 | "hyper", 348 | "hyper-util", 349 | "rustls", 350 | "rustls-pki-types", 351 | "tokio", 352 | "tokio-rustls", 353 | "tower-service", 354 | ] 355 | 356 | [[package]] 357 | name = "hyper-tls" 358 | version = "0.6.0" 359 | source = "registry+https://github.com/rust-lang/crates.io-index" 360 | checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 361 | dependencies = [ 362 | "bytes", 363 | "http-body-util", 364 | "hyper", 365 | "hyper-util", 366 | "native-tls", 367 | "tokio", 368 | "tokio-native-tls", 369 | "tower-service", 370 | ] 371 | 372 | [[package]] 373 | name = "hyper-util" 374 | version = "0.1.9" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" 377 | dependencies = [ 378 | "bytes", 379 | "futures-channel", 380 | "futures-util", 381 | "http", 382 | "http-body", 383 | "hyper", 384 | "pin-project-lite", 385 | "socket2", 386 | "tokio", 387 | "tower-service", 388 | "tracing", 389 | ] 390 | 391 | [[package]] 392 | name = "idna" 393 | version = "0.5.0" 394 | source = "registry+https://github.com/rust-lang/crates.io-index" 395 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 396 | dependencies = [ 397 | "unicode-bidi", 398 | "unicode-normalization", 399 | ] 400 | 401 | [[package]] 402 | name = "indexmap" 403 | version = "2.5.0" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" 406 | dependencies = [ 407 | "equivalent", 408 | "hashbrown", 409 | ] 410 | 411 | [[package]] 412 | name = "indicatif" 413 | version = "0.17.8" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" 416 | dependencies = [ 417 | "console", 418 | "instant", 419 | "number_prefix", 420 | "portable-atomic", 421 | "unicode-width", 422 | ] 423 | 424 | [[package]] 425 | name = "instant" 426 | version = "0.1.13" 427 | source = "registry+https://github.com/rust-lang/crates.io-index" 428 | checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" 429 | dependencies = [ 430 | "cfg-if", 431 | ] 432 | 433 | [[package]] 434 | name = "ipnet" 435 | version = "2.10.0" 436 | source = "registry+https://github.com/rust-lang/crates.io-index" 437 | checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" 438 | 439 | [[package]] 440 | name = "itoa" 441 | version = "1.0.11" 442 | source = "registry+https://github.com/rust-lang/crates.io-index" 443 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 444 | 445 | [[package]] 446 | name = "js-sys" 447 | version = "0.3.70" 448 | source = "registry+https://github.com/rust-lang/crates.io-index" 449 | checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" 450 | dependencies = [ 451 | "wasm-bindgen", 452 | ] 453 | 454 | [[package]] 455 | name = "lazy_static" 456 | version = "1.5.0" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 459 | 460 | [[package]] 461 | name = "libc" 462 | version = "0.2.158" 463 | source = "registry+https://github.com/rust-lang/crates.io-index" 464 | checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" 465 | 466 | [[package]] 467 | name = "linux-raw-sys" 468 | version = "0.4.14" 469 | source = "registry+https://github.com/rust-lang/crates.io-index" 470 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 471 | 472 | [[package]] 473 | name = "lock_api" 474 | version = "0.4.12" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 477 | dependencies = [ 478 | "autocfg", 479 | "scopeguard", 480 | ] 481 | 482 | [[package]] 483 | name = "log" 484 | version = "0.4.22" 485 | source = "registry+https://github.com/rust-lang/crates.io-index" 486 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 487 | 488 | [[package]] 489 | name = "memchr" 490 | version = "2.7.4" 491 | source = "registry+https://github.com/rust-lang/crates.io-index" 492 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 493 | 494 | [[package]] 495 | name = "mime" 496 | version = "0.3.17" 497 | source = "registry+https://github.com/rust-lang/crates.io-index" 498 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 499 | 500 | [[package]] 501 | name = "miniz_oxide" 502 | version = "0.8.0" 503 | source = "registry+https://github.com/rust-lang/crates.io-index" 504 | checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" 505 | dependencies = [ 506 | "adler2", 507 | ] 508 | 509 | [[package]] 510 | name = "mio" 511 | version = "1.0.2" 512 | source = "registry+https://github.com/rust-lang/crates.io-index" 513 | checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" 514 | dependencies = [ 515 | "hermit-abi", 516 | "libc", 517 | "wasi", 518 | "windows-sys 0.52.0", 519 | ] 520 | 521 | [[package]] 522 | name = "native-tls" 523 | version = "0.2.12" 524 | source = "registry+https://github.com/rust-lang/crates.io-index" 525 | checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" 526 | dependencies = [ 527 | "libc", 528 | "log", 529 | "openssl", 530 | "openssl-probe", 531 | "openssl-sys", 532 | "schannel", 533 | "security-framework", 534 | "security-framework-sys", 535 | "tempfile", 536 | ] 537 | 538 | [[package]] 539 | name = "number_prefix" 540 | version = "0.4.0" 541 | source = "registry+https://github.com/rust-lang/crates.io-index" 542 | checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" 543 | 544 | [[package]] 545 | name = "object" 546 | version = "0.36.4" 547 | source = "registry+https://github.com/rust-lang/crates.io-index" 548 | checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" 549 | dependencies = [ 550 | "memchr", 551 | ] 552 | 553 | [[package]] 554 | name = "once_cell" 555 | version = "1.19.0" 556 | source = "registry+https://github.com/rust-lang/crates.io-index" 557 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 558 | 559 | [[package]] 560 | name = "openssl" 561 | version = "0.10.66" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" 564 | dependencies = [ 565 | "bitflags", 566 | "cfg-if", 567 | "foreign-types", 568 | "libc", 569 | "once_cell", 570 | "openssl-macros", 571 | "openssl-sys", 572 | ] 573 | 574 | [[package]] 575 | name = "openssl-macros" 576 | version = "0.1.1" 577 | source = "registry+https://github.com/rust-lang/crates.io-index" 578 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 579 | dependencies = [ 580 | "proc-macro2", 581 | "quote", 582 | "syn", 583 | ] 584 | 585 | [[package]] 586 | name = "openssl-probe" 587 | version = "0.1.5" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 590 | 591 | [[package]] 592 | name = "openssl-sys" 593 | version = "0.9.103" 594 | source = "registry+https://github.com/rust-lang/crates.io-index" 595 | checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" 596 | dependencies = [ 597 | "cc", 598 | "libc", 599 | "pkg-config", 600 | "vcpkg", 601 | ] 602 | 603 | [[package]] 604 | name = "parking_lot" 605 | version = "0.12.3" 606 | source = "registry+https://github.com/rust-lang/crates.io-index" 607 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 608 | dependencies = [ 609 | "lock_api", 610 | "parking_lot_core", 611 | ] 612 | 613 | [[package]] 614 | name = "parking_lot_core" 615 | version = "0.9.10" 616 | source = "registry+https://github.com/rust-lang/crates.io-index" 617 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 618 | dependencies = [ 619 | "cfg-if", 620 | "libc", 621 | "redox_syscall", 622 | "smallvec", 623 | "windows-targets", 624 | ] 625 | 626 | [[package]] 627 | name = "percent-encoding" 628 | version = "2.3.1" 629 | source = "registry+https://github.com/rust-lang/crates.io-index" 630 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 631 | 632 | [[package]] 633 | name = "pin-project-lite" 634 | version = "0.2.14" 635 | source = "registry+https://github.com/rust-lang/crates.io-index" 636 | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 637 | 638 | [[package]] 639 | name = "pin-utils" 640 | version = "0.1.0" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 643 | 644 | [[package]] 645 | name = "pkg-config" 646 | version = "0.3.30" 647 | source = "registry+https://github.com/rust-lang/crates.io-index" 648 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 649 | 650 | [[package]] 651 | name = "portable-atomic" 652 | version = "1.8.0" 653 | source = "registry+https://github.com/rust-lang/crates.io-index" 654 | checksum = "d30538d42559de6b034bc76fd6dd4c38961b1ee5c6c56e3808c50128fdbc22ce" 655 | 656 | [[package]] 657 | name = "proc-macro2" 658 | version = "1.0.86" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" 661 | dependencies = [ 662 | "unicode-ident", 663 | ] 664 | 665 | [[package]] 666 | name = "quote" 667 | version = "1.0.37" 668 | source = "registry+https://github.com/rust-lang/crates.io-index" 669 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 670 | dependencies = [ 671 | "proc-macro2", 672 | ] 673 | 674 | [[package]] 675 | name = "redox_syscall" 676 | version = "0.5.4" 677 | source = "registry+https://github.com/rust-lang/crates.io-index" 678 | checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" 679 | dependencies = [ 680 | "bitflags", 681 | ] 682 | 683 | [[package]] 684 | name = "reqwest" 685 | version = "0.12.7" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" 688 | dependencies = [ 689 | "base64", 690 | "bytes", 691 | "encoding_rs", 692 | "futures-core", 693 | "futures-util", 694 | "h2", 695 | "http", 696 | "http-body", 697 | "http-body-util", 698 | "hyper", 699 | "hyper-rustls", 700 | "hyper-tls", 701 | "hyper-util", 702 | "ipnet", 703 | "js-sys", 704 | "log", 705 | "mime", 706 | "native-tls", 707 | "once_cell", 708 | "percent-encoding", 709 | "pin-project-lite", 710 | "rustls-pemfile", 711 | "serde", 712 | "serde_json", 713 | "serde_urlencoded", 714 | "sync_wrapper", 715 | "system-configuration", 716 | "tokio", 717 | "tokio-native-tls", 718 | "tower-service", 719 | "url", 720 | "wasm-bindgen", 721 | "wasm-bindgen-futures", 722 | "web-sys", 723 | "windows-registry", 724 | ] 725 | 726 | [[package]] 727 | name = "ring" 728 | version = "0.17.8" 729 | source = "registry+https://github.com/rust-lang/crates.io-index" 730 | checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" 731 | dependencies = [ 732 | "cc", 733 | "cfg-if", 734 | "getrandom", 735 | "libc", 736 | "spin", 737 | "untrusted", 738 | "windows-sys 0.52.0", 739 | ] 740 | 741 | [[package]] 742 | name = "rustc-demangle" 743 | version = "0.1.24" 744 | source = "registry+https://github.com/rust-lang/crates.io-index" 745 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 746 | 747 | [[package]] 748 | name = "rustix" 749 | version = "0.38.37" 750 | source = "registry+https://github.com/rust-lang/crates.io-index" 751 | checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" 752 | dependencies = [ 753 | "bitflags", 754 | "errno", 755 | "libc", 756 | "linux-raw-sys", 757 | "windows-sys 0.52.0", 758 | ] 759 | 760 | [[package]] 761 | name = "rustls" 762 | version = "0.23.13" 763 | source = "registry+https://github.com/rust-lang/crates.io-index" 764 | checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" 765 | dependencies = [ 766 | "once_cell", 767 | "rustls-pki-types", 768 | "rustls-webpki", 769 | "subtle", 770 | "zeroize", 771 | ] 772 | 773 | [[package]] 774 | name = "rustls-pemfile" 775 | version = "2.1.3" 776 | source = "registry+https://github.com/rust-lang/crates.io-index" 777 | checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" 778 | dependencies = [ 779 | "base64", 780 | "rustls-pki-types", 781 | ] 782 | 783 | [[package]] 784 | name = "rustls-pki-types" 785 | version = "1.8.0" 786 | source = "registry+https://github.com/rust-lang/crates.io-index" 787 | checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" 788 | 789 | [[package]] 790 | name = "rustls-webpki" 791 | version = "0.102.8" 792 | source = "registry+https://github.com/rust-lang/crates.io-index" 793 | checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" 794 | dependencies = [ 795 | "ring", 796 | "rustls-pki-types", 797 | "untrusted", 798 | ] 799 | 800 | [[package]] 801 | name = "ryu" 802 | version = "1.0.18" 803 | source = "registry+https://github.com/rust-lang/crates.io-index" 804 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 805 | 806 | [[package]] 807 | name = "schannel" 808 | version = "0.1.24" 809 | source = "registry+https://github.com/rust-lang/crates.io-index" 810 | checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" 811 | dependencies = [ 812 | "windows-sys 0.59.0", 813 | ] 814 | 815 | [[package]] 816 | name = "scopeguard" 817 | version = "1.2.0" 818 | source = "registry+https://github.com/rust-lang/crates.io-index" 819 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 820 | 821 | [[package]] 822 | name = "security-framework" 823 | version = "2.11.1" 824 | source = "registry+https://github.com/rust-lang/crates.io-index" 825 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 826 | dependencies = [ 827 | "bitflags", 828 | "core-foundation", 829 | "core-foundation-sys", 830 | "libc", 831 | "security-framework-sys", 832 | ] 833 | 834 | [[package]] 835 | name = "security-framework-sys" 836 | version = "2.12.0" 837 | source = "registry+https://github.com/rust-lang/crates.io-index" 838 | checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" 839 | dependencies = [ 840 | "core-foundation-sys", 841 | "libc", 842 | ] 843 | 844 | [[package]] 845 | name = "serde" 846 | version = "1.0.210" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" 849 | dependencies = [ 850 | "serde_derive", 851 | ] 852 | 853 | [[package]] 854 | name = "serde_derive" 855 | version = "1.0.210" 856 | source = "registry+https://github.com/rust-lang/crates.io-index" 857 | checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" 858 | dependencies = [ 859 | "proc-macro2", 860 | "quote", 861 | "syn", 862 | ] 863 | 864 | [[package]] 865 | name = "serde_json" 866 | version = "1.0.128" 867 | source = "registry+https://github.com/rust-lang/crates.io-index" 868 | checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" 869 | dependencies = [ 870 | "itoa", 871 | "memchr", 872 | "ryu", 873 | "serde", 874 | ] 875 | 876 | [[package]] 877 | name = "serde_urlencoded" 878 | version = "0.7.1" 879 | source = "registry+https://github.com/rust-lang/crates.io-index" 880 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 881 | dependencies = [ 882 | "form_urlencoded", 883 | "itoa", 884 | "ryu", 885 | "serde", 886 | ] 887 | 888 | [[package]] 889 | name = "shlex" 890 | version = "1.3.0" 891 | source = "registry+https://github.com/rust-lang/crates.io-index" 892 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 893 | 894 | [[package]] 895 | name = "signal-hook-registry" 896 | version = "1.4.2" 897 | source = "registry+https://github.com/rust-lang/crates.io-index" 898 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 899 | dependencies = [ 900 | "libc", 901 | ] 902 | 903 | [[package]] 904 | name = "slab" 905 | version = "0.4.9" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 908 | dependencies = [ 909 | "autocfg", 910 | ] 911 | 912 | [[package]] 913 | name = "smallvec" 914 | version = "1.13.2" 915 | source = "registry+https://github.com/rust-lang/crates.io-index" 916 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 917 | 918 | [[package]] 919 | name = "socket2" 920 | version = "0.5.7" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 923 | dependencies = [ 924 | "libc", 925 | "windows-sys 0.52.0", 926 | ] 927 | 928 | [[package]] 929 | name = "spin" 930 | version = "0.9.8" 931 | source = "registry+https://github.com/rust-lang/crates.io-index" 932 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 933 | 934 | [[package]] 935 | name = "subtle" 936 | version = "2.6.1" 937 | source = "registry+https://github.com/rust-lang/crates.io-index" 938 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 939 | 940 | [[package]] 941 | name = "syn" 942 | version = "2.0.77" 943 | source = "registry+https://github.com/rust-lang/crates.io-index" 944 | checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" 945 | dependencies = [ 946 | "proc-macro2", 947 | "quote", 948 | "unicode-ident", 949 | ] 950 | 951 | [[package]] 952 | name = "sync_wrapper" 953 | version = "1.0.1" 954 | source = "registry+https://github.com/rust-lang/crates.io-index" 955 | checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" 956 | dependencies = [ 957 | "futures-core", 958 | ] 959 | 960 | [[package]] 961 | name = "system-configuration" 962 | version = "0.6.1" 963 | source = "registry+https://github.com/rust-lang/crates.io-index" 964 | checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 965 | dependencies = [ 966 | "bitflags", 967 | "core-foundation", 968 | "system-configuration-sys", 969 | ] 970 | 971 | [[package]] 972 | name = "system-configuration-sys" 973 | version = "0.6.0" 974 | source = "registry+https://github.com/rust-lang/crates.io-index" 975 | checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 976 | dependencies = [ 977 | "core-foundation-sys", 978 | "libc", 979 | ] 980 | 981 | [[package]] 982 | name = "tempfile" 983 | version = "3.12.0" 984 | source = "registry+https://github.com/rust-lang/crates.io-index" 985 | checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" 986 | dependencies = [ 987 | "cfg-if", 988 | "fastrand", 989 | "once_cell", 990 | "rustix", 991 | "windows-sys 0.59.0", 992 | ] 993 | 994 | [[package]] 995 | name = "tinyvec" 996 | version = "1.8.0" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" 999 | dependencies = [ 1000 | "tinyvec_macros", 1001 | ] 1002 | 1003 | [[package]] 1004 | name = "tinyvec_macros" 1005 | version = "0.1.1" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 1008 | 1009 | [[package]] 1010 | name = "tokio" 1011 | version = "1.40.0" 1012 | source = "registry+https://github.com/rust-lang/crates.io-index" 1013 | checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" 1014 | dependencies = [ 1015 | "backtrace", 1016 | "bytes", 1017 | "libc", 1018 | "mio", 1019 | "parking_lot", 1020 | "pin-project-lite", 1021 | "signal-hook-registry", 1022 | "socket2", 1023 | "tokio-macros", 1024 | "windows-sys 0.52.0", 1025 | ] 1026 | 1027 | [[package]] 1028 | name = "tokio-macros" 1029 | version = "2.4.0" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" 1032 | dependencies = [ 1033 | "proc-macro2", 1034 | "quote", 1035 | "syn", 1036 | ] 1037 | 1038 | [[package]] 1039 | name = "tokio-native-tls" 1040 | version = "0.3.1" 1041 | source = "registry+https://github.com/rust-lang/crates.io-index" 1042 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 1043 | dependencies = [ 1044 | "native-tls", 1045 | "tokio", 1046 | ] 1047 | 1048 | [[package]] 1049 | name = "tokio-rustls" 1050 | version = "0.26.0" 1051 | source = "registry+https://github.com/rust-lang/crates.io-index" 1052 | checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" 1053 | dependencies = [ 1054 | "rustls", 1055 | "rustls-pki-types", 1056 | "tokio", 1057 | ] 1058 | 1059 | [[package]] 1060 | name = "tokio-util" 1061 | version = "0.7.12" 1062 | source = "registry+https://github.com/rust-lang/crates.io-index" 1063 | checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" 1064 | dependencies = [ 1065 | "bytes", 1066 | "futures-core", 1067 | "futures-sink", 1068 | "pin-project-lite", 1069 | "tokio", 1070 | ] 1071 | 1072 | [[package]] 1073 | name = "tower-service" 1074 | version = "0.3.3" 1075 | source = "registry+https://github.com/rust-lang/crates.io-index" 1076 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 1077 | 1078 | [[package]] 1079 | name = "tracing" 1080 | version = "0.1.40" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 1083 | dependencies = [ 1084 | "pin-project-lite", 1085 | "tracing-core", 1086 | ] 1087 | 1088 | [[package]] 1089 | name = "tracing-core" 1090 | version = "0.1.32" 1091 | source = "registry+https://github.com/rust-lang/crates.io-index" 1092 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 1093 | dependencies = [ 1094 | "once_cell", 1095 | ] 1096 | 1097 | [[package]] 1098 | name = "try-lock" 1099 | version = "0.2.5" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 1102 | 1103 | [[package]] 1104 | name = "unicode-bidi" 1105 | version = "0.3.15" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 1108 | 1109 | [[package]] 1110 | name = "unicode-ident" 1111 | version = "1.0.13" 1112 | source = "registry+https://github.com/rust-lang/crates.io-index" 1113 | checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" 1114 | 1115 | [[package]] 1116 | name = "unicode-normalization" 1117 | version = "0.1.24" 1118 | source = "registry+https://github.com/rust-lang/crates.io-index" 1119 | checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" 1120 | dependencies = [ 1121 | "tinyvec", 1122 | ] 1123 | 1124 | [[package]] 1125 | name = "unicode-width" 1126 | version = "0.1.14" 1127 | source = "registry+https://github.com/rust-lang/crates.io-index" 1128 | checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 1129 | 1130 | [[package]] 1131 | name = "untrusted" 1132 | version = "0.9.0" 1133 | source = "registry+https://github.com/rust-lang/crates.io-index" 1134 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 1135 | 1136 | [[package]] 1137 | name = "url" 1138 | version = "2.5.2" 1139 | source = "registry+https://github.com/rust-lang/crates.io-index" 1140 | checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" 1141 | dependencies = [ 1142 | "form_urlencoded", 1143 | "idna", 1144 | "percent-encoding", 1145 | ] 1146 | 1147 | [[package]] 1148 | name = "vcpkg" 1149 | version = "0.2.15" 1150 | source = "registry+https://github.com/rust-lang/crates.io-index" 1151 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1152 | 1153 | [[package]] 1154 | name = "want" 1155 | version = "0.3.1" 1156 | source = "registry+https://github.com/rust-lang/crates.io-index" 1157 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 1158 | dependencies = [ 1159 | "try-lock", 1160 | ] 1161 | 1162 | [[package]] 1163 | name = "wasi" 1164 | version = "0.11.0+wasi-snapshot-preview1" 1165 | source = "registry+https://github.com/rust-lang/crates.io-index" 1166 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1167 | 1168 | [[package]] 1169 | name = "wasm-bindgen" 1170 | version = "0.2.93" 1171 | source = "registry+https://github.com/rust-lang/crates.io-index" 1172 | checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" 1173 | dependencies = [ 1174 | "cfg-if", 1175 | "once_cell", 1176 | "wasm-bindgen-macro", 1177 | ] 1178 | 1179 | [[package]] 1180 | name = "wasm-bindgen-backend" 1181 | version = "0.2.93" 1182 | source = "registry+https://github.com/rust-lang/crates.io-index" 1183 | checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" 1184 | dependencies = [ 1185 | "bumpalo", 1186 | "log", 1187 | "once_cell", 1188 | "proc-macro2", 1189 | "quote", 1190 | "syn", 1191 | "wasm-bindgen-shared", 1192 | ] 1193 | 1194 | [[package]] 1195 | name = "wasm-bindgen-futures" 1196 | version = "0.4.43" 1197 | source = "registry+https://github.com/rust-lang/crates.io-index" 1198 | checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" 1199 | dependencies = [ 1200 | "cfg-if", 1201 | "js-sys", 1202 | "wasm-bindgen", 1203 | "web-sys", 1204 | ] 1205 | 1206 | [[package]] 1207 | name = "wasm-bindgen-macro" 1208 | version = "0.2.93" 1209 | source = "registry+https://github.com/rust-lang/crates.io-index" 1210 | checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" 1211 | dependencies = [ 1212 | "quote", 1213 | "wasm-bindgen-macro-support", 1214 | ] 1215 | 1216 | [[package]] 1217 | name = "wasm-bindgen-macro-support" 1218 | version = "0.2.93" 1219 | source = "registry+https://github.com/rust-lang/crates.io-index" 1220 | checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" 1221 | dependencies = [ 1222 | "proc-macro2", 1223 | "quote", 1224 | "syn", 1225 | "wasm-bindgen-backend", 1226 | "wasm-bindgen-shared", 1227 | ] 1228 | 1229 | [[package]] 1230 | name = "wasm-bindgen-shared" 1231 | version = "0.2.93" 1232 | source = "registry+https://github.com/rust-lang/crates.io-index" 1233 | checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" 1234 | 1235 | [[package]] 1236 | name = "web-sys" 1237 | version = "0.3.70" 1238 | source = "registry+https://github.com/rust-lang/crates.io-index" 1239 | checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" 1240 | dependencies = [ 1241 | "js-sys", 1242 | "wasm-bindgen", 1243 | ] 1244 | 1245 | [[package]] 1246 | name = "windows-registry" 1247 | version = "0.2.0" 1248 | source = "registry+https://github.com/rust-lang/crates.io-index" 1249 | checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" 1250 | dependencies = [ 1251 | "windows-result", 1252 | "windows-strings", 1253 | "windows-targets", 1254 | ] 1255 | 1256 | [[package]] 1257 | name = "windows-result" 1258 | version = "0.2.0" 1259 | source = "registry+https://github.com/rust-lang/crates.io-index" 1260 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 1261 | dependencies = [ 1262 | "windows-targets", 1263 | ] 1264 | 1265 | [[package]] 1266 | name = "windows-strings" 1267 | version = "0.1.0" 1268 | source = "registry+https://github.com/rust-lang/crates.io-index" 1269 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 1270 | dependencies = [ 1271 | "windows-result", 1272 | "windows-targets", 1273 | ] 1274 | 1275 | [[package]] 1276 | name = "windows-sys" 1277 | version = "0.52.0" 1278 | source = "registry+https://github.com/rust-lang/crates.io-index" 1279 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1280 | dependencies = [ 1281 | "windows-targets", 1282 | ] 1283 | 1284 | [[package]] 1285 | name = "windows-sys" 1286 | version = "0.59.0" 1287 | source = "registry+https://github.com/rust-lang/crates.io-index" 1288 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 1289 | dependencies = [ 1290 | "windows-targets", 1291 | ] 1292 | 1293 | [[package]] 1294 | name = "windows-targets" 1295 | version = "0.52.6" 1296 | source = "registry+https://github.com/rust-lang/crates.io-index" 1297 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1298 | dependencies = [ 1299 | "windows_aarch64_gnullvm", 1300 | "windows_aarch64_msvc", 1301 | "windows_i686_gnu", 1302 | "windows_i686_gnullvm", 1303 | "windows_i686_msvc", 1304 | "windows_x86_64_gnu", 1305 | "windows_x86_64_gnullvm", 1306 | "windows_x86_64_msvc", 1307 | ] 1308 | 1309 | [[package]] 1310 | name = "windows_aarch64_gnullvm" 1311 | version = "0.52.6" 1312 | source = "registry+https://github.com/rust-lang/crates.io-index" 1313 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1314 | 1315 | [[package]] 1316 | name = "windows_aarch64_msvc" 1317 | version = "0.52.6" 1318 | source = "registry+https://github.com/rust-lang/crates.io-index" 1319 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1320 | 1321 | [[package]] 1322 | name = "windows_i686_gnu" 1323 | version = "0.52.6" 1324 | source = "registry+https://github.com/rust-lang/crates.io-index" 1325 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1326 | 1327 | [[package]] 1328 | name = "windows_i686_gnullvm" 1329 | version = "0.52.6" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1332 | 1333 | [[package]] 1334 | name = "windows_i686_msvc" 1335 | version = "0.52.6" 1336 | source = "registry+https://github.com/rust-lang/crates.io-index" 1337 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1338 | 1339 | [[package]] 1340 | name = "windows_x86_64_gnu" 1341 | version = "0.52.6" 1342 | source = "registry+https://github.com/rust-lang/crates.io-index" 1343 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1344 | 1345 | [[package]] 1346 | name = "windows_x86_64_gnullvm" 1347 | version = "0.52.6" 1348 | source = "registry+https://github.com/rust-lang/crates.io-index" 1349 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1350 | 1351 | [[package]] 1352 | name = "windows_x86_64_msvc" 1353 | version = "0.52.6" 1354 | source = "registry+https://github.com/rust-lang/crates.io-index" 1355 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1356 | 1357 | [[package]] 1358 | name = "zeroize" 1359 | version = "1.8.1" 1360 | source = "registry+https://github.com/rust-lang/crates.io-index" 1361 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 1362 | --------------------------------------------------------------------------------