From 3ce2a88935eeb3340570b14f61ee526beb02fa3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20K=C3=B6rber?= Date: Mon, 6 Sep 2021 13:28:56 +0200 Subject: [PATCH] WIP --- api/Cargo.lock | 1097 +++++++++++++++++++++++++++++++++++++++++++++++ api/Cargo.toml | 5 + api/src/main.rs | 782 ++++++++++++++++++--------------- 3 files changed, 1542 insertions(+), 342 deletions(-) diff --git a/api/Cargo.lock b/api/Cargo.lock index e823802..31170c4 100644 --- a/api/Cargo.lock +++ b/api/Cargo.lock @@ -2,6 +2,1103 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "buf_redux" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" +dependencies = [ + "memchr", + "safemem", +] + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cpufeatures" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" + +[[package]] +name = "futures-io" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" + +[[package]] +name = "futures-sink" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" + +[[package]] +name = "futures-task" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" + +[[package]] +name = "futures-util" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" +dependencies = [ + "autocfg", + "futures-core", + "futures-sink", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.10.2+wasi-snapshot-preview1", +] + +[[package]] +name = "h2" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7f3675cfef6a30c8031cf9e6493ebdc3bb3272a3fea3923c4210d1830e6a472" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + +[[package]] +name = "headers" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0b7591fb62902706ae8e7aaff416b1b0fa2c0fd0878b46dc13baa3712d8a855" +dependencies = [ + "base64", + "bitflags", + "bytes", + "headers-core", + "http", + "mime", + "sha-1", + "time", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "http" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "399c583b2979440c60be0821a6199eca73bc3c8dcd9d070d75ac726e2c6186e5" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" + +[[package]] +name = "httpdate" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" + +[[package]] +name = "hyper" +version = "0.14.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13f67199e765030fa08fe0bd581af683f0d5bc04ea09c2b1102012c5fb90e7fd" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "input_buffer" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f97967975f448f1a7ddb12b0bc41069d09ed6a1c161a92687e057325db35d413" +dependencies = [ + "bytes", +] + +[[package]] +name = "instant" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21" + +[[package]] +name = "lock_api" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "memchr" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "mime_guess" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "mio" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16" +dependencies = [ + "libc", + "log", + "miow", + "ntapi", + "winapi", +] + +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi", +] + +[[package]] +name = "multipart" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050aeedc89243f5347c3e237e3e13dc76fbe4ae3742a57b94dc14f69acf76d4" +dependencies = [ + "buf_redux", + "httparse", + "log", + "mime", + "mime_guess", + "quick-error", + "rand 0.7.3", + "safemem", + "tempfile", + "twoway", +] + +[[package]] +name = "ntapi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +dependencies = [ + "winapi", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + [[package]] name = "packager-api" version = "0.1.0" +dependencies = [ + "serde", + "serde_json", + "tokio", + "warp", +] + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pin-project" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "ppv-lite86" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" + +[[package]] +name = "proc-macro2" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", +] + +[[package]] +name = "rand" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.3", + "rand_hc 0.3.1", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.3", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom 0.2.3", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_hc" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +dependencies = [ + "rand_core 0.6.3", +] + +[[package]] +name = "redox_syscall" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +dependencies = [ + "bitflags", +] + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "scoped-tls" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "serde" +version = "1.0.130" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.130" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7f9e390c27c3c0ce8bc5d725f6e4d30a29d26659494aa4b17535f7522c5c950" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer", + "cfg-if", + "cpufeatures", + "digest", + "opaque-debug", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" + +[[package]] +name = "smallvec" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" + +[[package]] +name = "socket2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765f090f0e423d2b55843402a07915add955e7d60657db13707a159727326cad" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "syn" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "tempfile" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +dependencies = [ + "cfg-if", + "libc", + "rand 0.8.4", + "redox_syscall", + "remove_dir_all", + "winapi", +] + +[[package]] +name = "time" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "tinyvec" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "tokio" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4efe6fc2395938c8155973d7be49fe8d03a843726e285e100a8a383cc0154ce" +dependencies = [ + "autocfg", + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "once_cell", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "tokio-macros", + "winapi", +] + +[[package]] +name = "tokio-macros" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54473be61f4ebe4efd09cec9bd5d16fa51d70ea0192213d754d2d500457db110" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-stream" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2f3f698253f03119ac0102beaa64f67a67e08074d03a22d18784104543727f" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1a5f475f1b9d077ea1017ecbc60890fda8e54942d680ca0b1d2b47cfa2d861b" +dependencies = [ + "futures-util", + "log", + "pin-project", + "tokio", + "tungstenite", +] + +[[package]] +name = "tokio-util" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d3725d3efa29485e87311c5b699de63cde14b00ed4d256b8318aa30ca452cd" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower-service" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" + +[[package]] +name = "tracing" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ca517f43f0fb96e0c3072ed5c275fe5eece87e8cb52f4a77b69226d3b1c9df8" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + +[[package]] +name = "tungstenite" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ada8297e8d70872fa9a551d93250a9f407beb9f37ef86494eb20012a2ff7c24" +dependencies = [ + "base64", + "byteorder", + "bytes", + "http", + "httparse", + "input_buffer", + "log", + "rand 0.8.4", + "sha-1", + "url", + "utf-8", +] + +[[package]] +name = "twoway" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" +dependencies = [ + "memchr", +] + +[[package]] +name = "typenum" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246f4c42e67e7a4e3c6106ff716a5d067d4132a642840b242e357e468a2a0085" + +[[package]] +name = "unicode-normalization" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "url" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "version_check" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "warp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "332d47745e9a0c38636dbd454729b147d16bd1ed08ae67b3ab281c4506771054" +dependencies = [ + "bytes", + "futures", + "headers", + "http", + "hyper", + "log", + "mime", + "mime_guess", + "multipart", + "percent-encoding", + "pin-project", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tower-service", + "tracing", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/api/Cargo.toml b/api/Cargo.toml index e807938..988da33 100644 --- a/api/Cargo.toml +++ b/api/Cargo.toml @@ -4,3 +4,8 @@ version = "0.1.0" edition = "2018" [dependencies] +tokio = { version = "1", features = ["full"] } +warp = "0.3" + +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" diff --git a/api/src/main.rs b/api/src/main.rs index cc3b1f9..daa52d5 100644 --- a/api/src/main.rs +++ b/api/src/main.rs @@ -1,10 +1,10 @@ -use std::collections::HashMap; +use serde::ser::{Serialize, SerializeStruct, Serializer}; +use warp::Filter; #[derive(Debug)] enum Duration { + None, Days(i32), - Weeks(i32), - Months(i32), } #[derive(Debug)] @@ -17,7 +17,6 @@ enum Period { #[derive(Debug)] enum ItemUsage { Singleton, - Once, Periodic(Period), Infinite, } @@ -85,6 +84,21 @@ impl PackageItem { } } +impl Serialize for PackageItem { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + let mut state = serializer.serialize_struct("PackageItem", 5)?; + state.serialize_field("name", &self.name)?; + state.serialize_field("size", &self.size)?; + state.serialize_field("count", &self.count)?; + state.serialize_field("usage", &self.usage)?; + state.serialize_field("preparation", &self.preparation)?; + state.end() + } +} + #[derive(Debug)] enum TripItemStatus { Pending, @@ -114,7 +128,25 @@ impl TripItem<'_> { #[derive(Debug)] struct PackageList { name: String, - items: HashMap, + items: Vec, +} + +impl PackageList { + fn new_from_items(name: String, items: Vec) -> PackageList { + PackageList { name, items } + } +} + +impl Serialize for PackageList { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + let mut state = serializer.serialize_struct("PackageList", 2)?; + state.serialize_field("name", &self.name)?; + state.serialize_field("items", &self.items)?; + state.end() + } } #[derive(Debug)] @@ -125,7 +157,7 @@ struct TripList<'a> { impl<'a> TripList<'a> { fn from_package_list(list: &'a PackageList) -> TripList<'a> { let mut items = Vec::new(); - for (_, item) in &list.items { + for item in &list.items { items.push(TripItem::from_package_item(item)); } @@ -150,358 +182,424 @@ impl<'a> Trip<'a> { } } -fn main() { - let items = vec![ - // Base - PackageItem::new_simple(String::from("Rucksack")), - PackageItem::new_simple(String::from("Regenhülle für Rucksack")), - PackageItem::new_simple(String::from("Normale Schuhe")), - PackageItem::new( - String::from("Taschentücher"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, +fn get_lists() -> Vec { + let lists = vec![ + PackageList::new_from_items( + String::from("EDC"), + vec![ + PackageItem::new_simple(String::from("Rucksack")), + PackageItem::new_simple(String::from("Regenhülle für Rucksack")), + PackageItem::new_simple(String::from("Normale Schuhe")), + PackageItem::new_simple(String::from("Taschenmesser")), + PackageItem::new( + String::from("Taschentücher"), + ItemSize::Pack(1), + 1, + ItemUsage::Infinite, + Preparation::None, + ), + PackageItem::new( + String::from("Handy"), + ItemSize::None, + 1, + ItemUsage::Infinite, + Preparation::Steps(vec![PreparationStep::new( + String::from("Aufladen"), + Duration::Days(1), + )]), + ), + PackageItem::new( + String::from("Kopfhörer"), + ItemSize::None, + 1, + ItemUsage::Infinite, + Preparation::Steps(vec![PreparationStep::new( + String::from("Aufladen"), + Duration::Days(1), + )]), + ), + PackageItem::new( + String::from("Mundschutz"), + ItemSize::None, + 1, + ItemUsage::Periodic(Period::Weekly(1)), + Preparation::None, + ), + PackageItem::new_simple(String::from("Ladekabel")), + ], ), - PackageItem::new( - String::from("Handy"), - ItemSize::None, - 1, - ItemUsage::Infinite, - Preparation::Steps(vec![PreparationStep::new( - String::from("Aufladen"), - Duration::Days(1), - )]), + PackageList::new_from_items( + String::from("Geld & Karten"), + vec![ + PackageItem::new( + String::from("Bargeld"), + ItemSize::Name(String::from("Euro")), + 100, + ItemUsage::Infinite, + Preparation::Steps(vec![PreparationStep::new( + String::from("Abheben"), + Duration::Days(1), + )]), + ), + PackageItem::new_simple(String::from("Kreditkarte")), + PackageItem::new_simple(String::from("Pass")), + PackageItem::new_simple(String::from("Krankenversicherungskarte")), + PackageItem::new_simple(String::from("Krankenversicherungskarte (Zusatz)")), + PackageItem::new_simple(String::from("Auslandskrankenversicherungsnachweis")), + PackageItem::new_simple(String::from("Notfalltelefonnummernliste")), + PackageItem::new_simple(String::from("ADAC-Karte")), + PackageItem::new_simple(String::from("Impfausweiß (EU)")), + PackageItem::new_simple(String::from("Führerschein")), + PackageItem::new_simple(String::from("Internationaler Führerschein")), + PackageItem::new_simple(String::from("Tagebuch")), + ], ), - PackageItem::new( - String::from("Kopfhörer"), - ItemSize::None, - 1, - ItemUsage::Infinite, - Preparation::Steps(vec![PreparationStep::new( - String::from("Aufladen"), - Duration::Days(1), - )]), + PackageList::new_from_items( + String::from("Waschzeug"), + vec![ + PackageItem::new_simple(String::from("Waschbeutel")), + PackageItem::new_simple(String::from("Sonnencreme")), + PackageItem::new_simple(String::from("After-Sun")), + PackageItem::new_simple(String::from("Nagelset")), + PackageItem::new_simple(String::from("Rasurbox")), + PackageItem::new_simple(String::from("Rasierer")), + PackageItem::new( + String::from("Ersatzklingen"), + ItemSize::Pack(1), + 1, + ItemUsage::Infinite, + Preparation::None, + ), + PackageItem::new_simple(String::from("Zahnbürste")), + PackageItem::new( + String::from("Zahnputztabletten"), + ItemSize::None, + 1, + ItemUsage::Periodic(Period::Daily(2)), + Preparation::None, + ), + PackageItem::new_simple(String::from("Deo")), + PackageItem::new_simple(String::from("Duschgel / Shampoo")), + ], ), - PackageItem::new( - String::from("Mundschutz"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Weekly(1)), - Preparation::None, + PackageList::new_from_items( + String::from("Apotheke"), + vec![ + PackageItem::new( + String::from("Blasenpflaster"), + ItemSize::Pack(1), + 1, + ItemUsage::Infinite, + Preparation::None, + ), + PackageItem::new( + String::from("Erste-Hilfe-Set"), + ItemSize::None, + 1, + ItemUsage::Infinite, + Preparation::None, + ), + PackageItem::new( + String::from("Paracetamol"), + ItemSize::Pack(1), + 1, + ItemUsage::Infinite, + Preparation::None, + ), + PackageItem::new( + String::from("Autan"), + ItemSize::Pack(1), + 1, + ItemUsage::Infinite, + Preparation::None, + ), + PackageItem::new( + String::from("Pflaster"), + ItemSize::Pack(1), + 1, + ItemUsage::Infinite, + Preparation::None, + ), + PackageItem::new( + String::from("Zeckenkarte"), + ItemSize::None, + 1, + ItemUsage::Singleton, + Preparation::None, + ), + ], ), - PackageItem::new_simple(String::from("Ladekabel")), - // - // Geld & Karten - PackageItem::new( - String::from("Bargeld"), - ItemSize::Name(String::from("Euro")), - 100, - ItemUsage::Infinite, - Preparation::Steps(vec![PreparationStep::new( - String::from("Abheben"), - Duration::Days(1), - )]), + PackageList::new_from_items( + String::from("Badesachen"), + vec![ + PackageItem::new_simple(String::from("Badehose")), + PackageItem::new_simple(String::from("Badehandtuch")), + PackageItem::new_simple(String::from("Surfshirt (Lang)")), + PackageItem::new_simple(String::from("Wasserschuhe")), + ], ), - PackageItem::new_simple(String::from("Kreditkarte")), - PackageItem::new_simple(String::from("Pass")), - PackageItem::new_simple(String::from("Krankenversicherungskarte")), - PackageItem::new_simple(String::from("Krankenversicherungskarte (Zusatz)")), - PackageItem::new_simple(String::from("Auslandskrankenversicherungsnachweis")), - PackageItem::new_simple(String::from("Notfalltelefonnummernliste")), - PackageItem::new_simple(String::from("ADAC-Karte")), - PackageItem::new_simple(String::from("Impfausweiß (EU)")), - PackageItem::new_simple(String::from("Führerschein")), - PackageItem::new_simple(String::from("Internationaler Führerschein")), - PackageItem::new_simple(String::from("Tagebuch")), - // - // Waschzeug - PackageItem::new_simple(String::from("Waschbeutel")), - PackageItem::new_simple(String::from("Sonnencreme")), - PackageItem::new_simple(String::from("After-Sun")), - PackageItem::new_simple(String::from("Nagelset")), - PackageItem::new_simple(String::from("Rasurbox")), - PackageItem::new_simple(String::from("Rasierer")), - PackageItem::new( - String::from("Ersatzklingen"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, + PackageList::new_from_items( + String::from("Camping"), + vec![ + PackageItem::new_simple(String::from("Schlafsack")), + PackageItem::new_simple(String::from("Zelt")), + PackageItem::new_simple(String::from("Luftmatratze")), + PackageItem::new_simple(String::from("Campingstuhl")), + PackageItem::new_simple(String::from("Panzertape")), + PackageItem::new_simple(String::from("Tarp")), + PackageItem::new_simple(String::from("Hängematte")), + PackageItem::new_simple(String::from("Topf")), + PackageItem::new_simple(String::from("Teller")), + PackageItem::new_simple(String::from("Messer")), + PackageItem::new_simple(String::from("Gabel")), + PackageItem::new_simple(String::from("Löffel")), + PackageItem::new_simple(String::from("Stirnlampe")), + PackageItem::new_simple(String::from("Geschirrtuch")), + PackageItem::new_simple(String::from("Spüllappen")), + PackageItem::new_simple(String::from("Taschenlampe")), + PackageItem::new_simple(String::from("Feuerzeug")), + PackageItem::new_simple(String::from("Tasse")), + PackageItem::new_simple(String::from("Grill")), + PackageItem::new( + String::from("Grillkohle"), + ItemSize::Grams(1500), + 1, + ItemUsage::Periodic(Period::Days(2)), + Preparation::None, + ), + PackageItem::new_simple(String::from("Campingkocher")), + PackageItem::new( + String::from("Campinggas"), + ItemSize::Pack(1), + 1, + ItemUsage::Periodic(Period::Days(3)), + Preparation::None, + ), + PackageItem::new_simple(String::from("Kaffeekochaufsatz")), + PackageItem::new( + String::from("Küchenrolle"), + ItemSize::None, + 1, + ItemUsage::Periodic(Period::Days(5)), + Preparation::None, + ), + PackageItem::new( + String::from("Müllsäcke"), + ItemSize::Pack(1), + 1, + ItemUsage::Infinite, + Preparation::None, + ), + PackageItem::new( + String::from("Teelichter"), + ItemSize::None, + 1, + ItemUsage::Periodic(Period::Daily(3)), + Preparation::None, + ), + PackageItem::new( + String::from("Klopapier"), + ItemSize::Name(String::from("Rolle")), + 1, + ItemUsage::Periodic(Period::Weekly(1)), + Preparation::None, + ), + ], ), - PackageItem::new_simple(String::from("Zahnbürste")), - PackageItem::new( - String::from("Zahnputztabletten"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Daily(2)), - Preparation::None, + PackageList::new_from_items( + String::from("Essen"), + vec![PackageItem::new( + String::from("Kaffee"), + ItemSize::Grams(100), + 1, + ItemUsage::Periodic(Period::Days(3)), + Preparation::None, + )], ), - PackageItem::new_simple(String::from("Deo")), - PackageItem::new_simple(String::from("Duschgel / Shampoo")), - // - // Apotheke - PackageItem::new( - String::from("Blasenpflaster"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, + PackageList::new_from_items( + String::from("Wanderzeug"), + vec![ + PackageItem::new_simple(String::from("Wanderschuhe")), + PackageItem::new( + String::from("Trinkblase"), + ItemSize::None, + 1, + ItemUsage::Singleton, + Preparation::Steps(vec![PreparationStep::new( + String::from("Auffüllen"), + Duration::None, + )]), + ), + ], ), - PackageItem::new( - String::from("Erste-Hilfe-Set"), - ItemSize::None, - 1, - ItemUsage::Infinite, - Preparation::None, + PackageList::new_from_items( + String::from("Klamotten"), + vec![ + PackageItem::new( + String::from("Cap"), + ItemSize::None, + 1, + ItemUsage::Singleton, + Preparation::None, + ), + PackageItem::new( + String::from("Regenjacke"), + ItemSize::None, + 1, + ItemUsage::Singleton, + Preparation::None, + ), + PackageItem::new( + String::from("Daunenjacke"), + ItemSize::None, + 1, + ItemUsage::Singleton, + Preparation::None, + ), + PackageItem::new( + String::from("Pullover"), + ItemSize::None, + 1, + ItemUsage::Singleton, + Preparation::None, + ), + PackageItem::new( + String::from("Lange Hose"), + ItemSize::None, + 2, + ItemUsage::Singleton, + Preparation::None, + ), + PackageItem::new( + String::from("Kurze Hose"), + ItemSize::None, + 1, + ItemUsage::Singleton, + Preparation::None, + ), + PackageItem::new( + String::from("Jogginghose"), + ItemSize::None, + 1, + ItemUsage::Singleton, + Preparation::None, + ), + PackageItem::new( + String::from("Socken"), + ItemSize::None, + 1, + ItemUsage::Periodic(Period::Daily(1)), + Preparation::None, + ), + PackageItem::new( + String::from("Unterhose"), + ItemSize::None, + 1, + ItemUsage::Periodic(Period::Daily(1)), + Preparation::None, + ), + PackageItem::new( + String::from("T-Shirt"), + ItemSize::None, + 1, + ItemUsage::Periodic(Period::Days(2)), + Preparation::None, + ), + PackageItem::new_simple(String::from("Schmutzwäschebeutel")), + ], ), - PackageItem::new( - String::from("Paracetamol"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, + PackageList::new_from_items( + String::from("Geld & Karten"), + vec![ + PackageItem::new_simple(String::from("Fahrrad")), + PackageItem::new_simple(String::from("Fahrradhelm")), + ], ), - PackageItem::new( - String::from("Autan"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, + PackageList::new_from_items( + String::from("Geld & Karten"), + vec![ + PackageItem::new_simple(String::from("Trinkflasche")), + PackageItem::new_simple(String::from("Dyneemaschnur")), + PackageItem::new_simple(String::from("Ladegerät")), + PackageItem::new( + String::from("Powerbank"), + ItemSize::None, + 1, + ItemUsage::Infinite, + Preparation::Steps(vec![PreparationStep::new( + String::from("Aufladen"), + Duration::Days(1), + )]), + ), + PackageItem::new( + String::from("Desinfektionsgel"), + ItemSize::None, + 1, + ItemUsage::Periodic(Period::Weekly(1)), + Preparation::None, + ), + PackageItem::new( + String::from("Karabiner"), + ItemSize::None, + 3, + ItemUsage::Singleton, + Preparation::None, + ), + PackageItem::new_simple(String::from("Ersatzbrille")), + PackageItem::new_simple(String::from("Sonnenbrille")), + PackageItem::new_simple(String::from("Ohrenstöpsel")), + ], ), - PackageItem::new( - String::from("Pflaster"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, - ), - PackageItem::new( - String::from("Zeckenkarte"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - // - // Badesachen - PackageItem::new_simple(String::from("Badehose")), - PackageItem::new_simple(String::from("Badehandtuch")), - PackageItem::new_simple(String::from("Surfshirt (Lang)")), - PackageItem::new_simple(String::from("Wasserschuhe")), - // - // Camping - PackageItem::new_simple(String::from("Schlafsack")), - PackageItem::new_simple(String::from("Zelt")), - PackageItem::new_simple(String::from("Luftmatratze")), - PackageItem::new_simple(String::from("Campingstuhl")), - PackageItem::new_simple(String::from("Panzertape")), - PackageItem::new_simple(String::from("Tarp")), - PackageItem::new_simple(String::from("Hängematte")), - PackageItem::new_simple(String::from("Topf")), - PackageItem::new_simple(String::from("Teller")), - PackageItem::new_simple(String::from("Messer")), - PackageItem::new_simple(String::from("Gabel")), - PackageItem::new_simple(String::from("Löffel")), - PackageItem::new_simple(String::from("Stirnlampe")), - PackageItem::new_simple(String::from("Geschirrtuch")), - PackageItem::new_simple(String::from("Spüllappen")), - PackageItem::new_simple(String::from("Taschenlampe")), - PackageItem::new_simple(String::from("Feuerzeug")), - PackageItem::new_simple(String::from("Tasse")), - PackageItem::new_simple(String::from("Grill")), - PackageItem::new( - String::from("Grillkohle"), - ItemSize::Grams(1500), - 1, - ItemUsage::Periodic(Period::Days(2)), - Preparation::None, - ), - PackageItem::new_simple(String::from("Campingkocher")), - PackageItem::new( - String::from("Campinggas"), - ItemSize::Pack(1), - 1, - ItemUsage::Periodic(Period::Days(3)), - Preparation::None, - ), - PackageItem::new_simple(String::from("Kaffeekochaufsatz")), - PackageItem::new( - String::from("Küchenrolle"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Days(5)), - Preparation::None, - ), - PackageItem::new( - String::from("Müllsäcke"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, - ), - PackageItem::new( - String::from("Teelichter"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Daily(3)), - Preparation::None, - ), - PackageItem::new( - String::from("Klopapier"), - ItemSize::Name(String::from("Rolle")), - 1, - ItemUsage::Periodic(Period::Weekly(1)), - Preparation::None, - ), - // - // Essen - PackageItem::new( - String::from("Kaffee"), - ItemSize::Grams(100), - 1, - ItemUsage::Periodic(Period::Days(3)), - Preparation::None, - ), - // - // Wanderzeug - PackageItem::new_simple(String::from("Wanderschuhe")), - PackageItem::new_simple(String::from("Trinkblase")), - // - // Klamotten - PackageItem::new( - String::from("Cap"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - String::from("Regenjacke"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - String::from("Daunenjacke"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - String::from("Pullover"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - String::from("Lange Hose"), - ItemSize::None, - 2, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - String::from("Kurze Hose"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - String::from("Jogginghose"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - String::from("Socken"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Daily(1)), - Preparation::None, - ), - PackageItem::new( - String::from("Unterhose"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Daily(1)), - Preparation::None, - ), - PackageItem::new( - String::from("T-Shirt"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Days(2)), - Preparation::None, - ), - // - // Misc - PackageItem::new_simple(String::from("Trinkflasche")), - PackageItem::new_simple(String::from("Dyneemaschnur")), - PackageItem::new_simple(String::from("Ladegerät")), - PackageItem::new( - String::from("Powerbank"), - ItemSize::None, - 1, - ItemUsage::Infinite, - Preparation::Steps(vec![PreparationStep::new( - String::from("Aufladen"), - Duration::Days(1), - )]), - ), - PackageItem::new( - String::from("Desinfektionsgel"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Weekly(1)), - Preparation::None, - ), - PackageItem::new( - String::from("Karabiner"), - ItemSize::None, - 3, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new_simple(String::from("Ersatzbrille")), - PackageItem::new_simple(String::from("Sonnenbrille")), - PackageItem::new_simple(String::from("Ohrenstöpsel")), ]; - let package_list_camping = PackageList { - name: String::from("camping"), - items: (0..items.len()).map(|i| i.to_string()).zip(items).collect(), - }; + lists - println!("Contents of package list {:?}:", package_list_camping.name); - for item in &package_list_camping.items { - println!("{:?}", item); - } + // for list in &lists { + // println!("Contents of package list {:?}:", list.name); + // for item in &list.items { + // println!("\t{:?}", item); + // } + // } - println!("\nNow we're starting an actual trip!"); + // println!("\nNow we're starting an actual trip!"); - let mut trip = Trip::from_package_list( - String::from("Campingtrip"), - String::from("2021-09-06"), - &package_list_camping, - ); + // let mut trip = Trip::from_package_list( + // String::from("Campingtrip"), + // String::from("2021-09-06"), + // &lists[0], + // ); - println!( - "\nPackage list for trip {:?} at {:?}:", - trip.name, trip.date - ); - for item in &trip.list.items { - println!("{:?}", item); - } + // println!( + // "\nPackage list for trip {:?} at {:?}:", + // trip.name, trip.date + // ); + // for item in &trip.list.items { + // println!("{:?}", item); + // } - trip.list.items[0].set_status(TripItemStatus::Ready); - trip.list.items[1].set_status(TripItemStatus::Packed); - for item in &trip.list.items { - println!("{:?}", item); - } + // trip.list.items[0].set_status(TripItemStatus::Ready); + // trip.list.items[1].set_status(TripItemStatus::Packed); + // for item in &trip.list.items { + // println!("{:?}", item); + // } +} + +#[tokio::main] +async fn main() { + let accept_json = warp::header::exact("accept", "application/json"); + + let root = warp::path::end().map(|| "Hi"); + let v1 = warp::path!("v1") + .and(warp::get()) + .and(warp::path::end()) + .map(warp::reply); + let lists = warp::path!("v1" / "lists") + .and(warp::path::end()) + .and(warp::get()) + .and(accept_json) + .map(|| warp::reply::json(&get_lists())); + + let routes = root.or(v1).or(lists); + + warp::serve(routes).run(([127, 0, 0, 1], 9000)).await; }