From f0860b52a26481cb0502230eca48dac98f9af8ec Mon Sep 17 00:00:00 2001 From: Triston Armstrong Date: Sun, 24 Mar 2024 21:26:32 -0500 Subject: [PATCH] initial commit with existing content --- .gitignore | 3 + .prettierrc.toml | 1 + Cargo.lock | 3184 ++++++++++++++++++++++++++++++++++++++ Cargo.toml | 17 + README.md | 3 + assets/favicon.png | Bin 0 -> 108219 bytes migrations/0000_init.sql | 4 + src/errors.rs | 34 + src/main.rs | 12 + src/models.rs | 2 + src/router.rs | 32 + src/routes.rs | 27 + src/templates.rs | 13 + templates/base.html | 23 + templates/index.html | 31 + templates/notes.html | 12 + templates/portfolio.html | 211 +++ templates/styles.css | 17 + templates/tuts.html | 11 + 19 files changed, 3637 insertions(+) create mode 100644 .gitignore create mode 100644 .prettierrc.toml create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 assets/favicon.png create mode 100644 migrations/0000_init.sql create mode 100644 src/errors.rs create mode 100644 src/main.rs create mode 100644 src/models.rs create mode 100644 src/router.rs create mode 100644 src/routes.rs create mode 100644 src/templates.rs create mode 100644 templates/base.html create mode 100644 templates/index.html create mode 100644 templates/notes.html create mode 100644 templates/portfolio.html create mode 100644 templates/styles.css create mode 100644 templates/tuts.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e8541fe --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target +.shuttle-storage +Secrets*.toml diff --git a/.prettierrc.toml b/.prettierrc.toml new file mode 100644 index 0000000..3d14781 --- /dev/null +++ b/.prettierrc.toml @@ -0,0 +1 @@ +tabWidth = 4 diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..b998bd3 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,3184 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +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 = "anyhow" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" + +[[package]] +name = "askama" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b79091df18a97caea757e28cd2d5fda49c6cd4bd01ddffd7ff01ace0c0ad2c28" +dependencies = [ + "askama_derive", + "askama_escape", + "humansize", + "num-traits", + "percent-encoding", +] + +[[package]] +name = "askama_axum" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41603f7cdbf5ac4af60760f17253eb6adf6ec5b6f14a7ed830cf687d375f163" +dependencies = [ + "askama", + "axum-core 0.4.3", + "http 1.1.0", +] + +[[package]] +name = "askama_derive" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19fe8d6cb13c4714962c072ea496f3392015f0989b1a2847bb4b2d9effd71d83" +dependencies = [ + "askama_parser", + "basic-toml", + "mime", + "mime_guess", + "proc-macro2", + "quote", + "serde", + "syn 2.0.53", +] + +[[package]] +name = "askama_escape" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" + +[[package]] +name = "askama_parser" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0" +dependencies = [ + "nom", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "async-trait" +version = "0.1.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "461abc97219de0eaaf81fe3ef974a540158f3d079c2ab200f891f1a2ef201e85" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core 0.3.4", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.28", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1236b4b292f6c4d6dc34604bb5120d85c3fe1d1aa596bd5cc52ca054d13e7b9e" +dependencies = [ + "async-trait", + "axum-core 0.4.3", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.2.0", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "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.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "823388e228f614e9558c6804262db37960ec8821856535f5c3f59913140558f8" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +dependencies = [ + "serde", +] + +[[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 = "bumpalo" +version = "3.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" + +[[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 = "cc" +version = "1.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf5903dcbc0a39312feb77df2ff4c76387d591b9fc7b04a238dcf8bb62639a" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.4", +] + +[[package]] +name = "colored" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +dependencies = [ + "lazy_static", + "windows-sys 0.48.0", +] + +[[package]] +name = "comfy-table" +version = "6.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e959d788268e3bf9d35ace83e81b124190378e4c91c9067524675e33394b8ba" +dependencies = [ + "crossterm 0.26.1", + "strum 0.24.1", + "strum_macros 0.24.3", + "unicode-width", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[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 = "crc" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crossbeam-channel" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crossterm" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +dependencies = [ + "bitflags 2.5.0", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[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 = "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 = "diesel" +version = "2.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03fc05c17098f21b89bc7d98fe1dd3cce2c11c2ad8e145f2a44fe08ed28eb559" +dependencies = [ + "bitflags 2.5.0", + "byteorder", + "diesel_derives", + "itoa", +] + +[[package]] +name = "diesel-async" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acada1517534c92d3f382217b485db8a8638f111b0e3f2a2a8e26165050f77be" +dependencies = [ + "async-trait", + "diesel", + "futures-util", + "scoped-futures", + "tokio", + "tokio-postgres", +] + +[[package]] +name = "diesel_derives" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d02eecb814ae714ffe61ddc2db2dd03e6c49a42e269b5001355500d431cce0c" +dependencies = [ + "diesel_table_macro_syntax", + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "diesel_table_macro_syntax" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc5557efc453706fed5e4fa85006fe9817c224c3f480a34c7e5959fd700921c5" +dependencies = [ + "syn 2.0.53", +] + +[[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 = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" +dependencies = [ + "serde", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "finl_unicode" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "futures-core", + "futures-sink", + "spin 0.9.8", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +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-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[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.53", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[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 = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +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.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fbd2820c5e49886948654ab546d0688ff24530286bdcf8fca3cefb16d4618eb" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.2.5", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51ee2dd2e4f378392eeff5d51618cd9a63166a2513846bbc55f21cfacd9199d4" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 1.1.0", + "indexmap 2.2.5", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.3", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "htmx-portfolio" +version = "0.1.0" +dependencies = [ + "askama", + "askama_axum", + "axum 0.7.4", + "serde", + "serde_json", + "shuttle-axum", + "shuttle-runtime", + "shuttle-shared-db", + "sqlx", + "tokio", + "tokio-stream", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "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.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +dependencies = [ + "bytes", + "futures-core", + "http 1.1.0", + "http-body 1.0.0", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + +[[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.25", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186548d73ac615b32a73aafe38fb4f56c0d340e110e5a200bcadbaf2e199263a" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.3", + "http 1.1.0", + "http-body 1.0.0", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.28", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "hyper-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "hyper 1.2.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 = "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", +] + +[[package]] +name = "indexmap" +version = "2.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[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 = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libsqlite3-sys" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[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.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +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 = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[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-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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opentelemetry" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e32339a5dc40459130b3bd269e9892439f55b33e772d2a9d402a789baaf4e8a" +dependencies = [ + "futures-core", + "futures-sink", + "indexmap 2.2.5", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror", + "urlencoding", +] + +[[package]] +name = "opentelemetry-http" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f51189ce8be654f9b5f7e70e49967ed894e84a06fc35c6c042e64ac1fc5399e" +dependencies = [ + "async-trait", + "bytes", + "http 0.2.12", + "opentelemetry", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f16aec8a98a457a52664d69e0091bac3a0abd18ead9b641cb00202ba4e0efe4" +dependencies = [ + "async-trait", + "crossbeam-channel", + "futures-channel", + "futures-executor", + "futures-util", + "glob", + "once_cell", + "opentelemetry", + "ordered-float", + "percent-encoding", + "rand", + "thiserror", +] + +[[package]] +name = "ordered-float" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[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 = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[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 = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +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 = "postgres-protocol" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b6c5ef183cd3ab4ba005f1ca64c21e8bd97ce4699cfea9e8d9a2c4958ca520" +dependencies = [ + "base64", + "byteorder", + "bytes", + "fallible-iterator", + "hmac", + "md-5", + "memchr", + "rand", + "sha2", + "stringprep", +] + +[[package]] +name = "postgres-types" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d2234cdee9408b523530a9b6d2d6b373d1db34f6a8e51dc03ded1828d7fb67c" +dependencies = [ + "bytes", + "fallible-iterator", + "postgres-protocol", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[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.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "prost-types" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" +dependencies = [ + "prost", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[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 = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.6", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[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", + "windows-sys 0.52.0", +] + +[[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 = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustix" +version = "0.38.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" +dependencies = [ + "bitflags 2.5.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +dependencies = [ + "ring", + "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", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "scoped-futures" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1473e24c637950c9bd38763220bea91ec3e095a89f672bbd7a10d03e77ba467" +dependencies = [ + "cfg-if", + "pin-utils", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "semver" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +dependencies = [ + "serde", +] + +[[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.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "serde_json" +version = "1.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shuttle-axum" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92b5da6adec6308876d96ba9acc8be7592eb3621f97c59900a411e18a0d52b76" +dependencies = [ + "axum 0.7.4", + "shuttle-runtime", +] + +[[package]] +name = "shuttle-codegen" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaaa74ae77edfc5590c87af97bfc15d0aff2db9ff4a5fd891be0a7dd0de8089" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "shuttle-common" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "910ae1502f083563f06fee5d5ceb2a8b45f92c67ef7834806880484f15d79bb5" +dependencies = [ + "anyhow", + "chrono", + "comfy-table", + "crossterm 0.27.0", + "http 0.2.12", + "opentelemetry", + "opentelemetry-http", + "pin-project", + "semver", + "serde", + "serde_json", + "strum 0.26.2", + "tower", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", + "url", + "uuid", + "zeroize", +] + +[[package]] +name = "shuttle-proto" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad7aa381187faaa32562c1e3631047b1edd070c055be50a5f32d13a538110fd7" +dependencies = [ + "futures-core", + "prost", + "prost-types", + "shuttle-common", + "tonic", +] + +[[package]] +name = "shuttle-runtime" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322f013c5058e37bf19a9ad8af35a2ac139605b0cbd941c0d0a009d032e23b73" +dependencies = [ + "anyhow", + "async-trait", + "chrono", + "colored", + "prost-types", + "serde", + "serde_json", + "shuttle-codegen", + "shuttle-common", + "shuttle-proto", + "shuttle-service", + "strfmt", + "thiserror", + "tokio", + "tokio-stream", + "tonic", + "tracing-subscriber", +] + +[[package]] +name = "shuttle-service" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9118dcf5aea64a38a06875a744b6c7daf8aa41e56eb2ecea2a21fb8c42ff7db5" +dependencies = [ + "anyhow", + "async-trait", + "serde", + "shuttle-common", + "strfmt", + "thiserror", +] + +[[package]] +name = "shuttle-shared-db" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c106b44d5d07b85dc495c10fc025a4cf365d5767992e2efcd6fe3e74ccbf3d9d" +dependencies = [ + "async-trait", + "diesel-async", + "serde", + "serde_json", + "shuttle-service", + "sqlx", +] + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[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 = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "socket2" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[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 = "sqlformat" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce81b7bd7c4493975347ef60d8c7e8b742d4694f4c49f93e0a12ea263938176c" +dependencies = [ + "itertools 0.12.1", + "nom", + "unicode_categories", +] + +[[package]] +name = "sqlx" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" +dependencies = [ + "ahash", + "atoi", + "byteorder", + "bytes", + "crc", + "crossbeam-queue", + "either", + "event-listener", + "futures-channel", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashlink", + "hex", + "indexmap 2.2.5", + "log", + "memchr", + "once_cell", + "paste", + "percent-encoding", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlformat", + "thiserror", + "tokio", + "tokio-stream", + "tracing", + "url", + "webpki-roots", +] + +[[package]] +name = "sqlx-macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 1.0.109", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" +dependencies = [ + "dotenvy", + "either", + "heck", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 1.0.109", + "tempfile", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" +dependencies = [ + "atoi", + "base64", + "bitflags 2.5.0", + "byteorder", + "bytes", + "crc", + "digest", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand", + "rsa", + "serde", + "sha1", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" +dependencies = [ + "atoi", + "base64", + "bitflags 2.5.0", + "byteorder", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" +dependencies = [ + "atoi", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "sqlx-core", + "tracing", + "url", + "urlencoding", +] + +[[package]] +name = "strfmt" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a8348af2d9fc3258c8733b8d9d8db2e56f54b2363a4b5b81585c7875ed65e65" + +[[package]] +name = "stringprep" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" +dependencies = [ + "finl_unicode", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" + +[[package]] +name = "strum" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +dependencies = [ + "strum_macros 0.26.2", +] + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "strum_macros" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.53", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[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]] +name = "syn" +version = "2.0.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "thiserror" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "tokio-postgres" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d340244b32d920260ae7448cb72b6e238bddc3d4f7603394e7dd46ed8e48f5b8" +dependencies = [ + "async-trait", + "byteorder", + "bytes", + "fallible-iterator", + "futures-channel", + "futures-util", + "log", + "parking_lot", + "percent-encoding", + "phf", + "pin-project-lite", + "postgres-protocol", + "postgres-types", + "rand", + "socket2", + "tokio", + "tokio-util", + "whoami", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "tonic" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" +dependencies = [ + "async-stream", + "async-trait", + "axum 0.6.20", + "base64", + "bytes", + "h2 0.3.25", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.28", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c67ac25c5407e7b961fafc6f7e9aa5958fd297aada2d20fa2ae1737357e55596" +dependencies = [ + "js-sys", + "once_cell", + "opentelemetry", + "opentelemetry_sdk", + "smallvec", + "tracing", + "tracing-core", + "tracing-log", + "tracing-subscriber", + "web-time", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +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-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[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", + "serde", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "uuid" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +dependencies = [ + "getrandom", + "serde", +] + +[[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 = "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 = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.53", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" +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 = "whoami" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +dependencies = [ + "redox_syscall", + "wasite", + "web-sys", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[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.4", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "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.4", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +dependencies = [ + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" + +[[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.53", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..b5890af --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "htmx-portfolio" +version = "0.1.0" +edition = "2021" + +[dependencies] +askama = { version = "0.12.1", features = ["with-axum"] } +askama_axum = "0.4.0" +axum = "0.7.4" +serde = { version = "1.0.189", features = ["derive"] } +serde_json = "1.0.107" +shuttle-axum = "0.42.0" +shuttle-runtime = "0.42.0" +shuttle-shared-db = { version = "0.42.0", features = ["postgres", "sqlx"] } +sqlx = { version = "0.7.2", features = ["runtime-tokio-rustls", "postgres"] } +tokio = "1.28.2" +tokio-stream = { version = "0.1.14", features = ["sync"] } diff --git a/README.md b/README.md new file mode 100644 index 0000000..ebbc311 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Axum + htmx + +This is an example of how you can use Shuttle with Axum, Askama and htmx to create a frontend that's easily extendable and requires zero framework knowledge, while being able to easily inject variables from the backend into the frontend. diff --git a/assets/favicon.png b/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..5024a340b7fc7b9edef75499400c53e3c57d22e6 GIT binary patch literal 108219 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

  • wdz+V>)Z}BS3Y>EERE{=#a-W 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 K=~79Pp#K3TV2%v{ literal 0 HcmV?d00001 diff --git a/migrations/0000_init.sql b/migrations/0000_init.sql new file mode 100644 index 0000000..07eb5c7 --- /dev/null +++ b/migrations/0000_init.sql @@ -0,0 +1,4 @@ +CREATE TABLE IF NOT EXISTS todos ( + id SERIAL PRIMARY KEY, + description TEXT NOT NULL +); diff --git a/src/errors.rs b/src/errors.rs new file mode 100644 index 0000000..8bb1703 --- /dev/null +++ b/src/errors.rs @@ -0,0 +1,34 @@ +use axum::http::StatusCode; +use axum::response::{IntoResponse, Response}; + +pub enum ApiError { + SQLError(sqlx::Error), + HTTPError(axum::http::Error), +} + +impl IntoResponse for ApiError { + fn into_response(self) -> Response { + match self { + Self::SQLError(e) => { + (StatusCode::INTERNAL_SERVER_ERROR, format!("SQL error: {e}")).into_response() + } + Self::HTTPError(e) => ( + StatusCode::INTERNAL_SERVER_ERROR, + format!("HTTP error: {e}"), + ) + .into_response(), + } + } +} + +impl From for ApiError { + fn from(e: sqlx::Error) -> Self { + Self::SQLError(e) + } +} + +impl From for ApiError { + fn from(e: axum::http::Error) -> Self { + Self::HTTPError(e) + } +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..07859ce --- /dev/null +++ b/src/main.rs @@ -0,0 +1,12 @@ +mod errors; +mod models; +mod router; +mod routes; +mod templates; + +#[shuttle_runtime::main] +async fn main() -> shuttle_axum::ShuttleAxum { + let router = router::init_router(); + + Ok(router.into()) +} diff --git a/src/models.rs b/src/models.rs new file mode 100644 index 0000000..2f28880 --- /dev/null +++ b/src/models.rs @@ -0,0 +1,2 @@ +// use serde::{Deserialize, Serialize}; +// put models here \ No newline at end of file diff --git a/src/router.rs b/src/router.rs new file mode 100644 index 0000000..584ca6d --- /dev/null +++ b/src/router.rs @@ -0,0 +1,32 @@ +use axum::{routing::get, Router}; + +use crate::routes; + +#[derive(Clone)] +pub struct AppState {} + +// put all notes routes here +pub fn init_notes_routes() -> Router { + Router::new().route("/", get(routes::notes)) +} + +// put all tutorial routes here +pub fn init_tuts_routes() -> Router { + Router::new().route("/", get(routes::tuts)) +} + +// put any non nested routes here +pub fn init_utily_routes() -> Router { + Router::new() + .route("/", get(routes::portfolio)) + .route("/styles.css", get(routes::styles)) +} + +pub fn init_router() -> Router { + let routes: Router<()> = Router::<()>::new() + .nest("/tuts", init_tuts_routes()) + .nest("/notes", init_notes_routes()) + .nest("/", init_utily_routes()); + + Router::new().nest("/", routes) +} diff --git a/src/routes.rs b/src/routes.rs new file mode 100644 index 0000000..195690c --- /dev/null +++ b/src/routes.rs @@ -0,0 +1,27 @@ +use axum::{ + http::StatusCode, + response::{IntoResponse, Response}, +}; + +use crate::{errors::ApiError, templates}; + +pub async fn portfolio() -> impl IntoResponse { + templates::Portfolio +} + +pub async fn notes() -> impl IntoResponse { + templates::Notes +} + +pub async fn tuts() -> impl IntoResponse { + templates::Tuts +} + +pub async fn styles() -> Result { + let response = Response::builder() + .status(StatusCode::OK) + .header("Content-Type", "text/css") + .body(include_str!("../templates/styles.css").to_owned())?; + + Ok(response) +} diff --git a/src/templates.rs b/src/templates.rs new file mode 100644 index 0000000..cc15e59 --- /dev/null +++ b/src/templates.rs @@ -0,0 +1,13 @@ +use askama::Template; + +#[derive(Template)] +#[template(path = "portfolio.html")] +pub struct Portfolio; + +#[derive(Template)] +#[template(path = "notes.html")] +pub struct Notes; + +#[derive(Template)] +#[template(path = "tuts.html")] +pub struct Tuts; diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..e2567b4 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,23 @@ + + + + + + + + {% block title %}{{ title }} - My Site{% endblock %} + {% block head %}{% endblock %} + + + {% block content %} +

    Placeholder content

    + {% endblock %} + + diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..3999822 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,31 @@ +{% extends "base.html" %} {% block title %}Index{% endblock %} {% block content +%} +

    Shuttle Todos - Home

    +
    Event stream +

    Shuttle Todos

    +
    + + +
    +
    + Loading... +
    +{% endblock %} diff --git a/templates/notes.html b/templates/notes.html new file mode 100644 index 0000000..db14ab8 --- /dev/null +++ b/templates/notes.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} {% block title %}Notes{% endblock %} {% block content +%} + +
    + +

    Notes

    +

    Here all my notes go

    +{% endblock content%} diff --git a/templates/portfolio.html b/templates/portfolio.html new file mode 100644 index 0000000..c1e58e9 --- /dev/null +++ b/templates/portfolio.html @@ -0,0 +1,211 @@ +{% extends "base.html" %} {% block title %}Portfolio{% endblock %} {% block +content %} + +
    + +

    Triston Armstrong 🫰

    +

    + Full Stack Software Developer + @VentraHealth +

    +

    + I am a self taught Full Stack Software Developer with an unhealthy addiction + to solving problems using code. +

    + +

    🤹 Skills

    +

    + Typescript + | + Python + | + Rust + | + Javascript +

    + +

    💼 Jobs

    +
    +

    + Ventra Health + / May '23 - Present +

    +

    Maintaining and iterating on an internal web application

    +
    + +
    +

    + Randstad Technologies / May '22 - May '23 +

    +

    Built Web Applications for external clients

    +
    + +
    +

    + Damiano Global Corporation / July '20 - Nov. '21 +

    +

    Built Web Applications for external clients

    +
    + +
    +

    + Makers Ladder LLC / Dec. '19 - Apr. '22 +

    +

    Did some thangs

    +
    + +

    🚧 Projects

    +

    + Solar Battery Monitor API + | + Armstrong Editor + | + Web Window Manager + | + Component Test Helper + | + Hive DAPP + | + Kivy Twisted Input Capture + | + Plant Monitor Node MCU + | + Oppo BDP 103 CLI + | + Sony Bravia Pro Server + | + Chat IO + | + Zip Code Distance App +

    + +

    🧰 Tools

    +

    + CSS-Tricks + | + Indie Hackers + | + W3Schools + | + Simple Icons + | + Hero Icons + | + Tailwind Cheatsheet + | + Tailwind Elements + | + Tailwind Components +

    + +

    🎨 NoCss

    +

    + Water CSS + | + MPV CSS + | + Bahunya + | + Marx + | + Sakura + | + Tacit + | + New CSS + | + Bullframe CSS + | + Markdown CSS (modest) +

    + + +{% endblock %} diff --git a/templates/styles.css b/templates/styles.css new file mode 100644 index 0000000..d0629b8 --- /dev/null +++ b/templates/styles.css @@ -0,0 +1,17 @@ +:root { + --background-body: #0d1117 !important; +} + +#content { + display: flex; + flex-direction: column; + align-items: center; + gap: 1rem; +} + +table, +th, +td { + border: 1px solid black; + padding: 0.25rem; +} diff --git a/templates/tuts.html b/templates/tuts.html new file mode 100644 index 0000000..608b21b --- /dev/null +++ b/templates/tuts.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} {% block title %}Micro Tuts{% endblock %} {% block +content %} + + +

    Notes

    +

    Here all my Micro Tuts go

    +{% endblock content%}