├── .gitignore ├── images └── cakecutter.png ├── Cargo.toml ├── Cake.toml ├── examples └── Python.toml ├── README.md ├── src └── main.rs └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | Cargo.lock -------------------------------------------------------------------------------- /images/cakecutter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dhravya/Cakecutter/HEAD/images/cakecutter.png -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "cakecutter" 3 | version = "0.1.0" 4 | edition = "2021" 5 | license = "MIT" 6 | description = "Cakecutter is a utility tool to help you create new projects quickly, from pre-built cakes" 7 | 8 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 9 | 10 | [dependencies] 11 | toml = "0.5.8" 12 | ureq = "0.1.1" -------------------------------------------------------------------------------- /Cake.toml: -------------------------------------------------------------------------------- 1 | # This is the Cakefile for this project. 2 | # Feel free to add Cakefiles to your own projects! 3 | 4 | [metadata] 5 | name = "Cakecutter" 6 | version = "0.1.0" 7 | description = "Cakecutter template (For rust)" 8 | author = "Dhravya Shah" 9 | author_email = "hello@dhravya.dev" 10 | 11 | [filestructure] 12 | root = [".gitignore", "Cargo.toml", "README.md", "LICENSE"] 13 | examples = ["Python.toml"] 14 | src = ["main.rs"] 15 | 16 | # If you want to, you can literally write all the content here in one file but then what's the point of a "template" lol 17 | [content] 18 | Cargo-toml = """ 19 | [package] 20 | name = "cakecutter" 21 | version = "0.1.0" 22 | edition = "2021" 23 | 24 | [dependencies] 25 | toml = "0.5.8" 26 | """ 27 | 28 | [commands] 29 | # Commands are run every time a new project is created. 30 | 1 = ["cargo", "install"] -------------------------------------------------------------------------------- /examples/Python.toml: -------------------------------------------------------------------------------- 1 | [metadata] 2 | # Metadata is optional for every project. Its just to help keep track of who made what 3 | name = "Python CakeCutter" 4 | version = "0.1.0" 5 | description = "Builds a Python project from a template" 6 | author = "Dhravya Shah" 7 | author_email = "hello@dhravya.dev" 8 | 9 | # This is an example to show how a python project can be set up 10 | [filestructure] 11 | root = ['.gitignore', '.env', 'requirements.txt', 'README.md', 'LICENSE'] 12 | src = ['main.py'] 13 | # TODO: add support for dots in directory name (.github) 14 | 15 | [content] 16 | src--main-py = """ 17 | print("Hello World") 18 | """ 19 | 20 | -gitignore = """ 21 | target/ 22 | .env 23 | venv/ 24 | """ 25 | 26 | LICENSE = """ 27 | Whatever license you want here 28 | """ 29 | 30 | requirements-txt = """requests""" 31 | 32 | [commands] 33 | 1 = ['python', '-m', 'venv', 'venv'] 34 | 2 = ['pip', 'install', '-r', 'requirements.txt'] 35 | 3 = ['python', 'src/main.py'] 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |

Cakecutter

4 |
5 | Create projects from pre-built cakes (templates)! Supports files, packages, content, running commands and more! 6 |
7 | 8 | *** 9 | 10 | Cakecutter is a utility tool that quickly sets up a project from a pre-built template. 11 | 12 | All template files are in `.toml` format, which means they are easy to edit and share with others. 13 | 14 | Here's a python project demo 15 | 16 | Notice how it created the files and ran the VENV command to initialise the virtual environment, and started installing the dependencies 17 | ![Demo](https://us-east-1.tixte.net/uploads/img.dhravya.dev/l0ikgtw4f0a.gif) 18 | 19 | ## Features 20 | - Create projects from pre-built cakes (templates) and make your own! 21 | - Supports all languages (Python, Js, Rust, Go, you name it.) 22 | - Cross-platform 23 | - Super fast ⚡ 24 | - Get Cakes from github or use local Cakefiles 25 | 26 | ### Installation 27 | ``` 28 | cargo install cakecutter 29 | ``` 30 | 31 | ### Usage 32 | ``` 33 | cakecutter [TEMPLATE_NAME] 34 | ``` 35 | You can also use cakes from github (Provided they have a `Cake.toml` file in the root directory of the repository): 36 | ``` 37 | cakecutter https://github.com/dhravya/cakecutter 38 | ``` 39 | 40 | ## Making your own Cakefile 41 | It's really easy to make your own cakefile. There are 4 main sections: 42 | ```toml 43 | [metadata] 44 | 45 | [filestructure] 46 | 47 | [content] 48 | 49 | [commands] 50 | ``` 51 | 52 | ### Basic rules 53 | Since TOML doesn't support `.` and `/` as keys, we use `-` and `--` instead. 54 | 55 | so instead of `main.py`, we use `main-py` and instead of `src/main.py` we use `src--main-py` 56 | 57 | #### Metadata 58 | Metadata is optional, but when you include it, make sure to include the following: 59 | - `name`: The name of your cake 60 | - `version`: Cake version 61 | - `description`: What the cake is for 62 | - `author`: The author of Cake 63 | 64 | #### File structure 65 | The file structure is where you define the structure of your project. 66 | 67 | To include files in the current directory, put them in the `root` list 68 | `root = [".gitignore", "Cargo.toml", "README.md", "LICENSE"]` 69 | 70 | For every other directory, use the following syntax: 71 | `directory_name = [file1, file2]` 72 | So for this repository, it looks something like 73 | ```toml 74 | root = [".gitignore", "Cargo.toml", "README.md", "LICENSE"] 75 | examples = ["Python.toml"] 76 | ``` 77 | 78 | #### Content 79 | Content is where you define the content of your files. 80 | It's pretty simple, just write the name of file (following the basic rules) and the content of the files after it 81 | ```toml 82 | [content] 83 | src--main-py = """ 84 | print("Hello World") 85 | """ 86 | ``` 87 | This will fill in the file `src/main.py` with the content of the string. 88 | 89 | #### Commands 90 | These are the commands that run when a cake is made (Stuff like installing dependencies) 91 | 92 | All keys here should be numbers starting from one and increasing progressively. 93 | 94 | Commands should be written as if written in a Dockerfile 95 | 96 | Here's an examples: 97 | ```toml 98 | [commands] 99 | 1 = ['python', '-m', 'venv', 'venv'] 100 | 2 = ['pip', 'install', '-r', 'requirements.txt'] 101 | 3 = ['python', 'src/main.py'] 102 | ``` 103 | 104 | 105 | ### License 106 | This project is licensed under the mit license 107 | ### Show your support 108 | Leave a ⭐ if you like this project 109 | 110 | *** 111 | Readme made with 💖 using [README Generator by Dhravya Shah](https://github.com/Dhravya/readme-generator) -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | fs::{self, create_dir, File}, 3 | io::Write, 4 | }; 5 | 6 | fn main() { 7 | let mut path_to_toml = std::env::args().nth(1).unwrap_or(String::from("Cake.toml")); 8 | 9 | if path_to_toml.starts_with("https://github.com") { 10 | // Downloads the cake.toml fromm the github repo 11 | let split_text = path_to_toml.split("/").collect::>(); 12 | let repo_name = split_text[split_text.len() - 2]; 13 | let user_name = split_text[split_text.len() - 3]; 14 | 15 | let url = format!( 16 | "https://raw.githubusercontent.com/{}/{}/master/Cake.toml", 17 | user_name, repo_name 18 | ); 19 | 20 | let response = ureq::get(&url).call(); 21 | let mut file = File::create(path_to_toml).unwrap(); 22 | file.write_all(response.into_string().unwrap().as_bytes()).unwrap(); 23 | path_to_toml = "Cake.toml".to_string(); 24 | } 25 | 26 | // Gets the Cake.toml file 27 | let toml = fs::read_to_string(path_to_toml).expect("Could not read the Cake.toml file."); 28 | let toml = match toml.parse::() { 29 | Ok(toml) => toml, 30 | Err(e) => panic!("Could not parse the Cake.toml file: {}", e), 31 | }; 32 | 33 | let filestructure = toml["filestructure"].as_table().unwrap(); 34 | let content = toml["content"].as_table().unwrap(); 35 | let commands = toml["commands"].as_table().unwrap(); 36 | 37 | if toml.get("metadata").is_some() { 38 | let metadata = toml["metadata"].as_table().unwrap(); 39 | 40 | let name = metadata["name"].as_str().unwrap(); 41 | let description = metadata["description"].as_str().unwrap(); 42 | let version = metadata["version"].as_str().unwrap(); 43 | let author = metadata["author"].as_str().unwrap(); 44 | 45 | println!("Using {}", name); 46 | println!("{}", description); 47 | println!("Version: {}", version); 48 | println!("Author: {}", author); 49 | } 50 | 51 | 52 | // Creates the directories and files, and fills with content if any 53 | for (key, value) in filestructure { 54 | for file in value.as_array().unwrap() { 55 | let file = file.as_str().unwrap(); 56 | println!("Creating {}", file); 57 | 58 | let mut filepath = String::new(); 59 | 60 | // If key is root, create in the current directory 61 | if key == "root" { 62 | filepath = format!("{}", file); 63 | } else { 64 | let mut created = String::new(); 65 | for folder in key.split("--") { 66 | // We are matching to prevent the panic from happening 67 | created += &format!("{}/", folder); 68 | match create_dir(created.clone()) { 69 | Ok(_) => (), 70 | Err(_) => (), 71 | } 72 | } 73 | filepath = format!("{}/{}", created, file); 74 | }; 75 | 76 | let mut file = File::create(filepath).unwrap(); 77 | 78 | // Creates the "content key" which is basically how it's written in the toml file 79 | let content_key = format!( 80 | "{}--{}", 81 | key, 82 | value.as_array().unwrap()[0] 83 | .as_str() 84 | .unwrap() 85 | .replace(".", "-") 86 | ); 87 | 88 | // Checks if content key exists 89 | if content.contains_key(content_key.as_str()) { 90 | let content = content[content_key.as_str()].as_str().unwrap(); 91 | file.write_all(content.as_bytes()).unwrap(); 92 | }; 93 | } 94 | } 95 | 96 | // Runs the commands one by one according to the number 97 | // I've done this by iterating over numbers from 1 to the number of commands 98 | 99 | for n in 1..commands.len() + 1 { 100 | println!("Running command {}", &n.to_string()); 101 | let command = commands[&n.to_string()].as_array().unwrap(); 102 | 103 | // Runs the command 104 | std::process::Command::new(command[0].as_str().unwrap()) 105 | .args( 106 | command[1..] 107 | .iter() 108 | .map(|x| x.as_str().unwrap()) 109 | .collect::>(), 110 | ) 111 | .spawn() 112 | .expect("Could not run the command"); 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /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 = "ascii" 7 | version = "0.9.3" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" 10 | 11 | [[package]] 12 | name = "autocfg" 13 | version = "1.1.0" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 16 | 17 | [[package]] 18 | name = "base64" 19 | version = "0.9.3" 20 | source = "registry+https://github.com/rust-lang/crates.io-index" 21 | checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" 22 | dependencies = [ 23 | "byteorder", 24 | "safemem", 25 | ] 26 | 27 | [[package]] 28 | name = "bitflags" 29 | version = "0.9.1" 30 | source = "registry+https://github.com/rust-lang/crates.io-index" 31 | checksum = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" 32 | 33 | [[package]] 34 | name = "byteorder" 35 | version = "1.4.3" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 38 | 39 | [[package]] 40 | name = "cakecutter" 41 | version = "0.1.0" 42 | dependencies = [ 43 | "toml", 44 | "ureq", 45 | ] 46 | 47 | [[package]] 48 | name = "cc" 49 | version = "1.0.73" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 52 | 53 | [[package]] 54 | name = "cfg-if" 55 | version = "1.0.0" 56 | source = "registry+https://github.com/rust-lang/crates.io-index" 57 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 58 | 59 | [[package]] 60 | name = "chunked_transfer" 61 | version = "0.3.1" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "498d20a7aaf62625b9bf26e637cf7736417cde1d0c99f1d04d1170229a85cf87" 64 | 65 | [[package]] 66 | name = "cookie" 67 | version = "0.10.1" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "746858cae4eae40fff37e1998320068df317bc247dc91a67c6cfa053afdc2abb" 70 | dependencies = [ 71 | "time", 72 | "url", 73 | ] 74 | 75 | [[package]] 76 | name = "core-foundation" 77 | version = "0.2.3" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | checksum = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67" 80 | dependencies = [ 81 | "core-foundation-sys", 82 | "libc", 83 | ] 84 | 85 | [[package]] 86 | name = "core-foundation-sys" 87 | version = "0.2.3" 88 | source = "registry+https://github.com/rust-lang/crates.io-index" 89 | checksum = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d" 90 | dependencies = [ 91 | "libc", 92 | ] 93 | 94 | [[package]] 95 | name = "dns-lookup" 96 | version = "0.9.1" 97 | source = "registry+https://github.com/rust-lang/crates.io-index" 98 | checksum = "54810764899241c707428f4a1989351f30c0c2bda5ea07ff2e43148f8935039f" 99 | dependencies = [ 100 | "libc", 101 | "socket2", 102 | "winapi", 103 | ] 104 | 105 | [[package]] 106 | name = "encoding" 107 | version = "0.2.33" 108 | source = "registry+https://github.com/rust-lang/crates.io-index" 109 | checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" 110 | dependencies = [ 111 | "encoding-index-japanese", 112 | "encoding-index-korean", 113 | "encoding-index-simpchinese", 114 | "encoding-index-singlebyte", 115 | "encoding-index-tradchinese", 116 | ] 117 | 118 | [[package]] 119 | name = "encoding-index-japanese" 120 | version = "1.20141219.5" 121 | source = "registry+https://github.com/rust-lang/crates.io-index" 122 | checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" 123 | dependencies = [ 124 | "encoding_index_tests", 125 | ] 126 | 127 | [[package]] 128 | name = "encoding-index-korean" 129 | version = "1.20141219.5" 130 | source = "registry+https://github.com/rust-lang/crates.io-index" 131 | checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" 132 | dependencies = [ 133 | "encoding_index_tests", 134 | ] 135 | 136 | [[package]] 137 | name = "encoding-index-simpchinese" 138 | version = "1.20141219.5" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" 141 | dependencies = [ 142 | "encoding_index_tests", 143 | ] 144 | 145 | [[package]] 146 | name = "encoding-index-singlebyte" 147 | version = "1.20141219.5" 148 | source = "registry+https://github.com/rust-lang/crates.io-index" 149 | checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" 150 | dependencies = [ 151 | "encoding_index_tests", 152 | ] 153 | 154 | [[package]] 155 | name = "encoding-index-tradchinese" 156 | version = "1.20141219.5" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" 159 | dependencies = [ 160 | "encoding_index_tests", 161 | ] 162 | 163 | [[package]] 164 | name = "encoding_index_tests" 165 | version = "0.1.4" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" 168 | 169 | [[package]] 170 | name = "foreign-types" 171 | version = "0.3.2" 172 | source = "registry+https://github.com/rust-lang/crates.io-index" 173 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 174 | dependencies = [ 175 | "foreign-types-shared", 176 | ] 177 | 178 | [[package]] 179 | name = "foreign-types-shared" 180 | version = "0.1.1" 181 | source = "registry+https://github.com/rust-lang/crates.io-index" 182 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 183 | 184 | [[package]] 185 | name = "fuchsia-cprng" 186 | version = "0.1.1" 187 | source = "registry+https://github.com/rust-lang/crates.io-index" 188 | checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" 189 | 190 | [[package]] 191 | name = "idna" 192 | version = "0.1.5" 193 | source = "registry+https://github.com/rust-lang/crates.io-index" 194 | checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" 195 | dependencies = [ 196 | "matches", 197 | "unicode-bidi", 198 | "unicode-normalization", 199 | ] 200 | 201 | [[package]] 202 | name = "itoa" 203 | version = "1.0.1" 204 | source = "registry+https://github.com/rust-lang/crates.io-index" 205 | checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" 206 | 207 | [[package]] 208 | name = "lazy_static" 209 | version = "0.2.11" 210 | source = "registry+https://github.com/rust-lang/crates.io-index" 211 | checksum = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" 212 | 213 | [[package]] 214 | name = "lazy_static" 215 | version = "1.4.0" 216 | source = "registry+https://github.com/rust-lang/crates.io-index" 217 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 218 | 219 | [[package]] 220 | name = "libc" 221 | version = "0.2.119" 222 | source = "registry+https://github.com/rust-lang/crates.io-index" 223 | checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" 224 | 225 | [[package]] 226 | name = "matches" 227 | version = "0.1.9" 228 | source = "registry+https://github.com/rust-lang/crates.io-index" 229 | checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" 230 | 231 | [[package]] 232 | name = "native-tls" 233 | version = "0.1.5" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "f74dbadc8b43df7864539cedb7bc91345e532fdd913cfdc23ad94f4d2d40fbc0" 236 | dependencies = [ 237 | "lazy_static 0.2.11", 238 | "libc", 239 | "openssl", 240 | "schannel", 241 | "security-framework", 242 | "security-framework-sys", 243 | "tempdir", 244 | ] 245 | 246 | [[package]] 247 | name = "openssl" 248 | version = "0.9.24" 249 | source = "registry+https://github.com/rust-lang/crates.io-index" 250 | checksum = "a3605c298474a3aa69de92d21139fb5e2a81688d308262359d85cdd0d12a7985" 251 | dependencies = [ 252 | "bitflags", 253 | "foreign-types", 254 | "lazy_static 1.4.0", 255 | "libc", 256 | "openssl-sys", 257 | ] 258 | 259 | [[package]] 260 | name = "openssl-sys" 261 | version = "0.9.72" 262 | source = "registry+https://github.com/rust-lang/crates.io-index" 263 | checksum = "7e46109c383602735fa0a2e48dd2b7c892b048e1bf69e5c3b1d804b7d9c203cb" 264 | dependencies = [ 265 | "autocfg", 266 | "cc", 267 | "libc", 268 | "pkg-config", 269 | "vcpkg", 270 | ] 271 | 272 | [[package]] 273 | name = "percent-encoding" 274 | version = "1.0.1" 275 | source = "registry+https://github.com/rust-lang/crates.io-index" 276 | checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 277 | 278 | [[package]] 279 | name = "pkg-config" 280 | version = "0.3.24" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" 283 | 284 | [[package]] 285 | name = "qstring" 286 | version = "0.6.0" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | checksum = "545ec057a36a93e25fb5883baed912e4984af4e2543bbf0e3463d962e0408469" 289 | dependencies = [ 290 | "percent-encoding", 291 | ] 292 | 293 | [[package]] 294 | name = "rand" 295 | version = "0.4.6" 296 | source = "registry+https://github.com/rust-lang/crates.io-index" 297 | checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" 298 | dependencies = [ 299 | "fuchsia-cprng", 300 | "libc", 301 | "rand_core 0.3.1", 302 | "rdrand", 303 | "winapi", 304 | ] 305 | 306 | [[package]] 307 | name = "rand_core" 308 | version = "0.3.1" 309 | source = "registry+https://github.com/rust-lang/crates.io-index" 310 | checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" 311 | dependencies = [ 312 | "rand_core 0.4.2", 313 | ] 314 | 315 | [[package]] 316 | name = "rand_core" 317 | version = "0.4.2" 318 | source = "registry+https://github.com/rust-lang/crates.io-index" 319 | checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" 320 | 321 | [[package]] 322 | name = "rdrand" 323 | version = "0.4.0" 324 | source = "registry+https://github.com/rust-lang/crates.io-index" 325 | checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 326 | dependencies = [ 327 | "rand_core 0.3.1", 328 | ] 329 | 330 | [[package]] 331 | name = "remove_dir_all" 332 | version = "0.5.3" 333 | source = "registry+https://github.com/rust-lang/crates.io-index" 334 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" 335 | dependencies = [ 336 | "winapi", 337 | ] 338 | 339 | [[package]] 340 | name = "ryu" 341 | version = "1.0.9" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" 344 | 345 | [[package]] 346 | name = "safemem" 347 | version = "0.3.3" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" 350 | 351 | [[package]] 352 | name = "schannel" 353 | version = "0.1.19" 354 | source = "registry+https://github.com/rust-lang/crates.io-index" 355 | checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" 356 | dependencies = [ 357 | "lazy_static 1.4.0", 358 | "winapi", 359 | ] 360 | 361 | [[package]] 362 | name = "security-framework" 363 | version = "0.1.16" 364 | source = "registry+https://github.com/rust-lang/crates.io-index" 365 | checksum = "dfa44ee9c54ce5eecc9de7d5acbad112ee58755239381f687e564004ba4a2332" 366 | dependencies = [ 367 | "core-foundation", 368 | "core-foundation-sys", 369 | "libc", 370 | "security-framework-sys", 371 | ] 372 | 373 | [[package]] 374 | name = "security-framework-sys" 375 | version = "0.1.16" 376 | source = "registry+https://github.com/rust-lang/crates.io-index" 377 | checksum = "5421621e836278a0b139268f36eee0dc7e389b784dc3f79d8f11aabadf41bead" 378 | dependencies = [ 379 | "core-foundation-sys", 380 | "libc", 381 | ] 382 | 383 | [[package]] 384 | name = "serde" 385 | version = "1.0.136" 386 | source = "registry+https://github.com/rust-lang/crates.io-index" 387 | checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" 388 | 389 | [[package]] 390 | name = "serde_json" 391 | version = "1.0.79" 392 | source = "registry+https://github.com/rust-lang/crates.io-index" 393 | checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" 394 | dependencies = [ 395 | "itoa", 396 | "ryu", 397 | "serde", 398 | ] 399 | 400 | [[package]] 401 | name = "socket2" 402 | version = "0.3.19" 403 | source = "registry+https://github.com/rust-lang/crates.io-index" 404 | checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" 405 | dependencies = [ 406 | "cfg-if", 407 | "libc", 408 | "winapi", 409 | ] 410 | 411 | [[package]] 412 | name = "tempdir" 413 | version = "0.3.7" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" 416 | dependencies = [ 417 | "rand", 418 | "remove_dir_all", 419 | ] 420 | 421 | [[package]] 422 | name = "time" 423 | version = "0.1.44" 424 | source = "registry+https://github.com/rust-lang/crates.io-index" 425 | checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" 426 | dependencies = [ 427 | "libc", 428 | "wasi", 429 | "winapi", 430 | ] 431 | 432 | [[package]] 433 | name = "tinyvec" 434 | version = "1.5.1" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" 437 | dependencies = [ 438 | "tinyvec_macros", 439 | ] 440 | 441 | [[package]] 442 | name = "tinyvec_macros" 443 | version = "0.1.0" 444 | source = "registry+https://github.com/rust-lang/crates.io-index" 445 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 446 | 447 | [[package]] 448 | name = "toml" 449 | version = "0.5.8" 450 | source = "registry+https://github.com/rust-lang/crates.io-index" 451 | checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" 452 | dependencies = [ 453 | "serde", 454 | ] 455 | 456 | [[package]] 457 | name = "unicode-bidi" 458 | version = "0.3.7" 459 | source = "registry+https://github.com/rust-lang/crates.io-index" 460 | checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" 461 | 462 | [[package]] 463 | name = "unicode-normalization" 464 | version = "0.1.19" 465 | source = "registry+https://github.com/rust-lang/crates.io-index" 466 | checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" 467 | dependencies = [ 468 | "tinyvec", 469 | ] 470 | 471 | [[package]] 472 | name = "ureq" 473 | version = "0.1.1" 474 | source = "registry+https://github.com/rust-lang/crates.io-index" 475 | checksum = "80fa4f2f5a128348c2bd9ba0e3c8b7b5583caf678053913039306270547b66fb" 476 | dependencies = [ 477 | "ascii", 478 | "base64", 479 | "chunked_transfer", 480 | "cookie", 481 | "dns-lookup", 482 | "encoding", 483 | "lazy_static 1.4.0", 484 | "native-tls", 485 | "qstring", 486 | "serde_json", 487 | "url", 488 | ] 489 | 490 | [[package]] 491 | name = "url" 492 | version = "1.7.2" 493 | source = "registry+https://github.com/rust-lang/crates.io-index" 494 | checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" 495 | dependencies = [ 496 | "idna", 497 | "matches", 498 | "percent-encoding", 499 | ] 500 | 501 | [[package]] 502 | name = "vcpkg" 503 | version = "0.2.15" 504 | source = "registry+https://github.com/rust-lang/crates.io-index" 505 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 506 | 507 | [[package]] 508 | name = "wasi" 509 | version = "0.10.0+wasi-snapshot-preview1" 510 | source = "registry+https://github.com/rust-lang/crates.io-index" 511 | checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" 512 | 513 | [[package]] 514 | name = "winapi" 515 | version = "0.3.9" 516 | source = "registry+https://github.com/rust-lang/crates.io-index" 517 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 518 | dependencies = [ 519 | "winapi-i686-pc-windows-gnu", 520 | "winapi-x86_64-pc-windows-gnu", 521 | ] 522 | 523 | [[package]] 524 | name = "winapi-i686-pc-windows-gnu" 525 | version = "0.4.0" 526 | source = "registry+https://github.com/rust-lang/crates.io-index" 527 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 528 | 529 | [[package]] 530 | name = "winapi-x86_64-pc-windows-gnu" 531 | version = "0.4.0" 532 | source = "registry+https://github.com/rust-lang/crates.io-index" 533 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 534 | --------------------------------------------------------------------------------