├── .gitignore ├── examples ├── in-bash.sh └── in-rust.rs ├── Cargo.toml ├── README.md ├── LICENSE ├── .github └── workflows │ └── build.yml ├── src └── main.rs └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /examples/in-bash.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | clawbang < &'static str { 12 | let mut pb = PathBuf::from(home::home_dir().expect("Cannot operate without a home directory")); 13 | pb.push(".clawbang-cache"); 14 | let f = pb.to_string_lossy().into_owned(); 15 | Box::leak(f.into_boxed_str()) 16 | } 17 | 18 | #[derive(Parser)] 19 | #[clap(author, version, about, long_about = None)] 20 | struct Options { 21 | #[clap(short, long, parse(from_occurrences))] 22 | verbose: usize, 23 | 24 | #[clap(long, env="CLAWBANG_DIR", default_value=get_default_cache_dir())] 25 | cache_dir: PathBuf, 26 | 27 | #[clap(default_value="/dev/fd/0")] 28 | file: PathBuf, 29 | 30 | rest: Vec, 31 | } 32 | 33 | #[derive(Serialize, Deserialize)] 34 | struct CacheEntry { 35 | output_id: String, // content ref of the output 36 | exit_code: i32, 37 | } 38 | 39 | struct Tee { 40 | accum: Vec, 41 | inner: Inner, 42 | } 43 | 44 | impl Tee { 45 | pub(crate) fn new(inner: Inner) -> Self { 46 | Self { 47 | accum: Vec::new(), 48 | inner 49 | } 50 | } 51 | 52 | pub(crate) fn into_inner(self) -> (Vec, Inner) { 53 | (self.accum, self.inner) 54 | } 55 | } 56 | 57 | impl std::io::Write for Tee { 58 | fn write(&mut self, bytes: &[u8]) -> Result { 59 | self.accum.extend(bytes); 60 | self.inner.write(bytes) 61 | } 62 | 63 | fn flush(&mut self) -> std::io::Result<()> { 64 | self.inner.flush() 65 | } 66 | } 67 | 68 | fn main() -> Result<()> { 69 | // positional arguments check comes first: are we reading from a file or stdin? 70 | let opts = Options::parse(); 71 | let mut file = std::fs::OpenOptions::new().read(true).open(opts.file)?; 72 | 73 | let mut input = Vec::new(); 74 | file.read_to_end(&mut input)?; 75 | let source = String::from_utf8(input)?; 76 | let tempdir = tempfile::tempdir()?; 77 | let mut pb = PathBuf::from(tempdir.as_ref()); 78 | 79 | let cache_key = get_key(&source); 80 | 81 | let metadata = cacache::metadata_sync(opts.cache_dir.as_path(), &cache_key)?; 82 | 83 | if let Some(metadata) = metadata { 84 | let cache_entry: CacheEntry = serde_json::from_value(metadata.metadata)?; 85 | 86 | if cache_entry.exit_code == 0 { 87 | pb.push("bin"); 88 | cacache::copy_sync(opts.cache_dir.as_path(), &cache_key, pb.as_path())?; 89 | 90 | #[cfg(not(target_os = "windows"))] 91 | { 92 | use std::os::unix::fs::PermissionsExt; 93 | std::fs::set_permissions(pb.as_path(), std::fs::Permissions::from_mode(0o755))?; 94 | } 95 | } else { 96 | let build_output = cacache::read_sync(opts.cache_dir.as_path(), cache_entry.output_id)?; 97 | std::io::stderr().write_all(&build_output[..])?; 98 | process::exit(cache_entry.exit_code); 99 | } 100 | } else { 101 | if opts.verbose < 1 { 102 | populate_cache( 103 | &cache_key, 104 | opts.cache_dir.as_path(), 105 | pb.as_path(), 106 | std::io::sink(), 107 | source.as_str() 108 | )?; 109 | } else { 110 | populate_cache( 111 | &cache_key, 112 | opts.cache_dir.as_path(), 113 | pb.as_path(), 114 | std::io::sink(), 115 | source.as_str() 116 | )?; 117 | } 118 | 119 | pb.push("target"); 120 | pb.push("release"); 121 | pb.push("bin"); 122 | } 123 | 124 | 125 | let mut exec = Exec::cmd(&pb).cwd(std::env::current_dir()?); 126 | for arg in opts.rest { 127 | exec = exec.arg(arg); 128 | } 129 | 130 | std::process::exit(match exec.join()? { 131 | subprocess::ExitStatus::Exited(xs) => xs as i32, 132 | subprocess::ExitStatus::Signaled(xs) => xs as i32, 133 | subprocess::ExitStatus::Other(xs) => xs, 134 | subprocess::ExitStatus::Undetermined => -1, 135 | }); 136 | } 137 | 138 | fn get_key(input: impl AsRef) -> String { 139 | let mut hasher = Sha256::new(); 140 | let bytes = input.as_ref().as_bytes(); 141 | hasher.update(bytes); 142 | 143 | let hash_bytes = &hasher.finalize()[..]; 144 | 145 | hex::encode(hash_bytes) 146 | } 147 | 148 | fn populate_cache( 149 | cache_key: &str, 150 | cache: impl AsRef, 151 | tempdir: impl AsRef, 152 | stdout: impl Write, 153 | source: &str 154 | ) -> Result<()> { 155 | let mut pb = PathBuf::from(tempdir.as_ref()); 156 | let trimmed = if source.trim().starts_with("#!") { 157 | source[source.find("\n").unwrap() + 1..].trim() 158 | } else { 159 | source.trim() 160 | }; 161 | 162 | let (frontmatter, rust_src) = if trimmed.starts_with("+++\n") { 163 | let offset = trimmed[4..].find("\n+++\n").ok_or_else(|| eyre::eyre!("Hit EOF before finding end of frontmatter delimeter, \"+++\"."))?; 164 | (&trimmed[4..offset + 4], &trimmed[offset + 9..]) 165 | } else { 166 | (&trimmed[0..0], &trimmed[0..]) 167 | }; 168 | 169 | let mut frontmatter: toml::Value = toml::from_str(frontmatter)?; 170 | 171 | let tbl = frontmatter.as_table_mut().ok_or_else(|| eyre::eyre!("Expected frontmatter to contain valid TOML, but the top level is not a table"))?; 172 | let cargo_toml_pkg = tbl.entry("package").or_insert(toml::Value::Table(toml::map::Map::new())).as_table_mut().unwrap(); 173 | cargo_toml_pkg.insert("name".to_string(), toml::Value::String("bin".to_string())); 174 | cargo_toml_pkg.insert("version".to_string(), toml::Value::String("0.0.1".to_string())); 175 | cargo_toml_pkg.insert("edition".to_string(), toml::Value::String("2021".to_string())); 176 | 177 | let cargo_toml = toml::to_string_pretty(&frontmatter)?; 178 | 179 | pb.push("Cargo.toml"); 180 | { 181 | let mut cargo_toml_file = std::fs::OpenOptions::new().write(true).create(true).open(&pb)?; 182 | cargo_toml_file.write_all(cargo_toml.as_bytes())?; 183 | } 184 | pb.pop(); 185 | 186 | pb.push("src"); 187 | std::fs::create_dir(&pb)?; 188 | pb.push("main.rs"); 189 | { 190 | let mut src_file = std::fs::OpenOptions::new().write(true).create(true).open(&pb)?; 191 | src_file.write_all(rust_src.as_bytes())?; 192 | } 193 | pb.pop(); 194 | pb.pop(); 195 | 196 | let mut popen = Exec::cmd("cargo") 197 | .arg("--color") 198 | .arg("always") 199 | .arg("build") 200 | .arg("--release") 201 | .stdout(subprocess::Redirection::Pipe) 202 | .stderr(subprocess::Redirection::Merge) 203 | .cwd(&tempdir) 204 | .popen()?; 205 | 206 | let mut out = Tee::new(stdout); 207 | while popen.poll().is_none() { 208 | if let Some(mut pstdout) = popen.stdout.as_mut() { 209 | std::io::copy(&mut pstdout, &mut out)?; 210 | } 211 | } 212 | 213 | let exit_code = match popen.exit_status() { 214 | Some(subprocess::ExitStatus::Exited(xs)) => xs as i32, 215 | Some(subprocess::ExitStatus::Signaled(xs)) => xs as i32, 216 | Some(subprocess::ExitStatus::Other(xs)) => xs, 217 | _ => 1 218 | }; 219 | 220 | let (accum, _) = out.into_inner(); 221 | 222 | let output_hash = cacache::write_hash_sync(&cache, accum)?; 223 | 224 | let build_metadata = CacheEntry { 225 | output_id: output_hash.to_string(), 226 | exit_code 227 | }; 228 | 229 | pb.push("target"); 230 | pb.push("release"); 231 | pb.push("bin"); 232 | 233 | let mut binary_file = std::fs::OpenOptions::new().read(true).open(&pb)?; 234 | 235 | let mut writer = WriteOpts::new() 236 | .algorithm(cacache::Algorithm::Sha256) 237 | .metadata(serde_json::to_value(build_metadata)?) 238 | .open_sync(&cache, cache_key)?; 239 | 240 | std::io::copy(&mut binary_file, &mut writer)?; 241 | 242 | writer.commit()?; 243 | 244 | Ok(()) 245 | } 246 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "async-channel" 7 | version = "1.6.1" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" 10 | dependencies = [ 11 | "concurrent-queue", 12 | "event-listener", 13 | "futures-core", 14 | ] 15 | 16 | [[package]] 17 | name = "async-executor" 18 | version = "1.4.1" 19 | source = "registry+https://github.com/rust-lang/crates.io-index" 20 | checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" 21 | dependencies = [ 22 | "async-task", 23 | "concurrent-queue", 24 | "fastrand", 25 | "futures-lite", 26 | "once_cell", 27 | "slab", 28 | ] 29 | 30 | [[package]] 31 | name = "async-global-executor" 32 | version = "2.0.2" 33 | source = "registry+https://github.com/rust-lang/crates.io-index" 34 | checksum = "9586ec52317f36de58453159d48351bc244bc24ced3effc1fce22f3d48664af6" 35 | dependencies = [ 36 | "async-channel", 37 | "async-executor", 38 | "async-io", 39 | "async-mutex", 40 | "blocking", 41 | "futures-lite", 42 | "num_cpus", 43 | "once_cell", 44 | ] 45 | 46 | [[package]] 47 | name = "async-io" 48 | version = "1.6.0" 49 | source = "registry+https://github.com/rust-lang/crates.io-index" 50 | checksum = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b" 51 | dependencies = [ 52 | "concurrent-queue", 53 | "futures-lite", 54 | "libc", 55 | "log", 56 | "once_cell", 57 | "parking", 58 | "polling", 59 | "slab", 60 | "socket2", 61 | "waker-fn", 62 | "winapi", 63 | ] 64 | 65 | [[package]] 66 | name = "async-lock" 67 | version = "2.5.0" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" 70 | dependencies = [ 71 | "event-listener", 72 | ] 73 | 74 | [[package]] 75 | name = "async-mutex" 76 | version = "1.4.0" 77 | source = "registry+https://github.com/rust-lang/crates.io-index" 78 | checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" 79 | dependencies = [ 80 | "event-listener", 81 | ] 82 | 83 | [[package]] 84 | name = "async-process" 85 | version = "1.3.0" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | checksum = "83137067e3a2a6a06d67168e49e68a0957d215410473a740cea95a2425c0b7c6" 88 | dependencies = [ 89 | "async-io", 90 | "blocking", 91 | "cfg-if", 92 | "event-listener", 93 | "futures-lite", 94 | "libc", 95 | "once_cell", 96 | "signal-hook", 97 | "winapi", 98 | ] 99 | 100 | [[package]] 101 | name = "async-std" 102 | version = "1.10.0" 103 | source = "registry+https://github.com/rust-lang/crates.io-index" 104 | checksum = "f8056f1455169ab86dd47b47391e4ab0cbd25410a70e9fe675544f49bafaf952" 105 | dependencies = [ 106 | "async-channel", 107 | "async-global-executor", 108 | "async-io", 109 | "async-lock", 110 | "async-process", 111 | "crossbeam-utils", 112 | "futures-channel", 113 | "futures-core", 114 | "futures-io", 115 | "futures-lite", 116 | "gloo-timers", 117 | "kv-log-macro", 118 | "log", 119 | "memchr", 120 | "num_cpus", 121 | "once_cell", 122 | "pin-project-lite", 123 | "pin-utils", 124 | "slab", 125 | "wasm-bindgen-futures", 126 | ] 127 | 128 | [[package]] 129 | name = "async-task" 130 | version = "4.1.0" 131 | source = "registry+https://github.com/rust-lang/crates.io-index" 132 | checksum = "677d306121baf53310a3fd342d88dc0824f6bbeace68347593658525565abee8" 133 | 134 | [[package]] 135 | name = "atomic-waker" 136 | version = "1.0.0" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" 139 | 140 | [[package]] 141 | name = "atty" 142 | version = "0.2.14" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 145 | dependencies = [ 146 | "hermit-abi", 147 | "libc", 148 | "winapi", 149 | ] 150 | 151 | [[package]] 152 | name = "autocfg" 153 | version = "1.1.0" 154 | source = "registry+https://github.com/rust-lang/crates.io-index" 155 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 156 | 157 | [[package]] 158 | name = "base64" 159 | version = "0.10.1" 160 | source = "registry+https://github.com/rust-lang/crates.io-index" 161 | checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" 162 | dependencies = [ 163 | "byteorder", 164 | ] 165 | 166 | [[package]] 167 | name = "bitflags" 168 | version = "1.3.2" 169 | source = "registry+https://github.com/rust-lang/crates.io-index" 170 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 171 | 172 | [[package]] 173 | name = "block-buffer" 174 | version = "0.7.3" 175 | source = "registry+https://github.com/rust-lang/crates.io-index" 176 | checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" 177 | dependencies = [ 178 | "block-padding", 179 | "byte-tools", 180 | "byteorder", 181 | "generic-array 0.12.4", 182 | ] 183 | 184 | [[package]] 185 | name = "block-buffer" 186 | version = "0.9.0" 187 | source = "registry+https://github.com/rust-lang/crates.io-index" 188 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 189 | dependencies = [ 190 | "generic-array 0.14.5", 191 | ] 192 | 193 | [[package]] 194 | name = "block-buffer" 195 | version = "0.10.2" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" 198 | dependencies = [ 199 | "generic-array 0.14.5", 200 | ] 201 | 202 | [[package]] 203 | name = "block-padding" 204 | version = "0.1.5" 205 | source = "registry+https://github.com/rust-lang/crates.io-index" 206 | checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" 207 | dependencies = [ 208 | "byte-tools", 209 | ] 210 | 211 | [[package]] 212 | name = "blocking" 213 | version = "1.1.0" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | checksum = "046e47d4b2d391b1f6f8b407b1deb8dee56c1852ccd868becf2710f601b5f427" 216 | dependencies = [ 217 | "async-channel", 218 | "async-task", 219 | "atomic-waker", 220 | "fastrand", 221 | "futures-lite", 222 | "once_cell", 223 | ] 224 | 225 | [[package]] 226 | name = "bumpalo" 227 | version = "3.9.1" 228 | source = "registry+https://github.com/rust-lang/crates.io-index" 229 | checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" 230 | 231 | [[package]] 232 | name = "byte-tools" 233 | version = "0.3.1" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" 236 | 237 | [[package]] 238 | name = "byteorder" 239 | version = "1.4.3" 240 | source = "registry+https://github.com/rust-lang/crates.io-index" 241 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 242 | 243 | [[package]] 244 | name = "cacache" 245 | version = "9.0.0" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | checksum = "205ae2da91f7633dd4ecc1b12fac60c991a48b61b2cd801ad533085b15392537" 248 | dependencies = [ 249 | "async-std", 250 | "digest 0.9.0", 251 | "either", 252 | "futures", 253 | "hex 0.4.3", 254 | "memmap", 255 | "serde", 256 | "serde_derive", 257 | "serde_json", 258 | "sha-1 0.9.8", 259 | "sha2 0.9.9", 260 | "ssri", 261 | "tempfile", 262 | "thiserror", 263 | "walkdir", 264 | ] 265 | 266 | [[package]] 267 | name = "cache-padded" 268 | version = "1.2.0" 269 | source = "registry+https://github.com/rust-lang/crates.io-index" 270 | checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" 271 | 272 | [[package]] 273 | name = "cc" 274 | version = "1.0.73" 275 | source = "registry+https://github.com/rust-lang/crates.io-index" 276 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 277 | 278 | [[package]] 279 | name = "cfg-if" 280 | version = "1.0.0" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 283 | 284 | [[package]] 285 | name = "clap" 286 | version = "3.1.2" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | checksum = "5177fac1ab67102d8989464efd043c6ff44191b1557ec1ddd489b4f7e1447e77" 289 | dependencies = [ 290 | "atty", 291 | "bitflags", 292 | "clap_derive", 293 | "indexmap", 294 | "lazy_static", 295 | "os_str_bytes", 296 | "strsim", 297 | "termcolor", 298 | "textwrap", 299 | "unicase", 300 | ] 301 | 302 | [[package]] 303 | name = "clap_derive" 304 | version = "3.1.2" 305 | source = "registry+https://github.com/rust-lang/crates.io-index" 306 | checksum = "01d42c94ce7c2252681b5fed4d3627cc807b13dfc033246bd05d5b252399000e" 307 | dependencies = [ 308 | "heck", 309 | "proc-macro-error", 310 | "proc-macro2", 311 | "quote", 312 | "syn", 313 | ] 314 | 315 | [[package]] 316 | name = "clawbang" 317 | version = "0.1.0" 318 | dependencies = [ 319 | "cacache", 320 | "clap", 321 | "eyre", 322 | "hex 0.4.3", 323 | "home", 324 | "serde", 325 | "serde_json", 326 | "sha2 0.10.2", 327 | "subprocess", 328 | "tempfile", 329 | "toml", 330 | ] 331 | 332 | [[package]] 333 | name = "concurrent-queue" 334 | version = "1.2.2" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" 337 | dependencies = [ 338 | "cache-padded", 339 | ] 340 | 341 | [[package]] 342 | name = "cpufeatures" 343 | version = "0.2.1" 344 | source = "registry+https://github.com/rust-lang/crates.io-index" 345 | checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" 346 | dependencies = [ 347 | "libc", 348 | ] 349 | 350 | [[package]] 351 | name = "crossbeam-utils" 352 | version = "0.8.7" 353 | source = "registry+https://github.com/rust-lang/crates.io-index" 354 | checksum = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6" 355 | dependencies = [ 356 | "cfg-if", 357 | "lazy_static", 358 | ] 359 | 360 | [[package]] 361 | name = "crypto-common" 362 | version = "0.1.3" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" 365 | dependencies = [ 366 | "generic-array 0.14.5", 367 | "typenum", 368 | ] 369 | 370 | [[package]] 371 | name = "ctor" 372 | version = "0.1.21" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" 375 | dependencies = [ 376 | "quote", 377 | "syn", 378 | ] 379 | 380 | [[package]] 381 | name = "digest" 382 | version = "0.8.1" 383 | source = "registry+https://github.com/rust-lang/crates.io-index" 384 | checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" 385 | dependencies = [ 386 | "generic-array 0.12.4", 387 | ] 388 | 389 | [[package]] 390 | name = "digest" 391 | version = "0.9.0" 392 | source = "registry+https://github.com/rust-lang/crates.io-index" 393 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 394 | dependencies = [ 395 | "generic-array 0.14.5", 396 | ] 397 | 398 | [[package]] 399 | name = "digest" 400 | version = "0.10.3" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" 403 | dependencies = [ 404 | "block-buffer 0.10.2", 405 | "crypto-common", 406 | ] 407 | 408 | [[package]] 409 | name = "either" 410 | version = "1.6.1" 411 | source = "registry+https://github.com/rust-lang/crates.io-index" 412 | checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" 413 | 414 | [[package]] 415 | name = "event-listener" 416 | version = "2.5.2" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" 419 | 420 | [[package]] 421 | name = "eyre" 422 | version = "0.6.6" 423 | source = "registry+https://github.com/rust-lang/crates.io-index" 424 | checksum = "bc225d8f637923fe585089fcf03e705c222131232d2c1fb622e84ecf725d0eb8" 425 | dependencies = [ 426 | "indenter", 427 | "once_cell", 428 | ] 429 | 430 | [[package]] 431 | name = "fake-simd" 432 | version = "0.1.2" 433 | source = "registry+https://github.com/rust-lang/crates.io-index" 434 | checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" 435 | 436 | [[package]] 437 | name = "fastrand" 438 | version = "1.7.0" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" 441 | dependencies = [ 442 | "instant", 443 | ] 444 | 445 | [[package]] 446 | name = "futures" 447 | version = "0.3.21" 448 | source = "registry+https://github.com/rust-lang/crates.io-index" 449 | checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" 450 | dependencies = [ 451 | "futures-channel", 452 | "futures-core", 453 | "futures-executor", 454 | "futures-io", 455 | "futures-sink", 456 | "futures-task", 457 | "futures-util", 458 | ] 459 | 460 | [[package]] 461 | name = "futures-channel" 462 | version = "0.3.21" 463 | source = "registry+https://github.com/rust-lang/crates.io-index" 464 | checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" 465 | dependencies = [ 466 | "futures-core", 467 | "futures-sink", 468 | ] 469 | 470 | [[package]] 471 | name = "futures-core" 472 | version = "0.3.21" 473 | source = "registry+https://github.com/rust-lang/crates.io-index" 474 | checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" 475 | 476 | [[package]] 477 | name = "futures-executor" 478 | version = "0.3.21" 479 | source = "registry+https://github.com/rust-lang/crates.io-index" 480 | checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" 481 | dependencies = [ 482 | "futures-core", 483 | "futures-task", 484 | "futures-util", 485 | ] 486 | 487 | [[package]] 488 | name = "futures-io" 489 | version = "0.3.21" 490 | source = "registry+https://github.com/rust-lang/crates.io-index" 491 | checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" 492 | 493 | [[package]] 494 | name = "futures-lite" 495 | version = "1.12.0" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" 498 | dependencies = [ 499 | "fastrand", 500 | "futures-core", 501 | "futures-io", 502 | "memchr", 503 | "parking", 504 | "pin-project-lite", 505 | "waker-fn", 506 | ] 507 | 508 | [[package]] 509 | name = "futures-macro" 510 | version = "0.3.21" 511 | source = "registry+https://github.com/rust-lang/crates.io-index" 512 | checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" 513 | dependencies = [ 514 | "proc-macro2", 515 | "quote", 516 | "syn", 517 | ] 518 | 519 | [[package]] 520 | name = "futures-sink" 521 | version = "0.3.21" 522 | source = "registry+https://github.com/rust-lang/crates.io-index" 523 | checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" 524 | 525 | [[package]] 526 | name = "futures-task" 527 | version = "0.3.21" 528 | source = "registry+https://github.com/rust-lang/crates.io-index" 529 | checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" 530 | 531 | [[package]] 532 | name = "futures-util" 533 | version = "0.3.21" 534 | source = "registry+https://github.com/rust-lang/crates.io-index" 535 | checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" 536 | dependencies = [ 537 | "futures-channel", 538 | "futures-core", 539 | "futures-io", 540 | "futures-macro", 541 | "futures-sink", 542 | "futures-task", 543 | "memchr", 544 | "pin-project-lite", 545 | "pin-utils", 546 | "slab", 547 | ] 548 | 549 | [[package]] 550 | name = "generic-array" 551 | version = "0.12.4" 552 | source = "registry+https://github.com/rust-lang/crates.io-index" 553 | checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" 554 | dependencies = [ 555 | "typenum", 556 | ] 557 | 558 | [[package]] 559 | name = "generic-array" 560 | version = "0.14.5" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" 563 | dependencies = [ 564 | "typenum", 565 | "version_check", 566 | ] 567 | 568 | [[package]] 569 | name = "gloo-timers" 570 | version = "0.2.3" 571 | source = "registry+https://github.com/rust-lang/crates.io-index" 572 | checksum = "4d12a7f4e95cfe710f1d624fb1210b7d961a5fb05c4fd942f4feab06e61f590e" 573 | dependencies = [ 574 | "futures-channel", 575 | "futures-core", 576 | "js-sys", 577 | "wasm-bindgen", 578 | ] 579 | 580 | [[package]] 581 | name = "hashbrown" 582 | version = "0.11.2" 583 | source = "registry+https://github.com/rust-lang/crates.io-index" 584 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 585 | 586 | [[package]] 587 | name = "heck" 588 | version = "0.4.0" 589 | source = "registry+https://github.com/rust-lang/crates.io-index" 590 | checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" 591 | 592 | [[package]] 593 | name = "hermit-abi" 594 | version = "0.1.19" 595 | source = "registry+https://github.com/rust-lang/crates.io-index" 596 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 597 | dependencies = [ 598 | "libc", 599 | ] 600 | 601 | [[package]] 602 | name = "hex" 603 | version = "0.3.2" 604 | source = "registry+https://github.com/rust-lang/crates.io-index" 605 | checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" 606 | 607 | [[package]] 608 | name = "hex" 609 | version = "0.4.3" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 612 | 613 | [[package]] 614 | name = "home" 615 | version = "0.5.3" 616 | source = "registry+https://github.com/rust-lang/crates.io-index" 617 | checksum = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654" 618 | dependencies = [ 619 | "winapi", 620 | ] 621 | 622 | [[package]] 623 | name = "indenter" 624 | version = "0.3.3" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" 627 | 628 | [[package]] 629 | name = "indexmap" 630 | version = "1.8.0" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" 633 | dependencies = [ 634 | "autocfg", 635 | "hashbrown", 636 | ] 637 | 638 | [[package]] 639 | name = "instant" 640 | version = "0.1.12" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 643 | dependencies = [ 644 | "cfg-if", 645 | ] 646 | 647 | [[package]] 648 | name = "itoa" 649 | version = "1.0.1" 650 | source = "registry+https://github.com/rust-lang/crates.io-index" 651 | checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" 652 | 653 | [[package]] 654 | name = "js-sys" 655 | version = "0.3.56" 656 | source = "registry+https://github.com/rust-lang/crates.io-index" 657 | checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" 658 | dependencies = [ 659 | "wasm-bindgen", 660 | ] 661 | 662 | [[package]] 663 | name = "kv-log-macro" 664 | version = "1.0.7" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" 667 | dependencies = [ 668 | "log", 669 | ] 670 | 671 | [[package]] 672 | name = "lazy_static" 673 | version = "1.4.0" 674 | source = "registry+https://github.com/rust-lang/crates.io-index" 675 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 676 | 677 | [[package]] 678 | name = "libc" 679 | version = "0.2.119" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" 682 | 683 | [[package]] 684 | name = "log" 685 | version = "0.4.14" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" 688 | dependencies = [ 689 | "cfg-if", 690 | "value-bag", 691 | ] 692 | 693 | [[package]] 694 | name = "memchr" 695 | version = "2.4.1" 696 | source = "registry+https://github.com/rust-lang/crates.io-index" 697 | checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" 698 | 699 | [[package]] 700 | name = "memmap" 701 | version = "0.7.0" 702 | source = "registry+https://github.com/rust-lang/crates.io-index" 703 | checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" 704 | dependencies = [ 705 | "libc", 706 | "winapi", 707 | ] 708 | 709 | [[package]] 710 | name = "num_cpus" 711 | version = "1.13.1" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" 714 | dependencies = [ 715 | "hermit-abi", 716 | "libc", 717 | ] 718 | 719 | [[package]] 720 | name = "once_cell" 721 | version = "1.9.0" 722 | source = "registry+https://github.com/rust-lang/crates.io-index" 723 | checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" 724 | 725 | [[package]] 726 | name = "opaque-debug" 727 | version = "0.2.3" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" 730 | 731 | [[package]] 732 | name = "opaque-debug" 733 | version = "0.3.0" 734 | source = "registry+https://github.com/rust-lang/crates.io-index" 735 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" 736 | 737 | [[package]] 738 | name = "os_str_bytes" 739 | version = "6.0.0" 740 | source = "registry+https://github.com/rust-lang/crates.io-index" 741 | checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" 742 | dependencies = [ 743 | "memchr", 744 | ] 745 | 746 | [[package]] 747 | name = "parking" 748 | version = "2.0.0" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" 751 | 752 | [[package]] 753 | name = "pin-project-lite" 754 | version = "0.2.8" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" 757 | 758 | [[package]] 759 | name = "pin-utils" 760 | version = "0.1.0" 761 | source = "registry+https://github.com/rust-lang/crates.io-index" 762 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 763 | 764 | [[package]] 765 | name = "polling" 766 | version = "2.2.0" 767 | source = "registry+https://github.com/rust-lang/crates.io-index" 768 | checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" 769 | dependencies = [ 770 | "cfg-if", 771 | "libc", 772 | "log", 773 | "wepoll-ffi", 774 | "winapi", 775 | ] 776 | 777 | [[package]] 778 | name = "proc-macro-error" 779 | version = "1.0.4" 780 | source = "registry+https://github.com/rust-lang/crates.io-index" 781 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 782 | dependencies = [ 783 | "proc-macro-error-attr", 784 | "proc-macro2", 785 | "quote", 786 | "syn", 787 | "version_check", 788 | ] 789 | 790 | [[package]] 791 | name = "proc-macro-error-attr" 792 | version = "1.0.4" 793 | source = "registry+https://github.com/rust-lang/crates.io-index" 794 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 795 | dependencies = [ 796 | "proc-macro2", 797 | "quote", 798 | "version_check", 799 | ] 800 | 801 | [[package]] 802 | name = "proc-macro2" 803 | version = "1.0.36" 804 | source = "registry+https://github.com/rust-lang/crates.io-index" 805 | checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" 806 | dependencies = [ 807 | "unicode-xid", 808 | ] 809 | 810 | [[package]] 811 | name = "quote" 812 | version = "1.0.15" 813 | source = "registry+https://github.com/rust-lang/crates.io-index" 814 | checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" 815 | dependencies = [ 816 | "proc-macro2", 817 | ] 818 | 819 | [[package]] 820 | name = "redox_syscall" 821 | version = "0.2.10" 822 | source = "registry+https://github.com/rust-lang/crates.io-index" 823 | checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" 824 | dependencies = [ 825 | "bitflags", 826 | ] 827 | 828 | [[package]] 829 | name = "remove_dir_all" 830 | version = "0.5.3" 831 | source = "registry+https://github.com/rust-lang/crates.io-index" 832 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" 833 | dependencies = [ 834 | "winapi", 835 | ] 836 | 837 | [[package]] 838 | name = "ryu" 839 | version = "1.0.9" 840 | source = "registry+https://github.com/rust-lang/crates.io-index" 841 | checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" 842 | 843 | [[package]] 844 | name = "same-file" 845 | version = "1.0.6" 846 | source = "registry+https://github.com/rust-lang/crates.io-index" 847 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 848 | dependencies = [ 849 | "winapi-util", 850 | ] 851 | 852 | [[package]] 853 | name = "serde" 854 | version = "1.0.136" 855 | source = "registry+https://github.com/rust-lang/crates.io-index" 856 | checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" 857 | dependencies = [ 858 | "serde_derive", 859 | ] 860 | 861 | [[package]] 862 | name = "serde_derive" 863 | version = "1.0.136" 864 | source = "registry+https://github.com/rust-lang/crates.io-index" 865 | checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" 866 | dependencies = [ 867 | "proc-macro2", 868 | "quote", 869 | "syn", 870 | ] 871 | 872 | [[package]] 873 | name = "serde_json" 874 | version = "1.0.79" 875 | source = "registry+https://github.com/rust-lang/crates.io-index" 876 | checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" 877 | dependencies = [ 878 | "itoa", 879 | "ryu", 880 | "serde", 881 | ] 882 | 883 | [[package]] 884 | name = "sha-1" 885 | version = "0.8.2" 886 | source = "registry+https://github.com/rust-lang/crates.io-index" 887 | checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" 888 | dependencies = [ 889 | "block-buffer 0.7.3", 890 | "digest 0.8.1", 891 | "fake-simd", 892 | "opaque-debug 0.2.3", 893 | ] 894 | 895 | [[package]] 896 | name = "sha-1" 897 | version = "0.9.8" 898 | source = "registry+https://github.com/rust-lang/crates.io-index" 899 | checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" 900 | dependencies = [ 901 | "block-buffer 0.9.0", 902 | "cfg-if", 903 | "cpufeatures", 904 | "digest 0.9.0", 905 | "opaque-debug 0.3.0", 906 | ] 907 | 908 | [[package]] 909 | name = "sha2" 910 | version = "0.8.2" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" 913 | dependencies = [ 914 | "block-buffer 0.7.3", 915 | "digest 0.8.1", 916 | "fake-simd", 917 | "opaque-debug 0.2.3", 918 | ] 919 | 920 | [[package]] 921 | name = "sha2" 922 | version = "0.9.9" 923 | source = "registry+https://github.com/rust-lang/crates.io-index" 924 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 925 | dependencies = [ 926 | "block-buffer 0.9.0", 927 | "cfg-if", 928 | "cpufeatures", 929 | "digest 0.9.0", 930 | "opaque-debug 0.3.0", 931 | ] 932 | 933 | [[package]] 934 | name = "sha2" 935 | version = "0.10.2" 936 | source = "registry+https://github.com/rust-lang/crates.io-index" 937 | checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" 938 | dependencies = [ 939 | "cfg-if", 940 | "cpufeatures", 941 | "digest 0.10.3", 942 | ] 943 | 944 | [[package]] 945 | name = "signal-hook" 946 | version = "0.3.13" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | checksum = "647c97df271007dcea485bb74ffdb57f2e683f1306c854f468a0c244badabf2d" 949 | dependencies = [ 950 | "libc", 951 | "signal-hook-registry", 952 | ] 953 | 954 | [[package]] 955 | name = "signal-hook-registry" 956 | version = "1.4.0" 957 | source = "registry+https://github.com/rust-lang/crates.io-index" 958 | checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" 959 | dependencies = [ 960 | "libc", 961 | ] 962 | 963 | [[package]] 964 | name = "slab" 965 | version = "0.4.5" 966 | source = "registry+https://github.com/rust-lang/crates.io-index" 967 | checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" 968 | 969 | [[package]] 970 | name = "socket2" 971 | version = "0.4.4" 972 | source = "registry+https://github.com/rust-lang/crates.io-index" 973 | checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" 974 | dependencies = [ 975 | "libc", 976 | "winapi", 977 | ] 978 | 979 | [[package]] 980 | name = "ssri" 981 | version = "7.0.0" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | checksum = "a9cec0d388f39fbe79d7aa600e8d38053bf97b1bc8d350da7c0ba800d0f423f2" 984 | dependencies = [ 985 | "base64", 986 | "digest 0.8.1", 987 | "hex 0.3.2", 988 | "serde", 989 | "sha-1 0.8.2", 990 | "sha2 0.8.2", 991 | "thiserror", 992 | ] 993 | 994 | [[package]] 995 | name = "strsim" 996 | version = "0.10.0" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 999 | 1000 | [[package]] 1001 | name = "subprocess" 1002 | version = "0.2.8" 1003 | source = "registry+https://github.com/rust-lang/crates.io-index" 1004 | checksum = "055cf3ebc2981ad8f0a5a17ef6652f652d87831f79fddcba2ac57bcb9a0aa407" 1005 | dependencies = [ 1006 | "libc", 1007 | "winapi", 1008 | ] 1009 | 1010 | [[package]] 1011 | name = "syn" 1012 | version = "1.0.86" 1013 | source = "registry+https://github.com/rust-lang/crates.io-index" 1014 | checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" 1015 | dependencies = [ 1016 | "proc-macro2", 1017 | "quote", 1018 | "unicode-xid", 1019 | ] 1020 | 1021 | [[package]] 1022 | name = "tempfile" 1023 | version = "3.3.0" 1024 | source = "registry+https://github.com/rust-lang/crates.io-index" 1025 | checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" 1026 | dependencies = [ 1027 | "cfg-if", 1028 | "fastrand", 1029 | "libc", 1030 | "redox_syscall", 1031 | "remove_dir_all", 1032 | "winapi", 1033 | ] 1034 | 1035 | [[package]] 1036 | name = "termcolor" 1037 | version = "1.1.2" 1038 | source = "registry+https://github.com/rust-lang/crates.io-index" 1039 | checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" 1040 | dependencies = [ 1041 | "winapi-util", 1042 | ] 1043 | 1044 | [[package]] 1045 | name = "textwrap" 1046 | version = "0.14.2" 1047 | source = "registry+https://github.com/rust-lang/crates.io-index" 1048 | checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" 1049 | dependencies = [ 1050 | "unicode-width", 1051 | ] 1052 | 1053 | [[package]] 1054 | name = "thiserror" 1055 | version = "1.0.30" 1056 | source = "registry+https://github.com/rust-lang/crates.io-index" 1057 | checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" 1058 | dependencies = [ 1059 | "thiserror-impl", 1060 | ] 1061 | 1062 | [[package]] 1063 | name = "thiserror-impl" 1064 | version = "1.0.30" 1065 | source = "registry+https://github.com/rust-lang/crates.io-index" 1066 | checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" 1067 | dependencies = [ 1068 | "proc-macro2", 1069 | "quote", 1070 | "syn", 1071 | ] 1072 | 1073 | [[package]] 1074 | name = "toml" 1075 | version = "0.5.8" 1076 | source = "registry+https://github.com/rust-lang/crates.io-index" 1077 | checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" 1078 | dependencies = [ 1079 | "serde", 1080 | ] 1081 | 1082 | [[package]] 1083 | name = "typenum" 1084 | version = "1.15.0" 1085 | source = "registry+https://github.com/rust-lang/crates.io-index" 1086 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" 1087 | 1088 | [[package]] 1089 | name = "unicase" 1090 | version = "2.6.0" 1091 | source = "registry+https://github.com/rust-lang/crates.io-index" 1092 | checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" 1093 | dependencies = [ 1094 | "version_check", 1095 | ] 1096 | 1097 | [[package]] 1098 | name = "unicode-width" 1099 | version = "0.1.9" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" 1102 | 1103 | [[package]] 1104 | name = "unicode-xid" 1105 | version = "0.2.2" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" 1108 | 1109 | [[package]] 1110 | name = "value-bag" 1111 | version = "1.0.0-alpha.8" 1112 | source = "registry+https://github.com/rust-lang/crates.io-index" 1113 | checksum = "79923f7731dc61ebfba3633098bf3ac533bbd35ccd8c57e7088d9a5eebe0263f" 1114 | dependencies = [ 1115 | "ctor", 1116 | "version_check", 1117 | ] 1118 | 1119 | [[package]] 1120 | name = "version_check" 1121 | version = "0.9.4" 1122 | source = "registry+https://github.com/rust-lang/crates.io-index" 1123 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1124 | 1125 | [[package]] 1126 | name = "waker-fn" 1127 | version = "1.1.0" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" 1130 | 1131 | [[package]] 1132 | name = "walkdir" 1133 | version = "2.3.2" 1134 | source = "registry+https://github.com/rust-lang/crates.io-index" 1135 | checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" 1136 | dependencies = [ 1137 | "same-file", 1138 | "winapi", 1139 | "winapi-util", 1140 | ] 1141 | 1142 | [[package]] 1143 | name = "wasm-bindgen" 1144 | version = "0.2.79" 1145 | source = "registry+https://github.com/rust-lang/crates.io-index" 1146 | checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" 1147 | dependencies = [ 1148 | "cfg-if", 1149 | "wasm-bindgen-macro", 1150 | ] 1151 | 1152 | [[package]] 1153 | name = "wasm-bindgen-backend" 1154 | version = "0.2.79" 1155 | source = "registry+https://github.com/rust-lang/crates.io-index" 1156 | checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" 1157 | dependencies = [ 1158 | "bumpalo", 1159 | "lazy_static", 1160 | "log", 1161 | "proc-macro2", 1162 | "quote", 1163 | "syn", 1164 | "wasm-bindgen-shared", 1165 | ] 1166 | 1167 | [[package]] 1168 | name = "wasm-bindgen-futures" 1169 | version = "0.4.29" 1170 | source = "registry+https://github.com/rust-lang/crates.io-index" 1171 | checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395" 1172 | dependencies = [ 1173 | "cfg-if", 1174 | "js-sys", 1175 | "wasm-bindgen", 1176 | "web-sys", 1177 | ] 1178 | 1179 | [[package]] 1180 | name = "wasm-bindgen-macro" 1181 | version = "0.2.79" 1182 | source = "registry+https://github.com/rust-lang/crates.io-index" 1183 | checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" 1184 | dependencies = [ 1185 | "quote", 1186 | "wasm-bindgen-macro-support", 1187 | ] 1188 | 1189 | [[package]] 1190 | name = "wasm-bindgen-macro-support" 1191 | version = "0.2.79" 1192 | source = "registry+https://github.com/rust-lang/crates.io-index" 1193 | checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" 1194 | dependencies = [ 1195 | "proc-macro2", 1196 | "quote", 1197 | "syn", 1198 | "wasm-bindgen-backend", 1199 | "wasm-bindgen-shared", 1200 | ] 1201 | 1202 | [[package]] 1203 | name = "wasm-bindgen-shared" 1204 | version = "0.2.79" 1205 | source = "registry+https://github.com/rust-lang/crates.io-index" 1206 | checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" 1207 | 1208 | [[package]] 1209 | name = "web-sys" 1210 | version = "0.3.56" 1211 | source = "registry+https://github.com/rust-lang/crates.io-index" 1212 | checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" 1213 | dependencies = [ 1214 | "js-sys", 1215 | "wasm-bindgen", 1216 | ] 1217 | 1218 | [[package]] 1219 | name = "wepoll-ffi" 1220 | version = "0.1.2" 1221 | source = "registry+https://github.com/rust-lang/crates.io-index" 1222 | checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" 1223 | dependencies = [ 1224 | "cc", 1225 | ] 1226 | 1227 | [[package]] 1228 | name = "winapi" 1229 | version = "0.3.9" 1230 | source = "registry+https://github.com/rust-lang/crates.io-index" 1231 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1232 | dependencies = [ 1233 | "winapi-i686-pc-windows-gnu", 1234 | "winapi-x86_64-pc-windows-gnu", 1235 | ] 1236 | 1237 | [[package]] 1238 | name = "winapi-i686-pc-windows-gnu" 1239 | version = "0.4.0" 1240 | source = "registry+https://github.com/rust-lang/crates.io-index" 1241 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1242 | 1243 | [[package]] 1244 | name = "winapi-util" 1245 | version = "0.1.5" 1246 | source = "registry+https://github.com/rust-lang/crates.io-index" 1247 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 1248 | dependencies = [ 1249 | "winapi", 1250 | ] 1251 | 1252 | [[package]] 1253 | name = "winapi-x86_64-pc-windows-gnu" 1254 | version = "0.4.0" 1255 | source = "registry+https://github.com/rust-lang/crates.io-index" 1256 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1257 | --------------------------------------------------------------------------------