From b1d7569150932d6b8bb4e652669364d2862d1a81 Mon Sep 17 00:00:00 2001 From: specCon18 Date: Thu, 22 Feb 2024 15:37:55 -0500 Subject: [PATCH] pushing for review --- Cargo.lock | 3239 ++++++++++++++++++++++++++++++++++++++- Cargo.toml | 2 + assets/SK-test-logo.png | Bin 0 -> 131958 bytes assets/aocollapse.png | Bin 0 -> 4641 bytes assets/main.css | 324 +++- assets/sk-extract.png | Bin 0 -> 588 bytes assets/sunserver.png | Bin 0 -> 4068 bytes nix/default.nix | 4 +- nix/devshell.nix | 39 +- src/handlers.rs | 27 + src/main.rs | 92 +- src/router.rs | 14 + src/templates.rs | 52 + templates/base.html | 16 +- templates/blog.html | 45 +- templates/index.html | 3 +- templates/post.html | 8 + templates/projects.html | 104 ++ templates/resume.html | 1 - 19 files changed, 3742 insertions(+), 228 deletions(-) create mode 100644 assets/SK-test-logo.png create mode 100644 assets/aocollapse.png create mode 100644 assets/sk-extract.png create mode 100644 assets/sunserver.png create mode 100644 src/handlers.rs create mode 100644 src/router.rs create mode 100644 src/templates.rs create mode 100644 templates/post.html diff --git a/Cargo.lock b/Cargo.lock index 98df65a..c9f88e6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef" +dependencies = [ + "psl-types", +] + [[package]] name = "addr2line" version = "0.21.0" @@ -17,6 +26,30 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d713b3834d76b85304d4d525563c1276e2e30dc97cc67bfb4585a4a29fc2c89f" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.2" @@ -26,12 +59,81 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "any_ascii" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea50b14b7a4b9343f8c627a7a53c52076482bd4bdad0a24fd3ec533ed616cc2c" + [[package]] name = "anyhow" version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + +[[package]] +name = "argon2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" +dependencies = [ + "base64ct", + "blake2", + "cpufeatures", + "password-hash", +] + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "ascii-canvas" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +dependencies = [ + "term", +] + [[package]] name = "askama" version = "0.12.1" @@ -58,7 +160,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn", + "syn 2.0.48", ] [[package]] @@ -76,6 +178,59 @@ dependencies = [ "nom", ] +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-executor" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" +dependencies = [ + "async-lock", + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "slab", +] + +[[package]] +name = "async-lock" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +dependencies = [ + "event-listener 4.0.3", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-recursion" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "async-task" +version = "4.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" + [[package]] name = "async-trait" version = "0.1.77" @@ -84,7 +239,33 @@ checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.48", +] + +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version", +] + +[[package]] +name = "atomic" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" + +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", ] [[package]] @@ -103,10 +284,10 @@ dependencies = [ "axum-core", "bytes", "futures-util", - "http", - "http-body", + "http 1.0.0", + "http-body 1.0.0", "http-body-util", - "hyper", + "hyper 1.1.0", "hyper-util", "itoa", "matchit", @@ -136,8 +317,8 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http", - "http-body", + "http 1.0.0", + "http-body 1.0.0", "http-body-util", "mime", "pin-project-lite", @@ -163,6 +344,18 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + [[package]] name = "basic-toml" version = "0.1.8" @@ -172,39 +365,614 @@ dependencies = [ "serde", ] +[[package]] +name = "bcrypt" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d1c9c15093eb224f0baa400f38fcd713fc1391a6f1c389d886beef146d60a3" +dependencies = [ + "base64", + "blowfish", + "getrandom", + "subtle", + "zeroize", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.48", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + [[package]] name = "bitflags" version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blowfish" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" +dependencies = [ + "byteorder", + "cipher", +] + +[[package]] +name = "borsh" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b559fd6448c6e2fd0adb5720cd98a2506594cafa4737ff98c396f3e82f667" +dependencies = [ + "borsh-derive", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aadb5b6ccbd078890f6d7003694e33816e6b784358f18e15e7e6d9f065a57cd" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.48", + "syn_derive", +] + +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bytemuck" +version = "1.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2ef034f05691a48569bd920a96c81b9d91bbad1ab5ac7c4616c1f6ef36cb79f" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "bytes" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "cc" version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ + "jobserver", "libc", ] +[[package]] +name = "cedar-policy" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d91e3b10a0f7f2911774d5e49713c4d25753466f9e11d1cd2ec627f8a2dc857" +dependencies = [ + "cedar-policy-core", + "cedar-policy-validator", + "itertools 0.10.5", + "lalrpop-util", + "ref-cast", + "serde", + "serde_json", + "smol_str", + "thiserror", +] + +[[package]] +name = "cedar-policy-core" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd2315591c6b7e18f8038f0a0529f254235fd902b6c217aabc04f2459b0d9995" +dependencies = [ + "either", + "ipnet", + "itertools 0.10.5", + "lalrpop", + "lalrpop-util", + "lazy_static", + "miette", + "regex", + "rustc_lexer", + "serde", + "serde_json", + "serde_with", + "smol_str", + "stacker", + "thiserror", +] + +[[package]] +name = "cedar-policy-validator" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e756e1b2a5da742ed97e65199ad6d0893e9aa4bd6b34be1de9e70bd1e6adc7df" +dependencies = [ + "cedar-policy-core", + "itertools 0.10.5", + "serde", + "serde_json", + "serde_with", + "smol_str", + "stacker", + "thiserror", + "unicode-security", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.3", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "clang-sys" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "critical-section" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.20.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c376d08ea6aa96aafe61237c7200d1241cb177b7d3a542d791f2d118e9cbb955" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33043dcd19068b8192064c704b3f83eb464f91f1ff527b44a4e2b08d9cdb8855" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5a91391accf613803c2a9bf9abccdbaa07c54b4244a5b64883f9c3c137c86be" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "data-encoding" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" + +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "deunicode" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6e854126756c496b8c81dec88f9a706b15b875c5849d4097a3854476b9fdf94" + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dmp" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfaa1135a34d26e5cc5b4927a8935af887d4f30a5653a797c33b9a4222beb6d9" +dependencies = [ + "urlencoding", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "earcutr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79127ed59a85d7687c409e9978547cffb7dc79675355ed22da6b66fd5f6ead01" +dependencies = [ + "itertools 0.11.0", + "num-traits", +] + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + +[[package]] +name = "ena" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" +dependencies = [ + "log", +] + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "endian-type" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" + [[package]] name = "equivalent" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.3", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "float_next_after" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "spin 0.9.8", +] + [[package]] name = "fnv" version = "1.0.7" @@ -220,6 +988,33 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fst" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + [[package]] name = "futures-channel" version = "0.3.30" @@ -227,6 +1022,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-concurrency" +version = "7.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef6712e11cdeed5c8cf21ea0b90fec40fbe64afc9bbf2339356197eeca829fc3" +dependencies = [ + "bitvec", + "futures-core", + "pin-project", + "slab", + "smallvec", ] [[package]] @@ -235,6 +1044,47 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "futures-sink" version = "0.3.30" @@ -253,10 +1103,105 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ + "futures-channel", "futures-core", + "futures-io", + "futures-macro", + "futures-sink", "futures-task", + "memchr", "pin-project-lite", "pin-utils", + "slab", +] + +[[package]] +name = "fuzzy-matcher" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" +dependencies = [ + "thread_local", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "geo" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1645cf1d7fea7dac1a66f7357f3df2677ada708b8d9db8e9b043878930095a96" +dependencies = [ + "earcutr", + "float_next_after", + "geo-types", + "geographiclib-rs", + "log", + "num-traits", + "robust", + "rstar", + "serde", +] + +[[package]] +name = "geo" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4841b40fdbccd4b7042bd6195e4de91da54af34c50632e371bcbfcdfb558b873" +dependencies = [ + "earcutr", + "float_next_after", + "geo-types", + "geographiclib-rs", + "log", + "num-traits", + "robust", + "rstar", + "serde", + "spade", +] + +[[package]] +name = "geo-types" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567495020b114f1ce9bed679b29975aa0bfae06ac22beacd5cfde5dabe7b05d6" +dependencies = [ + "approx", + "arbitrary", + "num-traits", + "rstar", + "serde", +] + +[[package]] +name = "geographiclib-rs" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e5ed84f8089c70234b0a8e0aedb6dc733671612ddc0d37c6066052f9781960" +dependencies = [ + "libm", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", ] [[package]] @@ -265,6 +1210,31 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "h2" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.11", + "indexmap 2.2.3", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "h2" version = "0.4.2" @@ -276,19 +1246,60 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", - "indexmap", + "http 1.0.0", + "indexmap 2.2.3", "slab", "tokio", "tokio-util", "tracing", ] +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + [[package]] name = "hashbrown" version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash 0.8.9", + "allocator-api2", +] + +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32", + "rustc_version", + "spin 0.9.8", + "stable_deref_trait", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -296,6 +1307,32 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd" +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http" version = "1.0.0" @@ -307,6 +1344,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.11", + "pin-project-lite", +] + [[package]] name = "http-body" version = "1.0.0" @@ -314,7 +1362,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" dependencies = [ "bytes", - "http", + "http 1.0.0", ] [[package]] @@ -325,8 +1373,8 @@ checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" dependencies = [ "bytes", "futures-util", - "http", - "http-body", + "http 1.0.0", + "http-body 1.0.0", "pin-project-lite", ] @@ -357,6 +1405,36 @@ dependencies = [ "libm", ] +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.24", + "http 0.2.11", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + [[package]] name = "hyper" version = "1.1.0" @@ -366,9 +1444,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2", - "http", - "http-body", + "h2 0.4.2", + "http 1.0.0", + "http-body 1.0.0", "httparse", "httpdate", "itoa", @@ -376,6 +1454,20 @@ dependencies = [ "tokio", ] +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.11", + "hyper 0.14.28", + "rustls", + "tokio", + "tokio-rustls", +] + [[package]] name = "hyper-util" version = "0.1.3" @@ -384,14 +1476,64 @@ checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" dependencies = [ "bytes", "futures-util", - "http", - "http-body", - "hyper", + "http 1.0.0", + "http-body 1.0.0", + "hyper 1.1.0", "pin-project-lite", "socket2", "tokio", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -399,7 +1541,52 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is-terminal" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", ] [[package]] @@ -408,11 +1595,79 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +[[package]] +name = "jobserver" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lalrpop" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" +dependencies = [ + "ascii-canvas", + "bit-set", + "diff", + "ena", + "is-terminal", + "itertools 0.10.5", + "lalrpop-util", + "petgraph", + "pico-args", + "regex", + "regex-syntax 0.7.5", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid", +] + +[[package]] +name = "lalrpop-util" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" +dependencies = [ + "regex", +] + [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin 0.5.2", +] + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "lexicmp" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7378d131ddf24063b32cbd7e91668d183140c4b3906270635a4d633d1068ea5d" +dependencies = [ + "any_ascii", +] [[package]] name = "libc" @@ -420,18 +1675,86 @@ version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "libm" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall", +] + +[[package]] +name = "libspeedb-sys" +version = "0.0.4+2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14468e1c90e57078dcc625b045d9ad38ed53550d21282d886c48d521163ed05b" +dependencies = [ + "bindgen", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "lz4-sys", + "zstd-sys", +] + +[[package]] +name = "libz-sys" +version = "1.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037731f5d3aaa87a5675e895b63ddff1a87624bc29f77004ea829809654e48f6" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + [[package]] name = "log" version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +[[package]] +name = "lz4-sys" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "matchers" version = "0.1.0" @@ -447,12 +1770,45 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + [[package]] name = "memchr" version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +[[package]] +name = "miette" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" +dependencies = [ + "miette-derive", + "once_cell", + "thiserror", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "mime" version = "0.3.17" @@ -492,7 +1848,40 @@ checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "wasi", - "windows-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "nanoid" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8" +dependencies = [ + "rand", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[package]] +name = "nibble_vec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" +dependencies = [ + "smallvec", ] [[package]] @@ -515,6 +1904,60 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.18" @@ -522,6 +1965,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -543,6 +1987,27 @@ dependencies = [ "memchr", ] +[[package]] +name = "object_store" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2524735495ea1268be33d200e1ee97455096a0846295a21548cd2f3541de7050" +dependencies = [ + "async-trait", + "bytes", + "chrono", + "futures", + "humantime", + "itertools 0.11.0", + "parking_lot", + "percent-encoding", + "snafu", + "tokio", + "tracing", + "url", + "walkdir", +] + [[package]] name = "once_cell" version = "1.19.0" @@ -555,12 +2020,130 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core", + "subtle", +] + +[[package]] +name = "path-clean" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef" + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest", + "hmac", + "password-hash", + "sha2", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pem" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b13fe415cdf3c8e44518e18a7c95a13431d9bdf6d15367d82b23c377fdd441a" +dependencies = [ + "base64", + "serde", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.2.3", +] + +[[package]] +name = "pharos" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" +dependencies = [ + "futures", + "rustc_version", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + [[package]] name = "pin-project" version = "1.1.4" @@ -578,7 +2161,7 @@ checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.48", ] [[package]] @@ -593,6 +2176,33 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + [[package]] name = "portfolio" version = "0.1.0" @@ -600,6 +2210,8 @@ dependencies = [ "anyhow", "askama", "axum", + "serde", + "surrealdb", "tokio", "tower", "tower-http", @@ -607,6 +2219,67 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "prettyplease" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" +dependencies = [ + "proc-macro2", + "syn 2.0.48", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + [[package]] name = "proc-macro2" version = "1.0.78" @@ -616,6 +2289,53 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quick_cache" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c20af3800cee5134b79a3bd4a3d4b583c16ccfa5f53338f46400851a5b3819" +dependencies = [ + "ahash 0.8.9", + "equivalent", + "hashbrown 0.14.3", + "parking_lot", +] + [[package]] name = "quote" version = "1.0.35" @@ -625,6 +2345,93 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "radix_trie" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" +dependencies = [ + "endian-type", + "nibble_vec", + "serde", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[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", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "ref-cast" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4846d4c50d1721b1a3bef8af76924eef20d5e723647333798c1b519b3a9473f" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fddb4f8d99b0a2ebafc65a87a69a7b9875e4b1ae1f00db265d300ef7f28bccc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "regex" version = "1.10.3" @@ -663,18 +2470,296 @@ version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +[[package]] +name = "regex-syntax" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + [[package]] name = "regex-syntax" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "reqwest" +version = "0.11.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.24", + "http 0.2.11", + "http-body 0.4.6", + "hyper 0.14.28", + "hyper-rustls", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-rustls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "revision" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87eb86913082f8976b06d07a59f17df9120e6f38b882cf3fc5a45b4499e224b6" +dependencies = [ + "bincode", + "chrono", + "geo 0.26.0", + "regex", + "revision-derive", + "roaring", + "rust_decimal", + "serde", + "thiserror", + "uuid", +] + +[[package]] +name = "revision-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf996fc5f61f1dbec35799b5c00c6dda12e8862e8cb782ed24e10d0292e60ed3" +dependencies = [ + "darling", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "rkyv" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "roaring" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1c77081a55300e016cb86f2864415b7518741879db925b8d488a0ee0d2da6bf" +dependencies = [ + "bytemuck", + "byteorder", + "serde", +] + +[[package]] +name = "robust" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" + +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core", + "signature", + "spki", + "subtle", + "zeroize", +] + +[[package]] +name = "rstar" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73111312eb7a2287d229f06c00ff35b51ddee180f017ab6dec1f69d62ac098d6" +dependencies = [ + "heapless", + "num-traits", + "smallvec", +] + +[[package]] +name = "rust-stemmers" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" +dependencies = [ + "serde", + "serde_derive", +] + +[[package]] +name = "rust_decimal" +version = "1.34.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39449a79f45e8da28c57c341891b69a183044b29518bb8f86dbac9df60bb7df" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand", + "rkyv", + "serde", + "serde_json", +] + [[package]] name = "rustc-demangle" version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_lexer" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c86aae0c77166108c01305ee1a36a1e77289d7dc6ca0a3cd91ff4992de2d16a5" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustls" +version = "0.21.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + [[package]] name = "rustversion" version = "1.0.14" @@ -688,23 +2773,90 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] -name = "serde" -version = "1.0.196" +name = "salsa20" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scrypt" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" +dependencies = [ + "password-hash", + "pbkdf2", + "salsa20", + "sha2", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "semver" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +dependencies = [ + "serde", +] + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.196" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.48", ] [[package]] @@ -713,6 +2865,7 @@ version = "1.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" dependencies = [ + "indexmap 2.2.3", "itoa", "ryu", "serde", @@ -740,6 +2893,58 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -749,6 +2954,46 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror", + "time", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + [[package]] name = "slab" version = "0.4.9" @@ -764,6 +3009,43 @@ version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" +[[package]] +name = "smol_str" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6845563ada680337a52d43bb0b29f396f2d911616f6573012645b9e3d048a49" +dependencies = [ + "serde", +] + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "snap" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" + [[package]] name = "socket2" version = "0.5.5" @@ -771,7 +3053,258 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "spade" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61addf9117b11d1f5b4bf6fe94242ba25f59d2d4b2080544b771bd647024fd00" +dependencies = [ + "hashbrown 0.14.3", + "num-traits", + "robust", + "smallvec", +] + +[[package]] +name = "speedb" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78a8bab270d7d5a088d3dd9f1eb6ce0f0c5ee6261acff6b04b3e230bfafe8a1c" +dependencies = [ + "libc", + "libspeedb-sys", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "stacker" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "winapi", +] + +[[package]] +name = "storekey" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43c42833834a5d23b344f71d87114e0cc9994766a5c42938f4b50e7b2aef85b2" +dependencies = [ + "byteorder", + "memchr", + "serde", + "thiserror", +] + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared", + "precomputed-hash", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "surrealdb" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4c189541c759c763d4f5859a853afe85773baa0c95891f262425ff422394b0" +dependencies = [ + "async-channel", + "bincode", + "chrono", + "dmp", + "flume", + "futures", + "futures-concurrency", + "geo 0.27.0", + "indexmap 2.2.3", + "once_cell", + "path-clean", + "pharos", + "reqwest", + "revision", + "ring 0.17.8", + "rust_decimal", + "rustls", + "semver", + "serde", + "serde_json", + "surrealdb-core", + "thiserror", + "tokio", + "tokio-tungstenite", + "tracing", + "trice", + "url", + "uuid", + "wasm-bindgen-futures", + "wasmtimer", + "ws_stream_wasm", +] + +[[package]] +name = "surrealdb-core" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcf33ccbc2348089fab502d38198f86762fc951ec90413fbd63f9195e76e6e08" +dependencies = [ + "addr", + "any_ascii", + "argon2", + "async-channel", + "async-executor", + "async-recursion", + "base64", + "bcrypt", + "bincode", + "bytes", + "cedar-policy", + "chrono", + "deunicode", + "dmp", + "fst", + "futures", + "fuzzy-matcher", + "geo 0.27.0", + "geo-types", + "hex", + "ipnet", + "lexicmp", + "md-5", + "nanoid", + "nom", + "num_cpus", + "object_store", + "once_cell", + "pbkdf2", + "pharos", + "pin-project-lite", + "quick_cache", + "radix_trie", + "rand", + "regex", + "revision", + "ring 0.17.8", + "roaring", + "rust-stemmers", + "rust_decimal", + "scrypt", + "semver", + "serde", + "serde_json", + "sha1", + "sha2", + "snap", + "speedb", + "storekey", + "surrealdb-derive", + "surrealdb-jsonwebtoken", + "thiserror", + "tokio", + "tracing", + "trice", + "ulid", + "url", + "uuid", + "wasm-bindgen-futures", + "wasmtimer", + "ws_stream_wasm", +] + +[[package]] +name = "surrealdb-derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aacdb4c58b9ebef0291310afcd63af0012d85610d361f3785952c61b6f1dddf4" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "surrealdb-jsonwebtoken" +version = "8.3.0-surreal.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d4f759c65df8a8cf2d83c99db7fdd3ae5b8fff05fa7fe69a8612f29dd5f99b" +dependencies = [ + "base64", + "getrandom", + "hmac", + "pem", + "rand", + "ring 0.16.20", + "rsa", + "serde", + "serde_json", + "sha2", + "simple_asn1", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] @@ -785,12 +3318,82 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "sync_wrapper" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "thiserror" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "thread_local" version = "1.1.7" @@ -801,6 +3404,61 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tokio" version = "1.36.0" @@ -815,7 +3473,7 @@ dependencies = [ "pin-project-lite", "socket2", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -826,7 +3484,32 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.48", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls", + "tokio", + "tokio-rustls", + "tungstenite", + "webpki-roots", ] [[package]] @@ -843,6 +3526,23 @@ dependencies = [ "tracing", ] +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap 2.2.3", + "toml_datetime", + "winnow", +] + [[package]] name = "tower" version = "0.4.13" @@ -865,11 +3565,11 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0da193277a4e2c33e59e09b5861580c33dd0a637c3883d0fa74ba40c0374af2e" dependencies = [ - "bitflags", + "bitflags 2.4.2", "bytes", "futures-util", - "http", - "http-body", + "http 1.0.0", + "http-body 1.0.0", "http-body-util", "http-range-header", "httpdate", @@ -916,7 +3616,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.48", ] [[package]] @@ -958,6 +3658,61 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "trice" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3aaab10ae9fac0b10f392752bf56f0fd20845f39037fec931e8537b105b515a" +dependencies = [ + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 0.2.11", + "httparse", + "log", + "rand", + "rustls", + "sha1", + "thiserror", + "url", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ulid" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34778c17965aa2a08913b57e1f34db9b4a63f5de31768b55bf20d2795f921259" +dependencies = [ + "getrandom", + "rand", + "serde", + "web-time", +] + [[package]] name = "unicase" version = "2.7.0" @@ -967,30 +3722,263 @@ dependencies = [ "version_check", ] +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + [[package]] name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-script" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8d71f5726e5f285a935e9fe8edfd53f0491eb6e9a5774097fdabee7cd8c9cd" + +[[package]] +name = "unicode-security" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee9e13753df674873f3c4693b240ae5c03245ddc157dfccf7c26db9329af3a11" +dependencies = [ + "unicode-normalization", + "unicode-script", +] + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "uuid" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" +dependencies = [ + "atomic", + "getrandom", + "serde", + "wasm-bindgen", +] + [[package]] name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasmtimer" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f656cd8858a5164932d8a90f936700860976ec21eb00e0fe2aa8cab13f6b4cf" +dependencies = [ + "futures", + "js-sys", + "parking_lot", + "pin-utils", + "wasm-bindgen", +] + +[[package]] +name = "web-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ee269d72cc29bf77a2c4bc689cc750fb39f5cbd493d2205bbb3f5c7779cf7b0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + [[package]] name = "winapi" version = "0.3.9" @@ -1007,19 +3995,46 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.3", +] + [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.3", ] [[package]] @@ -1028,13 +4043,28 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d380ba1dc7187569a8a9e91ed34b8ccfc33123bbacb8c0aed2d1ad7f3ef2dc5f" +dependencies = [ + "windows_aarch64_gnullvm 0.52.3", + "windows_aarch64_msvc 0.52.3", + "windows_i686_gnu 0.52.3", + "windows_i686_msvc 0.52.3", + "windows_x86_64_gnu 0.52.3", + "windows_x86_64_gnullvm 0.52.3", + "windows_x86_64_msvc 0.52.3", ] [[package]] @@ -1043,38 +4073,163 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68e5dcfb9413f53afd9c8f86e56a7b4d86d9a2fa26090ea2dc9e40fba56c6ec6" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dab469ebbc45798319e69eebf92308e541ce46760b49b18c6b3fe5e8965b30f" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a4e9b6a7cac734a8b4138a4e1044eac3404d8326b6c0f939276560687a033fb" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b0ec9c422ca95ff34a78755cfa6ad4a51371da2a5ace67500cf7ca5f232c58" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704131571ba93e89d7cd43482277d6632589b18ecf4468f591fbae0a8b101614" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42079295511643151e98d61c38c0acc444e52dd42ab456f7ccfd5152e8ecf21c" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0770833d60a970638e989b3fa9fd2bb1aaadcf88963d1659fd7d9990196ed2d6" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "ws_stream_wasm" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version", + "send_wrapper", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" + +[[package]] +name = "zstd-sys" +version = "2.0.9+zstd.1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml index 55613b7..874d5c8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,8 @@ edition = "2021" anyhow = "1.0.79" askama = "0.12.1" axum = "0.7.4" +serde = { version = "1.0.197", features = ["derive"] } +surrealdb = { version = "1.2.0", features = ["kv-speedb"] } tokio = { version = "1.36.0", features = ["macros", "rt-multi-thread"] } tower = "0.4.13" tower-http = { version = "0.5.1", features = ["fs"] } diff --git a/assets/SK-test-logo.png b/assets/SK-test-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e551b9b06da91fa485b6e9401f6c12bc25fb096c GIT binary patch literal 131958 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 literal 0 HcmV?d00001 diff --git a/assets/aocollapse.png b/assets/aocollapse.png new file mode 100644 index 0000000000000000000000000000000000000000..2c7ff88eca6281d23d7408e830a3413e793a3b45 GIT binary patch literal 4641 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 :not([hidden]) ~ :not([hidden]) { --tw-space-x-reverse: 0; margin-right: calc(1rem * var(--tw-space-x-reverse)); @@ -898,62 +964,42 @@ select { margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); } -.space-x-3 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.75rem * var(--tw-space-x-reverse)); - margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); -} - -.whitespace-nowrap { - white-space: nowrap; +.rounded-full { + border-radius: 9999px; } .rounded-md { border-radius: 0.375rem; } -.rounded-full { - border-radius: 9999px; -} - .bg-gray-900 { --tw-bg-opacity: 1; background-color: rgb(17 24 39 / var(--tw-bg-opacity)); } +.bg-stone-200 { + --tw-bg-opacity: 1; + background-color: rgb(231 229 228 / var(--tw-bg-opacity)); +} + .bg-stone-400 { --tw-bg-opacity: 1; background-color: rgb(168 162 158 / var(--tw-bg-opacity)); } -.bg-stone-800 { - --tw-bg-opacity: 1; - background-color: rgb(41 37 36 / var(--tw-bg-opacity)); -} - .bg-stone-900 { --tw-bg-opacity: 1; background-color: rgb(28 25 23 / var(--tw-bg-opacity)); } -.bg-blue-500 { +.bg-white { --tw-bg-opacity: 1; - background-color: rgb(59 130 246 / var(--tw-bg-opacity)); + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); } -.bg-gray-200 { +.bg-zinc-50 { --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity)); -} - -.bg-gray-400 { - --tw-bg-opacity: 1; - background-color: rgb(156 163 175 / var(--tw-bg-opacity)); -} - -.bg-green-500 { - --tw-bg-opacity: 1; - background-color: rgb(34 197 94 / var(--tw-bg-opacity)); + background-color: rgb(250 250 250 / var(--tw-bg-opacity)); } .p-2 { @@ -979,10 +1025,18 @@ select { padding-bottom: 0.75rem; } +.pb-4 { + padding-bottom: 1rem; +} + .pb-6 { padding-bottom: 1.5rem; } +.pt-12 { + padding-top: 3rem; +} + .pt-2 { padding-top: 0.5rem; } @@ -991,22 +1045,19 @@ select { padding-top: 1.5rem; } -.pb-8 { - padding-bottom: 2rem; -} - -.pt-1 { - padding-top: 0.25rem; -} - -.pt-1\.5 { - padding-top: 0.375rem; +.text-center { + text-align: center; } .text-right { text-align: right; } +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; +} + .text-4xl { font-size: 2.25rem; line-height: 2.5rem; @@ -1022,6 +1073,10 @@ select { line-height: 1.25rem; } +.font-bold { + font-weight: 700; +} + .font-extrabold { font-weight: 800; } @@ -1030,6 +1085,15 @@ select { font-weight: 500; } +.font-semibold { + font-weight: 600; +} + +.text-emerald-300 { + --tw-text-opacity: 1; + color: rgb(110 231 183 / var(--tw-text-opacity)); +} + .text-gray-300 { --tw-text-opacity: 1; color: rgb(209 213 219 / var(--tw-text-opacity)); @@ -1060,25 +1124,42 @@ select { color: rgb(255 255 255 / var(--tw-text-opacity)); } -.text-gray-500 { +.text-zinc-800 { --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); + color: rgb(39 39 42 / var(--tw-text-opacity)); } -.text-gray-900 { - --tw-text-opacity: 1; - color: rgb(17 24 39 / var(--tw-text-opacity)); +.opacity-0 { + opacity: 0; } -.ring-8 { +.shadow-md { + --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-zinc-800\/5 { + --tw-shadow-color: rgb(39 39 42 / 0.05); + --tw-shadow: var(--tw-shadow-colored); +} + +.ring-1 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } -.ring-white { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(255 255 255 / var(--tw-ring-opacity)); +.ring-zinc-900\/5 { + --tw-ring-color: rgb(24 24 27 / 0.05); +} + +.transition { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; } .hover\:bg-gray-700:hover { @@ -1086,6 +1167,11 @@ select { background-color: rgb(55 65 81 / var(--tw-bg-opacity)); } +.hover\:bg-stone-300:hover { + --tw-bg-opacity: 1; + background-color: rgb(214 211 209 / var(--tw-bg-opacity)); +} + .hover\:bg-stone-700:hover { --tw-bg-opacity: 1; background-color: rgb(68 64 60 / var(--tw-bg-opacity)); @@ -1116,7 +1202,27 @@ select { --tw-ring-color: rgb(255 255 255 / var(--tw-ring-opacity)); } +.group:hover .group-hover\:scale-100 { + --tw-scale-x: 1; + --tw-scale-y: 1; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.group:hover .group-hover\:text-emerald-500 { + --tw-text-opacity: 1; + color: rgb(16 185 129 / var(--tw-text-opacity)); +} + +.group:hover .group-hover\:opacity-100 { + opacity: 1; +} + @media (min-width: 640px) { + .sm\:-inset-x-6 { + left: -1.5rem; + right: -1.5rem; + } + .sm\:ml-6 { margin-left: 1.5rem; } @@ -1129,6 +1235,10 @@ select { display: none; } + .sm\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + .sm\:items-stretch { align-items: stretch; } @@ -1137,6 +1247,10 @@ select { justify-content: flex-start; } + .sm\:rounded-2xl { + border-radius: 1rem; + } + .sm\:px-6 { padding-left: 1.5rem; padding-right: 1.5rem; @@ -1144,8 +1258,52 @@ select { } @media (min-width: 1024px) { + .lg\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + .lg\:px-8 { padding-left: 2rem; padding-right: 2rem; } +} + +@media (prefers-color-scheme: dark) { + .dark\:border { + border-width: 1px; + } + + .dark\:border-zinc-700\/50 { + border-color: rgb(63 63 70 / 0.5); + } + + .dark\:bg-zinc-800 { + --tw-bg-opacity: 1; + background-color: rgb(39 39 42 / var(--tw-bg-opacity)); + } + + .dark\:bg-zinc-800\/50 { + background-color: rgb(39 39 42 / 0.5); + } + + .dark\:text-emerald-700 { + --tw-text-opacity: 1; + color: rgb(4 120 87 / var(--tw-text-opacity)); + } + + .dark\:text-stone-100 { + --tw-text-opacity: 1; + color: rgb(245 245 244 / var(--tw-text-opacity)); + } + + .dark\:text-zinc-100 { + --tw-text-opacity: 1; + color: rgb(244 244 245 / var(--tw-text-opacity)); + } + + .dark\:ring-0 { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); + } } \ No newline at end of file diff --git a/assets/sk-extract.png b/assets/sk-extract.png new file mode 100644 index 0000000000000000000000000000000000000000..89bb3e330793d3983db66d58aeedab6b23229b63 GIT binary patch literal 588 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 W3!P863e2kj0000 { } }: -pkgs.mkShell { - # Get dependencies from the main package - inputsFrom = [ (pkgs.callPackage ./default.nix { }) ]; - # Additional tooling - buildInputs = with pkgs; [ - cargo - cargo-watch - rustc - rustup - clippy - rust-analyzer - pkg-config - bacon - nodePackages_latest.pnpm +let + runtimeLibs = [ + pkgs.libclang + pkgs.rocksdb ]; -} \ No newline at end of file +in + pkgs.mkShell { + # Get dependencies from the main package + inputsFrom = [ (pkgs.callPackage ./default.nix { }) ]; + # Additional tooling + buildInputs = with pkgs; [ + cargo + cargo-watch + rustc + rustup + clippy + rust-analyzer + pkg-config + bacon + nodePackages_latest.pnpm + surrealdb + libclang + ]; + LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath runtimeLibs}"; + } diff --git a/src/handlers.rs b/src/handlers.rs new file mode 100644 index 0000000..3e7d458 --- /dev/null +++ b/src/handlers.rs @@ -0,0 +1,27 @@ +use super::templates; +use axum::response::IntoResponse; + +pub async fn blog_post() -> impl IntoResponse { + let template = templates::PostTemplate { + title:"Test Tile".to_string(), + description:"this is a test description of a test blog post for rendering in its post template".to_string(), + post_date:"02/21/2024".to_string() + }; + templates::HtmlTemplate(template) +} +pub async fn root() -> impl IntoResponse { + let template = templates::HomeTemplate {}; + templates::HtmlTemplate(template) +} +pub async fn blog() -> impl IntoResponse { + let template = templates::BlogTemplate {}; + templates::HtmlTemplate(template) +} +pub async fn resume() -> impl IntoResponse { + let template = templates::ResumeTemplate {}; + templates::HtmlTemplate(template) +} +pub async fn projects() -> impl IntoResponse { + let template = templates::ProjectsTemplate {}; + templates::HtmlTemplate(template) +} diff --git a/src/main.rs b/src/main.rs index 0c2c20e..698d14d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,18 +1,23 @@ -use askama::Template; -use axum::{ - http::StatusCode, - response::{Html, IntoResponse, Response}, - routing::get, - Router, -}; use tower_http::services::ServeDir; -use tracing::info; +use std::env; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; +mod router; +mod handlers; +mod templates; + #[tokio::main] async fn main() { - let assets_path = std::env::current_dir().unwrap(); - + setup_tracing(); + + let assets_path = env::current_dir().unwrap().join("assets"); + let app = router::router(&assets_path); + let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); + axum::serve(listener, app).await.unwrap(); + println!("Listening on port 3000"); +} + +fn setup_tracing(){ tracing_subscriber::registry() .with( tracing_subscriber::EnvFilter::try_from_default_env() @@ -20,71 +25,6 @@ async fn main() { ) .with(tracing_subscriber::fmt::layer()) .init(); - - info!("hello, web server!"); - // build our application with a single route - let app = Router::new() - .route("/", get(root)) - .route("/blog", get(blog)) - .route("/resume", get(resume)) - .route("/projects", get(projects)) - .nest_service("/assets", ServeDir::new(format!("{}/assets", assets_path.to_str().unwrap())),); - // run our app with hyper, listening globally on port 3000 - let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); - axum::serve(listener, app).await.unwrap(); -} -async fn root() -> impl IntoResponse { - let template = HelloTemplate {}; - HtmlTemplate(template) -} -async fn blog() -> impl IntoResponse { - let template = BlogTemplate {}; - HtmlTemplate(template) -} -async fn resume() -> impl IntoResponse { - let template = ResumeTemplate {}; - HtmlTemplate(template) -} -async fn projects() -> impl IntoResponse { - let template = ProjectsTemplate {}; - HtmlTemplate(template) } + -#[derive(Template)] -#[template(path = "index.html")] -struct HelloTemplate; - -#[derive(Template)] -#[template(path = "blog.html")] -struct BlogTemplate; - -#[derive(Template)] -#[template(path = "resume.html")] -struct ResumeTemplate; - -#[derive(Template)] -#[template(path = "projects.html")] -struct ProjectsTemplate; - -/// A wrapper type that we'll use to encapsulate HTML parsed by askama into valid HTML for axum to serve. -struct HtmlTemplate(T); - -/// Allows us to convert Askama HTML templates into valid HTML for axum to serve in the response. -impl IntoResponse for HtmlTemplate -where - T: Template, -{ - fn into_response(self) -> Response { - // Attempt to render the template with askama - match self.0.render() { - // If we're able to successfully parse and aggregate the template, serve it - Ok(html) => Html(html).into_response(), - // If we're not, return an error or some bit of fallback HTML - Err(err) => ( - StatusCode::INTERNAL_SERVER_ERROR, - format!("Failed to render template. Error: {}", err), - ) - .into_response(), - } - } -} \ No newline at end of file diff --git a/src/router.rs b/src/router.rs new file mode 100644 index 0000000..b490521 --- /dev/null +++ b/src/router.rs @@ -0,0 +1,14 @@ +use axum::{Router, routing::get}; +use tower_http::services::ServeDir; +use std::path::Path; +use super::handlers; + +pub fn router(assets_path: &Path) -> Router { + Router::new() + .route("/", get(handlers::root)) + .route("/blog", get(handlers::blog)) + .route("/blog/post", get(handlers::blog_post)) + .route("/resume", get(handlers::resume)) + .route("/projects", get(handlers::projects)) + .nest_service("/assets", ServeDir::new(assets_path)) +} diff --git a/src/templates.rs b/src/templates.rs new file mode 100644 index 0000000..98af461 --- /dev/null +++ b/src/templates.rs @@ -0,0 +1,52 @@ +use askama::Template; +use axum::{ + http::StatusCode, + response::{IntoResponse, Html, Response} +}; + +#[derive(Template)] +#[template(path = "post.html")] +pub struct PostTemplate { + pub title: String, + pub description: String, + pub post_date: String, +} + +#[derive(Template)] +#[template(path = "index.html")] +pub struct HomeTemplate; + +#[derive(Template)] +#[template(path = "blog.html")] +pub struct BlogTemplate; + +#[derive(Template)] +#[template(path = "resume.html")] +pub struct ResumeTemplate; + +#[derive(Template)] +#[template(path = "projects.html")] +pub struct ProjectsTemplate; + +/// A wrapper type that we'll use to encapsulate HTML parsed by askama into valid HTML for axum to serve. +pub struct HtmlTemplate(pub T); + +/// Allows us to convert Askama HTML templates into valid HTML for axum to serve in the response. +impl IntoResponse for HtmlTemplate +where + T: Template, +{ + fn into_response(self) -> Response { + // Attempt to render the template with askama + match self.0.render() { + // If we're able to successfully parse and aggregate the template, serve it + Ok(html) => Html(html).into_response(), + // If we're not, return an error or some bit of fallback HTML + Err(err) => ( + StatusCode::INTERNAL_SERVER_ERROR, + format!("Failed to render template. Error: {}", err), + ) + .into_response(), + } + } +} \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index 9fb0bd0..41da245 100644 --- a/templates/base.html +++ b/templates/base.html @@ -7,7 +7,7 @@ -