Compare commits
	
		
			17 Commits 
		
	
	
		
			7f8da3e584
			...
			bf36263cef
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
									
								
								 | 
						bf36263cef | |
| 
							
							
								
									
								
								 | 
						df6e245030 | |
| 
							
							
								
									
								
								 | 
						eab31e5e91 | |
| 
							
							
								
									
								
								 | 
						a80774b341 | |
| 
							
							
								
									
								
								 | 
						0c7d55647e | |
| 
							
							
								
									
								
								 | 
						01276004e1 | |
| 
							
							
								
									
								
								 | 
						c89841ad38 | |
| 
							
							
								
									
								
								 | 
						27a61f8a9a | |
| 
							
							
								
									
								
								 | 
						e3174f21af | |
| 
							
							
								
									
								
								 | 
						e3f134a9bf | |
| 
							
							
								
									
								
								 | 
						68434ca75f | |
| 
							
							
								
									
								
								 | 
						8bc71b3214 | |
| 
							
							
								
									
								
								 | 
						f804c01849 | |
| 
							
							
								
									
								
								 | 
						2519f8b86d | |
| 
							
							
								
									
								
								 | 
						e60bc35ca2 | |
| 
							
							
								
									
								
								 | 
						c6d29f329c | |
| 
							
							
								
									
								
								 | 
						207e735556 | 
| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This hook checks if the commit message ends with an issue number, and if not,
 | 
				
			||||||
 | 
					# tries to derive that number from the branch name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					branch=`git rev-parse --abbrev-ref HEAD`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This check doesn't need to run when commiting to develop/master
 | 
				
			||||||
 | 
					[[ "$branch" =~ ^master|develop$ ]] && exit 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					issue_num=`echo "$branch" | grep -Po '^[0-9]+(?=-)'`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Check if issue number is already present
 | 
				
			||||||
 | 
					if ! grep -q '([0-9]\+)$' "$1"; then
 | 
				
			||||||
 | 
					    # Error out if we can't derive issue number
 | 
				
			||||||
 | 
					    [[ -z "$issue_num" ]] && { 
 | 
				
			||||||
 | 
					        >&2 echo "Couldn't derive issue number from branch. Please add one manually.";
 | 
				
			||||||
 | 
					        exit 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Append issue number, and remove all comments
 | 
				
			||||||
 | 
					    echo "[#$issue_num]" "$(cat "$1")" > "$1"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,14 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This hook lints the code, and if we're on develop or master, also forces the tests to pass.
 | 
				
			||||||
 | 
					cargo fmt -- --check
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					branch=`git rev-parse --abbrev-ref HEAD`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TODO should we add release branches here as well?
 | 
				
			||||||
 | 
					if [[ "$branch" =~ ^master|develop$ ]]; then
 | 
				
			||||||
 | 
					    make test > /dev/null 2>&1 || {
 | 
				
			||||||
 | 
					        >&2 echo "Tests failed. check 'make test' for more info.";
 | 
				
			||||||
 | 
					        exit 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
| 
						 | 
					@ -56,6 +56,15 @@ dependencies = [
 | 
				
			||||||
 "opaque-debug",
 | 
					 "opaque-debug",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "aho-corasick"
 | 
				
			||||||
 | 
					version = "0.7.15"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "memchr",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "atty"
 | 
					name = "atty"
 | 
				
			||||||
version = "0.2.14"
 | 
					version = "0.2.14"
 | 
				
			||||||
| 
						 | 
					@ -124,9 +133,9 @@ checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "byteorder"
 | 
					name = "byteorder"
 | 
				
			||||||
version = "1.4.2"
 | 
					version = "1.4.3"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b"
 | 
					checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "bytes"
 | 
					name = "bytes"
 | 
				
			||||||
| 
						 | 
					@ -152,6 +161,19 @@ version = "1.0.0"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 | 
					checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "chrono"
 | 
				
			||||||
 | 
					version = "0.4.19"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "libc",
 | 
				
			||||||
 | 
					 "num-integer",
 | 
				
			||||||
 | 
					 "num-traits",
 | 
				
			||||||
 | 
					 "time 0.1.44",
 | 
				
			||||||
 | 
					 "winapi 0.3.9",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "cipher"
 | 
					name = "cipher"
 | 
				
			||||||
version = "0.2.5"
 | 
					version = "0.2.5"
 | 
				
			||||||
| 
						 | 
					@ -180,7 +202,7 @@ dependencies = [
 | 
				
			||||||
 "percent-encoding 2.1.0",
 | 
					 "percent-encoding 2.1.0",
 | 
				
			||||||
 "rand",
 | 
					 "rand",
 | 
				
			||||||
 "sha2",
 | 
					 "sha2",
 | 
				
			||||||
 "time 0.1.43",
 | 
					 "time 0.1.44",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
| 
						 | 
					@ -190,8 +212,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951"
 | 
					checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "percent-encoding 2.1.0",
 | 
					 "percent-encoding 2.1.0",
 | 
				
			||||||
 "time 0.2.25",
 | 
					 "time 0.2.26",
 | 
				
			||||||
 "version_check 0.9.2",
 | 
					 "version_check 0.9.3",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
| 
						 | 
					@ -206,7 +228,7 @@ dependencies = [
 | 
				
			||||||
 "publicsuffix",
 | 
					 "publicsuffix",
 | 
				
			||||||
 "serde",
 | 
					 "serde",
 | 
				
			||||||
 "serde_json",
 | 
					 "serde_json",
 | 
				
			||||||
 "time 0.2.25",
 | 
					 "time 0.2.26",
 | 
				
			||||||
 "url 2.2.1",
 | 
					 "url 2.2.1",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -317,6 +339,8 @@ dependencies = [
 | 
				
			||||||
name = "fej"
 | 
					name = "fej"
 | 
				
			||||||
version = "0.0.1"
 | 
					version = "0.0.1"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "chrono",
 | 
				
			||||||
 | 
					 "regex",
 | 
				
			||||||
 "reqwest",
 | 
					 "reqwest",
 | 
				
			||||||
 "rocket",
 | 
					 "rocket",
 | 
				
			||||||
 "rocket_contrib",
 | 
					 "rocket_contrib",
 | 
				
			||||||
| 
						 | 
					@ -456,7 +480,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817"
 | 
					checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "typenum",
 | 
					 "typenum",
 | 
				
			||||||
 "version_check 0.9.2",
 | 
					 "version_check 0.9.3",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
| 
						 | 
					@ -553,12 +577,13 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "http-body"
 | 
					name = "http-body"
 | 
				
			||||||
version = "0.4.0"
 | 
					version = "0.4.1"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "2861bd27ee074e5ee891e8b539837a9430012e249d7f0ca2d795650f579c1994"
 | 
					checksum = "5dfb77c123b4e2f72a2069aeae0b4b4949cc7e966df277813fc16347e7549737"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "bytes",
 | 
					 "bytes",
 | 
				
			||||||
 "http",
 | 
					 "http",
 | 
				
			||||||
 | 
					 "pin-project-lite",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
| 
						 | 
					@ -585,7 +610,7 @@ dependencies = [
 | 
				
			||||||
 "log 0.3.9",
 | 
					 "log 0.3.9",
 | 
				
			||||||
 "mime 0.2.6",
 | 
					 "mime 0.2.6",
 | 
				
			||||||
 "num_cpus",
 | 
					 "num_cpus",
 | 
				
			||||||
 "time 0.1.43",
 | 
					 "time 0.1.44",
 | 
				
			||||||
 "traitobject",
 | 
					 "traitobject",
 | 
				
			||||||
 "typeable",
 | 
					 "typeable",
 | 
				
			||||||
 "unicase",
 | 
					 "unicase",
 | 
				
			||||||
| 
						 | 
					@ -653,9 +678,9 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "indexmap"
 | 
					name = "indexmap"
 | 
				
			||||||
version = "1.6.1"
 | 
					version = "1.6.2"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b"
 | 
					checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "autocfg",
 | 
					 "autocfg",
 | 
				
			||||||
 "hashbrown",
 | 
					 "hashbrown",
 | 
				
			||||||
| 
						 | 
					@ -704,9 +729,9 @@ checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "js-sys"
 | 
					name = "js-sys"
 | 
				
			||||||
version = "0.3.48"
 | 
					version = "0.3.49"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "dc9f84f9b115ce7843d60706df1422a916680bfdfcbdb0447c5614ff9d7e4d78"
 | 
					checksum = "dc15e39392125075f60c95ba416f5381ff6c3a948ff02ab12464715adf56c821"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "wasm-bindgen",
 | 
					 "wasm-bindgen",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -741,9 +766,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "libc"
 | 
					name = "libc"
 | 
				
			||||||
version = "0.2.88"
 | 
					version = "0.2.91"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "03b07a082330a35e43f63177cc01689da34fbffa0105e1246cf0311472cac73a"
 | 
					checksum = "8916b1f6ca17130ec6568feccee27c156ad12037880833a3b842a823236502e7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "log"
 | 
					name = "log"
 | 
				
			||||||
| 
						 | 
					@ -811,13 +836,13 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "mio"
 | 
					name = "mio"
 | 
				
			||||||
version = "0.7.9"
 | 
					version = "0.7.11"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "a5dede4e2065b3842b8b0af444119f3aa331cc7cc2dd20388bfb0f5d5a38823a"
 | 
					checksum = "cf80d3e903b34e0bd7282b218398aec54e082c840d9baf8339e0080a0c542956"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "libc",
 | 
					 "libc",
 | 
				
			||||||
 "log 0.4.14",
 | 
					 "log 0.4.14",
 | 
				
			||||||
 "miow 0.3.6",
 | 
					 "miow 0.3.7",
 | 
				
			||||||
 "ntapi",
 | 
					 "ntapi",
 | 
				
			||||||
 "winapi 0.3.9",
 | 
					 "winapi 0.3.9",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -848,11 +873,10 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "miow"
 | 
					name = "miow"
 | 
				
			||||||
version = "0.3.6"
 | 
					version = "0.3.7"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897"
 | 
					checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "socket2",
 | 
					 | 
				
			||||||
 "winapi 0.3.9",
 | 
					 "winapi 0.3.9",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -912,6 +936,25 @@ dependencies = [
 | 
				
			||||||
 "winapi 0.3.9",
 | 
					 "winapi 0.3.9",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "num-integer"
 | 
				
			||||||
 | 
					version = "0.1.44"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "autocfg",
 | 
				
			||||||
 | 
					 "num-traits",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "num-traits"
 | 
				
			||||||
 | 
					version = "0.2.14"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "autocfg",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "num_cpus"
 | 
					name = "num_cpus"
 | 
				
			||||||
version = "1.13.0"
 | 
					version = "1.13.0"
 | 
				
			||||||
| 
						 | 
					@ -922,6 +965,12 @@ dependencies = [
 | 
				
			||||||
 "libc",
 | 
					 "libc",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "once_cell"
 | 
				
			||||||
 | 
					version = "1.7.2"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "opaque-debug"
 | 
					name = "opaque-debug"
 | 
				
			||||||
version = "0.3.0"
 | 
					version = "0.3.0"
 | 
				
			||||||
| 
						 | 
					@ -930,15 +979,15 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "openssl"
 | 
					name = "openssl"
 | 
				
			||||||
version = "0.10.32"
 | 
					version = "0.10.33"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70"
 | 
					checksum = "a61075b62a23fef5a29815de7536d940aa35ce96d18ce0cc5076272db678a577"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "bitflags",
 | 
					 "bitflags",
 | 
				
			||||||
 "cfg-if 1.0.0",
 | 
					 "cfg-if 1.0.0",
 | 
				
			||||||
 "foreign-types",
 | 
					 "foreign-types",
 | 
				
			||||||
 "lazy_static",
 | 
					 | 
				
			||||||
 "libc",
 | 
					 "libc",
 | 
				
			||||||
 | 
					 "once_cell",
 | 
				
			||||||
 "openssl-sys",
 | 
					 "openssl-sys",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -950,9 +999,9 @@ checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "openssl-sys"
 | 
					name = "openssl-sys"
 | 
				
			||||||
version = "0.9.60"
 | 
					version = "0.9.61"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "921fc71883267538946025deffb622905ecad223c28efbfdef9bb59a0175f3e6"
 | 
					checksum = "313752393519e876837e09e1fa183ddef0be7735868dced3196f4472d536277f"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "autocfg",
 | 
					 "autocfg",
 | 
				
			||||||
 "cc",
 | 
					 "cc",
 | 
				
			||||||
| 
						 | 
					@ -979,7 +1028,7 @@ dependencies = [
 | 
				
			||||||
 "proc-macro2 0.4.30",
 | 
					 "proc-macro2 0.4.30",
 | 
				
			||||||
 "quote 0.6.13",
 | 
					 "quote 0.6.13",
 | 
				
			||||||
 "syn 0.15.44",
 | 
					 "syn 0.15.44",
 | 
				
			||||||
 "version_check 0.9.2",
 | 
					 "version_check 0.9.3",
 | 
				
			||||||
 "yansi",
 | 
					 "yansi",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1012,7 +1061,7 @@ checksum = "758669ae3558c6f74bd2a18b41f7ac0b5a195aea6639d6a9b5e5d1ad5ba24c0b"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "proc-macro2 1.0.24",
 | 
					 "proc-macro2 1.0.24",
 | 
				
			||||||
 "quote 1.0.9",
 | 
					 "quote 1.0.9",
 | 
				
			||||||
 "syn 1.0.63",
 | 
					 "syn 1.0.64",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
| 
						 | 
					@ -1151,6 +1200,23 @@ dependencies = [
 | 
				
			||||||
 "bitflags",
 | 
					 "bitflags",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "regex"
 | 
				
			||||||
 | 
					version = "1.4.5"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "aho-corasick",
 | 
				
			||||||
 | 
					 "memchr",
 | 
				
			||||||
 | 
					 "regex-syntax",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "regex-syntax"
 | 
				
			||||||
 | 
					version = "0.6.23"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "remove_dir_all"
 | 
					name = "remove_dir_all"
 | 
				
			||||||
version = "0.5.3"
 | 
					version = "0.5.3"
 | 
				
			||||||
| 
						 | 
					@ -1188,7 +1254,7 @@ dependencies = [
 | 
				
			||||||
 "serde",
 | 
					 "serde",
 | 
				
			||||||
 "serde_json",
 | 
					 "serde_json",
 | 
				
			||||||
 "serde_urlencoded",
 | 
					 "serde_urlencoded",
 | 
				
			||||||
 "time 0.2.25",
 | 
					 "time 0.2.26",
 | 
				
			||||||
 "tokio",
 | 
					 "tokio",
 | 
				
			||||||
 "tokio-native-tls",
 | 
					 "tokio-native-tls",
 | 
				
			||||||
 "url 2.2.1",
 | 
					 "url 2.2.1",
 | 
				
			||||||
| 
						 | 
					@ -1213,9 +1279,9 @@ dependencies = [
 | 
				
			||||||
 "rocket_codegen",
 | 
					 "rocket_codegen",
 | 
				
			||||||
 "rocket_http",
 | 
					 "rocket_http",
 | 
				
			||||||
 "state",
 | 
					 "state",
 | 
				
			||||||
 "time 0.1.43",
 | 
					 "time 0.1.44",
 | 
				
			||||||
 "toml",
 | 
					 "toml",
 | 
				
			||||||
 "version_check 0.9.2",
 | 
					 "version_check 0.9.3",
 | 
				
			||||||
 "yansi",
 | 
					 "yansi",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1230,7 +1296,7 @@ dependencies = [
 | 
				
			||||||
 "indexmap",
 | 
					 "indexmap",
 | 
				
			||||||
 "quote 0.6.13",
 | 
					 "quote 0.6.13",
 | 
				
			||||||
 "rocket_http",
 | 
					 "rocket_http",
 | 
				
			||||||
 "version_check 0.9.2",
 | 
					 "version_check 0.9.3",
 | 
				
			||||||
 "yansi",
 | 
					 "yansi",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1260,7 +1326,7 @@ dependencies = [
 | 
				
			||||||
 "percent-encoding 1.0.1",
 | 
					 "percent-encoding 1.0.1",
 | 
				
			||||||
 "smallvec",
 | 
					 "smallvec",
 | 
				
			||||||
 "state",
 | 
					 "state",
 | 
				
			||||||
 "time 0.1.43",
 | 
					 "time 0.1.44",
 | 
				
			||||||
 "unicode-xid 0.1.0",
 | 
					 "unicode-xid 0.1.0",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1344,22 +1410,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "serde"
 | 
					name = "serde"
 | 
				
			||||||
version = "1.0.124"
 | 
					version = "1.0.125"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "bd761ff957cb2a45fbb9ab3da6512de9de55872866160b23c25f1a841e99d29f"
 | 
					checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "serde_derive",
 | 
					 "serde_derive",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "serde_derive"
 | 
					name = "serde_derive"
 | 
				
			||||||
version = "1.0.124"
 | 
					version = "1.0.125"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "1800f7693e94e186f5e25a28291ae1570da908aff7d97a095dec1e56ff99069b"
 | 
					checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "proc-macro2 1.0.24",
 | 
					 "proc-macro2 1.0.24",
 | 
				
			||||||
 "quote 1.0.9",
 | 
					 "quote 1.0.9",
 | 
				
			||||||
 "syn 1.0.63",
 | 
					 "syn 1.0.64",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
| 
						 | 
					@ -1429,11 +1495,11 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "standback"
 | 
					name = "standback"
 | 
				
			||||||
version = "0.2.15"
 | 
					version = "0.2.17"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "a2beb4d1860a61f571530b3f855a1b538d0200f7871c63331ecd6f17b1f014f8"
 | 
					checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "version_check 0.9.2",
 | 
					 "version_check 0.9.3",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
| 
						 | 
					@ -1466,7 +1532,7 @@ dependencies = [
 | 
				
			||||||
 "quote 1.0.9",
 | 
					 "quote 1.0.9",
 | 
				
			||||||
 "serde",
 | 
					 "serde",
 | 
				
			||||||
 "serde_derive",
 | 
					 "serde_derive",
 | 
				
			||||||
 "syn 1.0.63",
 | 
					 "syn 1.0.64",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
| 
						 | 
					@ -1482,7 +1548,7 @@ dependencies = [
 | 
				
			||||||
 "serde_derive",
 | 
					 "serde_derive",
 | 
				
			||||||
 "serde_json",
 | 
					 "serde_json",
 | 
				
			||||||
 "sha1",
 | 
					 "sha1",
 | 
				
			||||||
 "syn 1.0.63",
 | 
					 "syn 1.0.64",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
| 
						 | 
					@ -1510,9 +1576,9 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "syn"
 | 
					name = "syn"
 | 
				
			||||||
version = "1.0.63"
 | 
					version = "1.0.64"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "8fd9bc7ccc2688b3344c2f48b9b546648b25ce0b20fc717ee7fa7981a8ca9717"
 | 
					checksum = "3fd9d1e9976102a03c542daa2eff1b43f9d72306342f3f8b3ed5fb8908195d6f"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "proc-macro2 1.0.24",
 | 
					 "proc-macro2 1.0.24",
 | 
				
			||||||
 "quote 1.0.9",
 | 
					 "quote 1.0.9",
 | 
				
			||||||
| 
						 | 
					@ -1535,26 +1601,27 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "time"
 | 
					name = "time"
 | 
				
			||||||
version = "0.1.43"
 | 
					version = "0.1.44"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
 | 
					checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "libc",
 | 
					 "libc",
 | 
				
			||||||
 | 
					 "wasi",
 | 
				
			||||||
 "winapi 0.3.9",
 | 
					 "winapi 0.3.9",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "time"
 | 
					name = "time"
 | 
				
			||||||
version = "0.2.25"
 | 
					version = "0.2.26"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "1195b046942c221454c2539395f85413b33383a067449d78aab2b7b052a142f7"
 | 
					checksum = "08a8cbfbf47955132d0202d1662f49b2423ae35862aee471f3ba4b133358f372"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "const_fn",
 | 
					 "const_fn",
 | 
				
			||||||
 "libc",
 | 
					 "libc",
 | 
				
			||||||
 "standback",
 | 
					 "standback",
 | 
				
			||||||
 "stdweb",
 | 
					 "stdweb",
 | 
				
			||||||
 "time-macros",
 | 
					 "time-macros",
 | 
				
			||||||
 "version_check 0.9.2",
 | 
					 "version_check 0.9.3",
 | 
				
			||||||
 "winapi 0.3.9",
 | 
					 "winapi 0.3.9",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1578,7 +1645,7 @@ dependencies = [
 | 
				
			||||||
 "proc-macro2 1.0.24",
 | 
					 "proc-macro2 1.0.24",
 | 
				
			||||||
 "quote 1.0.9",
 | 
					 "quote 1.0.9",
 | 
				
			||||||
 "standback",
 | 
					 "standback",
 | 
				
			||||||
 "syn 1.0.63",
 | 
					 "syn 1.0.64",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
| 
						 | 
					@ -1598,15 +1665,15 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "tokio"
 | 
					name = "tokio"
 | 
				
			||||||
version = "1.3.0"
 | 
					version = "1.4.0"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "8d56477f6ed99e10225f38f9f75f872f29b8b8bd8c0b946f63345bb144e9eeda"
 | 
					checksum = "134af885d758d645f0f0505c9a8b3f9bf8a348fd822e112ab5248138348f1722"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "autocfg",
 | 
					 "autocfg",
 | 
				
			||||||
 "bytes",
 | 
					 "bytes",
 | 
				
			||||||
 "libc",
 | 
					 "libc",
 | 
				
			||||||
 "memchr",
 | 
					 "memchr",
 | 
				
			||||||
 "mio 0.7.9",
 | 
					 "mio 0.7.11",
 | 
				
			||||||
 "num_cpus",
 | 
					 "num_cpus",
 | 
				
			||||||
 "pin-project-lite",
 | 
					 "pin-project-lite",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -1623,9 +1690,9 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "tokio-util"
 | 
					name = "tokio-util"
 | 
				
			||||||
version = "0.6.4"
 | 
					version = "0.6.5"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "ec31e5cc6b46e653cf57762f36f71d5e6386391d88a72fd6db4508f8f676fb29"
 | 
					checksum = "5143d049e85af7fbc36f5454d990e62c2df705b3589f123b71f441b6b59f443f"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "bytes",
 | 
					 "bytes",
 | 
				
			||||||
 "futures-core",
 | 
					 "futures-core",
 | 
				
			||||||
| 
						 | 
					@ -1690,9 +1757,9 @@ checksum = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "typenum"
 | 
					name = "typenum"
 | 
				
			||||||
version = "1.12.0"
 | 
					version = "1.13.0"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33"
 | 
					checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "unicase"
 | 
					name = "unicase"
 | 
				
			||||||
| 
						 | 
					@ -1780,15 +1847,15 @@ checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "version_check"
 | 
					name = "version_check"
 | 
				
			||||||
version = "0.9.2"
 | 
					version = "0.9.3"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed"
 | 
					checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "walkdir"
 | 
					name = "walkdir"
 | 
				
			||||||
version = "2.3.1"
 | 
					version = "2.3.2"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d"
 | 
					checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "same-file",
 | 
					 "same-file",
 | 
				
			||||||
 "winapi 0.3.9",
 | 
					 "winapi 0.3.9",
 | 
				
			||||||
| 
						 | 
					@ -1807,15 +1874,15 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "wasi"
 | 
					name = "wasi"
 | 
				
			||||||
version = "0.10.2+wasi-snapshot-preview1"
 | 
					version = "0.10.0+wasi-snapshot-preview1"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
 | 
					checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "wasm-bindgen"
 | 
					name = "wasm-bindgen"
 | 
				
			||||||
version = "0.2.71"
 | 
					version = "0.2.72"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "7ee1280240b7c461d6a0071313e08f34a60b0365f14260362e5a2b17d1d31aa7"
 | 
					checksum = "8fe8f61dba8e5d645a4d8132dc7a0a66861ed5e1045d2c0ed940fab33bac0fbe"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "cfg-if 1.0.0",
 | 
					 "cfg-if 1.0.0",
 | 
				
			||||||
 "serde",
 | 
					 "serde",
 | 
				
			||||||
| 
						 | 
					@ -1825,24 +1892,24 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "wasm-bindgen-backend"
 | 
					name = "wasm-bindgen-backend"
 | 
				
			||||||
version = "0.2.71"
 | 
					version = "0.2.72"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "5b7d8b6942b8bb3a9b0e73fc79b98095a27de6fa247615e59d096754a3bc2aa8"
 | 
					checksum = "046ceba58ff062da072c7cb4ba5b22a37f00a302483f7e2a6cdc18fedbdc1fd3"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "bumpalo",
 | 
					 "bumpalo",
 | 
				
			||||||
 "lazy_static",
 | 
					 "lazy_static",
 | 
				
			||||||
 "log 0.4.14",
 | 
					 "log 0.4.14",
 | 
				
			||||||
 "proc-macro2 1.0.24",
 | 
					 "proc-macro2 1.0.24",
 | 
				
			||||||
 "quote 1.0.9",
 | 
					 "quote 1.0.9",
 | 
				
			||||||
 "syn 1.0.63",
 | 
					 "syn 1.0.64",
 | 
				
			||||||
 "wasm-bindgen-shared",
 | 
					 "wasm-bindgen-shared",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "wasm-bindgen-futures"
 | 
					name = "wasm-bindgen-futures"
 | 
				
			||||||
version = "0.4.21"
 | 
					version = "0.4.22"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "8e67a5806118af01f0d9045915676b22aaebecf4178ae7021bc171dab0b897ab"
 | 
					checksum = "73157efb9af26fb564bb59a009afd1c7c334a44db171d280690d0c3faaec3468"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "cfg-if 1.0.0",
 | 
					 "cfg-if 1.0.0",
 | 
				
			||||||
 "js-sys",
 | 
					 "js-sys",
 | 
				
			||||||
| 
						 | 
					@ -1852,9 +1919,9 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "wasm-bindgen-macro"
 | 
					name = "wasm-bindgen-macro"
 | 
				
			||||||
version = "0.2.71"
 | 
					version = "0.2.72"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "e5ac38da8ef716661f0f36c0d8320b89028efe10c7c0afde65baffb496ce0d3b"
 | 
					checksum = "0ef9aa01d36cda046f797c57959ff5f3c615c9cc63997a8d545831ec7976819b"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "quote 1.0.9",
 | 
					 "quote 1.0.9",
 | 
				
			||||||
 "wasm-bindgen-macro-support",
 | 
					 "wasm-bindgen-macro-support",
 | 
				
			||||||
| 
						 | 
					@ -1862,28 +1929,28 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "wasm-bindgen-macro-support"
 | 
					name = "wasm-bindgen-macro-support"
 | 
				
			||||||
version = "0.2.71"
 | 
					version = "0.2.72"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "cc053ec74d454df287b9374ee8abb36ffd5acb95ba87da3ba5b7d3fe20eb401e"
 | 
					checksum = "96eb45c1b2ee33545a813a92dbb53856418bf7eb54ab34f7f7ff1448a5b3735d"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "proc-macro2 1.0.24",
 | 
					 "proc-macro2 1.0.24",
 | 
				
			||||||
 "quote 1.0.9",
 | 
					 "quote 1.0.9",
 | 
				
			||||||
 "syn 1.0.63",
 | 
					 "syn 1.0.64",
 | 
				
			||||||
 "wasm-bindgen-backend",
 | 
					 "wasm-bindgen-backend",
 | 
				
			||||||
 "wasm-bindgen-shared",
 | 
					 "wasm-bindgen-shared",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "wasm-bindgen-shared"
 | 
					name = "wasm-bindgen-shared"
 | 
				
			||||||
version = "0.2.71"
 | 
					version = "0.2.72"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "7d6f8ec44822dd71f5f221a5847fb34acd9060535c1211b70a05844c0f6383b1"
 | 
					checksum = "b7148f4696fb4960a346eaa60bbfb42a1ac4ebba21f750f75fc1375b098d5ffa"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "web-sys"
 | 
					name = "web-sys"
 | 
				
			||||||
version = "0.3.48"
 | 
					version = "0.3.49"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "ec600b26223b2948cedfde2a0aa6756dcf1fef616f43d7b3097aaf53a6c4d92b"
 | 
					checksum = "59fe19d70f5dacc03f6e46777213facae5ac3801575d56ca6cbd4c93dcd12310"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "js-sys",
 | 
					 "js-sys",
 | 
				
			||||||
 "wasm-bindgen",
 | 
					 "wasm-bindgen",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,6 +9,8 @@ edition = "2018"
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
rocket = "0.4.7"
 | 
					rocket = "0.4.7"
 | 
				
			||||||
serde = "1.0.124"
 | 
					serde = "1.0.124"
 | 
				
			||||||
 | 
					chrono = "0.4.19"
 | 
				
			||||||
 | 
					regex = "1.4.5"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dependencies.reqwest]
 | 
					[dependencies.reqwest]
 | 
				
			||||||
version = "0.11.2"
 | 
					version = "0.11.2"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										10
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										10
									
								
								Makefile
								
								
								
								
							| 
						 | 
					@ -23,7 +23,7 @@ push:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Run
 | 
					# Run
 | 
				
			||||||
run:
 | 
					run:
 | 
				
			||||||
	@ cargo run
 | 
						@ RUST_BACKTRACE=1 cargo run
 | 
				
			||||||
.PHONY: run
 | 
					.PHONY: run
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,6 +32,14 @@ test:
 | 
				
			||||||
	@ cargo test
 | 
						@ cargo test
 | 
				
			||||||
.PHONY: test
 | 
					.PHONY: test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					format:
 | 
				
			||||||
 | 
						@ cargo fmt
 | 
				
			||||||
 | 
					.PHONY: format
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					lint:
 | 
				
			||||||
 | 
						@ cargo fmt -- --check
 | 
				
			||||||
 | 
					.PHONY: lint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Documentation
 | 
					# Documentation
 | 
				
			||||||
docs:
 | 
					docs:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					use reqwest::Error;
 | 
				
			||||||
 | 
					use rocket::http::Status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub enum FejError {
 | 
				
			||||||
 | 
					    InvalidArgument,
 | 
				
			||||||
 | 
					    FailedRequest,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl From<FejError> for Status {
 | 
				
			||||||
 | 
					    fn from(err: FejError) -> Status {
 | 
				
			||||||
 | 
					        match err {
 | 
				
			||||||
 | 
					            FejError::InvalidArgument => Status::BadRequest,
 | 
				
			||||||
 | 
					            FejError::FailedRequest => Status::InternalServerError,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO make this more advanced where possible
 | 
				
			||||||
 | 
					impl From<Error> for FejError {
 | 
				
			||||||
 | 
					    fn from(_: Error) -> FejError {
 | 
				
			||||||
 | 
					        FejError::FailedRequest
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,8 @@
 | 
				
			||||||
#[cfg(test)] mod tests;
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod tests;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn routes() -> Vec<rocket::Route> {
 | 
					pub fn routes() -> Vec<rocket::Route> {
 | 
				
			||||||
    routes![
 | 
					    routes![world, hello, name_age]
 | 
				
			||||||
        world,
 | 
					 | 
				
			||||||
        hello,
 | 
					 | 
				
			||||||
        name_age
 | 
					 | 
				
			||||||
    ]
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[get("/world")]
 | 
					#[get("/world")]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
use rocket::local::Client;
 | 
					 | 
				
			||||||
use rocket::http::Status;
 | 
					use rocket::http::Status;
 | 
				
			||||||
 | 
					use rocket::local::Client;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn rocket() -> rocket::Rocket {
 | 
					fn rocket() -> rocket::Rocket {
 | 
				
			||||||
    rocket::ignite().mount("/", super::routes())
 | 
					    rocket::ignite().mount("/", super::routes())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					# Ivago
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This part of the API is a wrapper around the Ivago website (Ivago being the
 | 
				
			||||||
 | 
					company that collects the trash in my city). Their city isn't exactly RESTful,
 | 
				
			||||||
 | 
					so this endpoint simply wraps it in a RESTful wrapper.
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
 | 
					mod pickup_times;
 | 
				
			||||||
mod search;
 | 
					mod search;
 | 
				
			||||||
pub use search::{Street, search_streets};
 | 
					pub use pickup_times::{get_pickup_times, BasicDate, PickupTime};
 | 
				
			||||||
 | 
					pub use search::{search_streets, Street};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///// Return the known pickup times for the given street and/or city
 | 
					///// Return the known pickup times for the given street and/or city
 | 
				
			||||||
/////
 | 
					/////
 | 
				
			||||||
| 
						 | 
					@ -28,7 +29,7 @@ pub use search::{Street, search_streets};
 | 
				
			||||||
//    let params = [
 | 
					//    let params = [
 | 
				
			||||||
//        ("_format", "json"),
 | 
					//        ("_format", "json"),
 | 
				
			||||||
//        ("type", ""),
 | 
					//        ("type", ""),
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
//    ]
 | 
					//    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//r2 = s.get("https://www.ivago.be/nl/particulier/garbage/pick-up/pickups?",
 | 
					//r2 = s.get("https://www.ivago.be/nl/particulier/garbage/pick-up/pickups?",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,19 +1,154 @@
 | 
				
			||||||
 | 
					use super::search::Street;
 | 
				
			||||||
 | 
					use crate::errors::FejError;
 | 
				
			||||||
 | 
					use chrono::{FixedOffset, TimeZone};
 | 
				
			||||||
 | 
					use regex::Regex;
 | 
				
			||||||
 | 
					use reqwest::blocking as reqwest;
 | 
				
			||||||
 | 
					use rocket::http::RawStr;
 | 
				
			||||||
 | 
					use rocket::request::FromFormValue;
 | 
				
			||||||
 | 
					use serde::ser::{SerializeStruct, Serializer};
 | 
				
			||||||
 | 
					use serde::Serialize;
 | 
				
			||||||
 | 
					use std::collections::HashMap;
 | 
				
			||||||
 | 
					use std::convert::{From, TryFrom};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const BASE_URL: &str = "https://www.ivago.be/nl/particulier/afval/ophaling";
 | 
					const BASE_URL: &str = "https://www.ivago.be/nl/particulier/afval/ophaling";
 | 
				
			||||||
 | 
					const CAL_URL: &str = "https://www.ivago.be/nl/particulier/garbage/pick-up/pickups";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Represents a very simple Timezoneless date. Considering the timezone will
 | 
				
			||||||
/// Represents a timezoneless date
 | 
					/// always be CEST (aka Belgium's timezone), this is good enough.
 | 
				
			||||||
pub struct Date {
 | 
					pub struct BasicDate {
 | 
				
			||||||
    day: u8,
 | 
					 | 
				
			||||||
    month: u8,
 | 
					 | 
				
			||||||
    year: u32,
 | 
					    year: u32,
 | 
				
			||||||
 | 
					    month: u8,
 | 
				
			||||||
 | 
					    day: u8,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl<'v> FromFormValue<'v> for BasicDate {
 | 
				
			||||||
 | 
					    type Error = &'v RawStr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn from_form_value(form_value: &'v RawStr) -> Result<BasicDate, Self::Error> {
 | 
				
			||||||
 | 
					        // Beautiful how  this exact example is in the docs
 | 
				
			||||||
 | 
					        match BasicDate::try_from(form_value.as_str()) {
 | 
				
			||||||
 | 
					            Err(_) => Err(form_value),
 | 
				
			||||||
 | 
					            // Here, we can assume these parses will work, because the regex
 | 
				
			||||||
 | 
					            // didn't fail
 | 
				
			||||||
 | 
					            Ok(date) => Ok(date),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl ToString for BasicDate {
 | 
				
			||||||
 | 
					    fn to_string(&self) -> String {
 | 
				
			||||||
 | 
					        format!("{}-{}-{}", self.year, self.month, self.day)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl TryFrom<&str> for BasicDate {
 | 
				
			||||||
 | 
					    type Error = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn try_from(s: &str) -> Result<BasicDate, Self::Error> {
 | 
				
			||||||
 | 
					        let re = Regex::new(r"^(\d{4})-(\d{2})-(\d{2})$").unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        match re.captures(s) {
 | 
				
			||||||
 | 
					            None => Err(()),
 | 
				
			||||||
 | 
					            // Here, we can assume these parses will work, because the regex
 | 
				
			||||||
 | 
					            // didn't fail
 | 
				
			||||||
 | 
					            Some(caps) => Ok(BasicDate {
 | 
				
			||||||
 | 
					                year: caps.get(1).unwrap().as_str().parse().unwrap(),
 | 
				
			||||||
 | 
					                month: caps.get(2).unwrap().as_str().parse().unwrap(),
 | 
				
			||||||
 | 
					                day: caps.get(3).unwrap().as_str().parse().unwrap(),
 | 
				
			||||||
 | 
					            }),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Serialize for BasicDate {
 | 
				
			||||||
 | 
					    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
 | 
				
			||||||
 | 
					    where
 | 
				
			||||||
 | 
					        S: Serializer,
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        serializer.serialize_str(&self.to_string())
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl From<BasicDate> for i64 {
 | 
				
			||||||
 | 
					    fn from(date: BasicDate) -> i64 {
 | 
				
			||||||
 | 
					        // Timezone of Brussels is UTC + 2 hours in the western hemisphere
 | 
				
			||||||
 | 
					        FixedOffset::west(7_200)
 | 
				
			||||||
 | 
					            .ymd(date.year as i32, date.month as u32, date.day as u32)
 | 
				
			||||||
 | 
					            .and_hms(0, 0, 0)
 | 
				
			||||||
 | 
					            .timestamp()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Serialize for PickupTime {
 | 
				
			||||||
 | 
					    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
 | 
				
			||||||
 | 
					    where
 | 
				
			||||||
 | 
					        S: Serializer,
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        let mut s = serializer.serialize_struct("PickupTime", 4)?;
 | 
				
			||||||
 | 
					        s.serialize_field("date", &self.date)?;
 | 
				
			||||||
 | 
					        s.serialize_field("label", &self.label)?;
 | 
				
			||||||
 | 
					        s.serialize_field("classes", &self.classes)?;
 | 
				
			||||||
 | 
					        s.serialize_field("url", &self.url)?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        s.end()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Represents a pickup time instance. All fields are a direct map of the
 | 
					/// Represents a pickup time instance. All fields are a direct map of the
 | 
				
			||||||
/// original API
 | 
					/// original API
 | 
				
			||||||
pub struct PickupTime {
 | 
					pub struct PickupTime {
 | 
				
			||||||
    date: Date,
 | 
					    date: BasicDate,
 | 
				
			||||||
    label: String,
 | 
					    label: String,
 | 
				
			||||||
    classes: Vec<String>,
 | 
					    classes: Vec<String>,
 | 
				
			||||||
    url: String
 | 
					    url: String,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn get_pickup_times(
 | 
				
			||||||
 | 
					    street: Street,
 | 
				
			||||||
 | 
					    number: u32,
 | 
				
			||||||
 | 
					    start_date: BasicDate,
 | 
				
			||||||
 | 
					    end_date: BasicDate,
 | 
				
			||||||
 | 
					) -> Result<Vec<PickupTime>, FejError> {
 | 
				
			||||||
 | 
					    let client = reqwest::Client::builder().cookie_store(true).build()?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // This populates the cookies with the necessary values
 | 
				
			||||||
 | 
					    client
 | 
				
			||||||
 | 
					        .post(BASE_URL)
 | 
				
			||||||
 | 
					        .form(&[
 | 
				
			||||||
 | 
					            ("garbage_type", ""),
 | 
				
			||||||
 | 
					            ("ivago_street", &String::from(street)),
 | 
				
			||||||
 | 
					            ("number", &number.to_string()),
 | 
				
			||||||
 | 
					            ("form_id", "garbage_address_form"),
 | 
				
			||||||
 | 
					        ])
 | 
				
			||||||
 | 
					        .send()?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let response = client
 | 
				
			||||||
 | 
					        .get(CAL_URL)
 | 
				
			||||||
 | 
					        .query(&[
 | 
				
			||||||
 | 
					            ("_format", "json"),
 | 
				
			||||||
 | 
					            ("type", ""),
 | 
				
			||||||
 | 
					            ("start", &i64::from(start_date).to_string()),
 | 
				
			||||||
 | 
					            ("end", &i64::from(end_date).to_string()),
 | 
				
			||||||
 | 
					        ])
 | 
				
			||||||
 | 
					        .send()?;
 | 
				
			||||||
 | 
					    let data: Vec<HashMap<String, String>> = response.json()?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let mut output: Vec<PickupTime> = Vec::new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for map in data.iter() {
 | 
				
			||||||
 | 
					        output.push(PickupTime {
 | 
				
			||||||
 | 
					            // TODO should I check here if the parsing worked?
 | 
				
			||||||
 | 
					            date: BasicDate::try_from(map.get("date").unwrap().as_str()).unwrap(),
 | 
				
			||||||
 | 
					            label: map.get("label").unwrap().to_string(),
 | 
				
			||||||
 | 
					            classes: map
 | 
				
			||||||
 | 
					                .get("classes")
 | 
				
			||||||
 | 
					                .unwrap()
 | 
				
			||||||
 | 
					                .split_whitespace()
 | 
				
			||||||
 | 
					                .map(|x| String::from(x))
 | 
				
			||||||
 | 
					                .collect(),
 | 
				
			||||||
 | 
					            url: map.get("url").unwrap().to_string(),
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Ok(output)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,13 +1,14 @@
 | 
				
			||||||
 | 
					use crate::errors::FejError;
 | 
				
			||||||
 | 
					use regex::Regex;
 | 
				
			||||||
use reqwest::blocking as reqwest;
 | 
					use reqwest::blocking as reqwest;
 | 
				
			||||||
 | 
					use rocket::http::RawStr;
 | 
				
			||||||
 | 
					use rocket::request::FromFormValue;
 | 
				
			||||||
 | 
					use serde::ser::{Serialize, SerializeStruct, Serializer};
 | 
				
			||||||
use std::collections::HashMap;
 | 
					use std::collections::HashMap;
 | 
				
			||||||
use std::convert::TryFrom;
 | 
					use std::convert::TryFrom;
 | 
				
			||||||
use serde::ser::{Serialize, Serializer, SerializeStruct};
 | 
					 | 
				
			||||||
use std::error::Error;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Endpoint for the search feature
 | 
					/// Endpoint for the search feature
 | 
				
			||||||
const SEARCH_URL: &str ="https://www.ivago.be/nl/particulier/autocomplete/garbage/streets";
 | 
					const SEARCH_URL: &str = "https://www.ivago.be/nl/particulier/autocomplete/garbage/streets";
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl From<Street> for String {
 | 
					impl From<Street> for String {
 | 
				
			||||||
    fn from(street: Street) -> String {
 | 
					    fn from(street: Street) -> String {
 | 
				
			||||||
| 
						 | 
					@ -15,36 +16,49 @@ impl From<Street> for String {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
impl Serialize for Street {
 | 
					impl Serialize for Street {
 | 
				
			||||||
        fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
 | 
					    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
 | 
				
			||||||
            where
 | 
					    where
 | 
				
			||||||
                S: Serializer,
 | 
					        S: Serializer,
 | 
				
			||||||
            {
 | 
					    {
 | 
				
			||||||
                let mut s = serializer.serialize_struct("Street", 2)?;
 | 
					        let mut s = serializer.serialize_struct("Street", 2)?;
 | 
				
			||||||
                s.serialize_field("name", &self.name)?;
 | 
					        s.serialize_field("name", &self.name)?;
 | 
				
			||||||
                s.serialize_field("city", &self.city)?;
 | 
					        s.serialize_field("city", &self.city)?;
 | 
				
			||||||
                s.end()
 | 
					        s.end()
 | 
				
			||||||
            }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
impl TryFrom<String> for Street {
 | 
					impl TryFrom<String> for Street {
 | 
				
			||||||
    type Error = ();
 | 
					    type Error = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn try_from(value: String) -> Result<Self, Self::Error> {
 | 
					    fn try_from(value: String) -> Result<Self, Self::Error> {
 | 
				
			||||||
        if let Some(index) = value.find('(') {
 | 
					        if let Some(index) = value.find('(') {
 | 
				
			||||||
            Ok(Street {
 | 
					            Ok(Street {
 | 
				
			||||||
                name: (value[0 .. index - 1].trim()).to_string(),
 | 
					                name: (value[0..index - 1].trim()).to_string(),
 | 
				
			||||||
                city: (value[index + 1 .. value.len() - 1].trim()).to_string(),
 | 
					                city: (value[index + 1..value.len() - 1].trim()).to_string(),
 | 
				
			||||||
            })
 | 
					            })
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
        }else {
 | 
					 | 
				
			||||||
            Err(())
 | 
					            Err(())
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl<'v> FromFormValue<'v> for Street {
 | 
				
			||||||
 | 
					    type Error = &'v RawStr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn from_form_value(form_value: &'v RawStr) -> Result<Street, Self::Error> {
 | 
				
			||||||
 | 
					        // This regex is pretty loose tbh, but not sure how I can make it more
 | 
				
			||||||
 | 
					        // strict right now
 | 
				
			||||||
 | 
					        let re = Regex::new(r"^(.+) \((.+)\)$").unwrap();
 | 
				
			||||||
 | 
					        match re.captures(&form_value.url_decode_lossy()) {
 | 
				
			||||||
 | 
					            None => Err(form_value),
 | 
				
			||||||
 | 
					            Some(caps) => Ok(Street {
 | 
				
			||||||
 | 
					                name: String::from(caps.get(1).unwrap().as_str()),
 | 
				
			||||||
 | 
					                city: String::from(caps.get(2).unwrap().as_str()),
 | 
				
			||||||
 | 
					            }),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Represents a street
 | 
					/// Represents a street
 | 
				
			||||||
pub struct Street {
 | 
					pub struct Street {
 | 
				
			||||||
| 
						 | 
					@ -52,7 +66,6 @@ pub struct Street {
 | 
				
			||||||
    pub city: String,
 | 
					    pub city: String,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
/// Searches the Ivago API for streets in the given city
 | 
					/// Searches the Ivago API for streets in the given city
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
/// # Arguments
 | 
					/// # Arguments
 | 
				
			||||||
| 
						 | 
					@ -60,11 +73,9 @@ pub struct Street {
 | 
				
			||||||
/// * `street` - name of the street
 | 
					/// * `street` - name of the street
 | 
				
			||||||
/// * `city` - city the street is in
 | 
					/// * `city` - city the street is in
 | 
				
			||||||
// TODO find out how to do this async
 | 
					// TODO find out how to do this async
 | 
				
			||||||
pub fn search_streets(street_name: &String) -> Result<Vec<Street>, Box<dyn Error>> {
 | 
					pub fn search_streets(street_name: &String) -> Result<Vec<Street>, FejError> {
 | 
				
			||||||
    let client = reqwest::Client::new();
 | 
					    let client = reqwest::Client::new();
 | 
				
			||||||
    let response = client.get(SEARCH_URL)
 | 
					    let response = client.get(SEARCH_URL).query(&[("q", street_name)]).send()?;
 | 
				
			||||||
                         .query(&[("q", street_name)])
 | 
					 | 
				
			||||||
                         .send()?;
 | 
					 | 
				
			||||||
    let data: Vec<HashMap<String, String>> = response.json()?;
 | 
					    let data: Vec<HashMap<String, String>> = response.json()?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let mut output: Vec<Street> = Vec::new();
 | 
					    let mut output: Vec<Street> = Vec::new();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,24 +1,27 @@
 | 
				
			||||||
#[cfg(test)] mod tests;
 | 
					 | 
				
			||||||
mod controller;
 | 
					mod controller;
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod tests;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use rocket::http::Status;
 | 
				
			||||||
use rocket_contrib::json::Json;
 | 
					use rocket_contrib::json::Json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn routes() -> Vec<rocket::Route> {
 | 
					pub fn routes() -> Vec<rocket::Route> {
 | 
				
			||||||
    routes![
 | 
					    routes![route_search_streets, route_get_pickup_times]
 | 
				
			||||||
        search_streets_json,
 | 
					 | 
				
			||||||
    ]
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// URL: https://www.ivago.be/nl/particulier/autocomplete/garbage/streets?q=Lange
 | 
					 | 
				
			||||||
// TODO make this async
 | 
					 | 
				
			||||||
// TODO change this so it can return errors instead of empty json
 | 
					 | 
				
			||||||
#[get("/search?<street>")]
 | 
					#[get("/search?<street>")]
 | 
				
			||||||
pub fn search_streets_json(street: String) -> Json<Vec<controller::Street>> {
 | 
					pub fn route_search_streets(street: String) -> Result<Json<Vec<controller::Street>>, Status> {
 | 
				
			||||||
    match controller::search_streets(&street) {
 | 
					    Ok(Json(controller::search_streets(&street)?))
 | 
				
			||||||
        Ok(streets) => Json(streets),
 | 
					}
 | 
				
			||||||
        Err(err) => {
 | 
					
 | 
				
			||||||
            println!("{:?}", err);
 | 
					#[get("/?<street>&<number>&<start_date>&<end_date>")]
 | 
				
			||||||
            Json(Vec::new())
 | 
					pub fn route_get_pickup_times(
 | 
				
			||||||
        },
 | 
					    street: controller::Street,
 | 
				
			||||||
    }
 | 
					    number: u32,
 | 
				
			||||||
 | 
					    start_date: controller::BasicDate,
 | 
				
			||||||
 | 
					    end_date: controller::BasicDate,
 | 
				
			||||||
 | 
					) -> Result<Json<Vec<controller::PickupTime>>, Status> {
 | 
				
			||||||
 | 
					    Ok(Json(controller::get_pickup_times(
 | 
				
			||||||
 | 
					        street, number, start_date, end_date,
 | 
				
			||||||
 | 
					    )?))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,10 @@
 | 
				
			||||||
#![feature(proc_macro_hygiene, decl_macro)]
 | 
					#![feature(proc_macro_hygiene, decl_macro)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[macro_use] extern crate rocket;
 | 
					#[macro_use]
 | 
				
			||||||
 | 
					extern crate rocket;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Route modules
 | 
					// Route modules
 | 
				
			||||||
 | 
					mod errors;
 | 
				
			||||||
mod hello;
 | 
					mod hello;
 | 
				
			||||||
mod ivago;
 | 
					mod ivago;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue