diff --git a/Cargo.lock b/Cargo.lock index 34a2706..64876de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,24 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[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 = "atomic-waker" @@ -8,6 +26,12 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + [[package]] name = "base64" version = "0.22.1" @@ -29,18 +53,83 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bstr" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" + [[package]] name = "bytes" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +[[package]] +name = "cc" +version = "1.2.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" +dependencies = [ + "find-msvc-tools", + "shlex", +] + [[package]] name = "cfg-if" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "chrono" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +dependencies = [ + "iana-time-zone", + "num-traits", + "windows-link", +] + +[[package]] +name = "chrono-tz" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" +dependencies = [ + "parse-zoneinfo", + "phf", + "phf_codegen", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + [[package]] name = "cpufeatures" version = "0.2.17" @@ -50,6 +139,31 @@ dependencies = [ "libc", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + [[package]] name = "crypto-common" version = "0.1.7" @@ -60,6 +174,12 @@ dependencies = [ "typenum", ] +[[package]] +name = "deunicode" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abd57806937c9cc163efc8ea3910e00a62e2aeb0b8119f1793a978088f8f6b04" + [[package]] name = "digest" version = "0.10.7" @@ -86,6 +206,12 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + [[package]] name = "fnv" version = "1.0.7" @@ -150,6 +276,41 @@ dependencies = [ "version_check", ] +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "globset" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "globwalk" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" +dependencies = [ + "bitflags", + "ignore", + "walkdir", +] + [[package]] name = "h2" version = "0.4.13" @@ -244,6 +405,15 @@ 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 = "1.9.0" @@ -280,6 +450,46 @@ dependencies = [ "tower-service", ] +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "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 = "ignore" +version = "0.4.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3d782a365a015e0f5c04902246139249abf769125006fbe7649e2ee88169b4a" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata", + "same-file", + "walkdir", + "winapi-util", +] + [[package]] name = "indexmap" version = "2.14.0" @@ -296,12 +506,34 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +[[package]] +name = "js-sys" +version = "0.3.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "libc" version = "0.2.185" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f" +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "lock_api" version = "0.4.14" @@ -350,6 +582,15 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + [[package]] name = "once_cell" version = "1.21.4" @@ -379,12 +620,102 @@ dependencies = [ "windows-link", ] +[[package]] +name = "parse-zoneinfo" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" +dependencies = [ + "regex", +] + [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "pest" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" +dependencies = [ + "memchr", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" +dependencies = [ + "pest", + "sha2", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project" version = "1.1.11" @@ -411,6 +742,15 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + [[package]] name = "proc-macro2" version = "1.0.106" @@ -429,6 +769,36 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +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.5.18" @@ -438,12 +808,56 @@ dependencies = [ "bitflags", ] +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + [[package]] name = "ryu" version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" +[[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 = "scoped-tls" version = "1.0.1" @@ -521,6 +935,23 @@ dependencies = [ "digest", ] +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.8" @@ -531,12 +962,28 @@ dependencies = [ "libc", ] +[[package]] +name = "siphasher" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" + [[package]] name = "slab" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" +[[package]] +name = "slug" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "882a80f72ee45de3cc9a5afeb2da0331d58df69e4e7d8eeb5d3c7784ae67e724" +dependencies = [ + "deunicode", + "wasm-bindgen", +] + [[package]] name = "smallvec" version = "1.15.1" @@ -564,6 +1011,28 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "tera" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8004bca281f2d32df3bacd59bc67b312cb4c70cea46cbd79dbe8ac5ed206722" +dependencies = [ + "chrono", + "chrono-tz", + "globwalk", + "humansize", + "lazy_static", + "percent-encoding", + "pest", + "pest_derive", + "rand", + "regex", + "serde", + "serde_json", + "slug", + "unicode-segmentation", +] + [[package]] name = "tokio" version = "1.52.1" @@ -637,6 +1106,12 @@ version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + [[package]] name = "unicase" version = "2.9.0" @@ -649,12 +1124,28 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +[[package]] +name = "unicode-segmentation" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" + [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "warp" version = "0.4.2" @@ -690,20 +1181,129 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" +[[package]] +name = "wasm-bindgen" +version = "0.2.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" +dependencies = [ + "unicode-ident", +] + [[package]] name = "website" version = "0.1.0" dependencies = [ + "lazy_static", + "tera", "tokio", "warp", ] +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.61.2" @@ -713,6 +1313,26 @@ dependencies = [ "windows-link", ] +[[package]] +name = "zerocopy" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "zmij" version = "1.0.21" diff --git a/Cargo.toml b/Cargo.toml index 22a185f..0d8045d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,5 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] +lazy_static = "1.5.0" +tera = "1.20.1" tokio = { version = "1", features = ["full"] } warp = { version = "0.4", features = ["server"] } diff --git a/Dockerfile b/Dockerfile index f1579fa..2cd10a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,7 @@ FROM debian:bookworm-slim WORKDIR /app COPY --from=builder /usr/src/app/target/release/website /app/warp_server COPY ./static /app/static +COPY ./templates /app/templates EXPOSE 3030 CMD ["./warp_server"] diff --git a/src/main.rs b/src/main.rs index 3fb43f9..d62e9b6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,21 @@ -use warp::Filter; +use tera::{Context, Tera}; +use warp::{Filter, filters::path::Tail, Reply, Rejection}; + +lazy_static::lazy_static! { + pub static ref TEMPLATES: Tera = Tera::new("templates/**/*").expect("failed to parse templates"); +} #[tokio::main] async fn main() { - let static_files = warp::fs::dir("static"); + let static_pages = warp::fs::dir("static"); + + for name in TEMPLATES.get_template_names() { + println!("Loaded template {}", name); + } + + let templates = warp::get() + .and(warp::path::tail()) + .and_then(render_template); let root = warp::path::end() .and(warp::header::optional::("accept-language")) @@ -14,9 +27,24 @@ async fn main() { warp::redirect(warp::http::Uri::from_static(target)) }); - let routes = root.or(static_files); + let routes = root.or(static_pages).or(templates); warp::serve(routes) .run(([0,0,0,0], 3030)) .await; } + +async fn render_template(tail: Tail) -> Result { + let mut path = tail.as_str().to_string(); + if path.is_empty() || path.ends_with('/') { + path.push_str("index.html"); + } + + match TEMPLATES.render(&path, &Context::new()) { + Ok(html) => Ok(warp::reply::html(html)), + Err(e) => { + eprintln!("Tera error: {}", e); + Err(warp::reject::not_found()) + } + } +} diff --git a/static/en/academic/cv/resume.pdf b/static/en/academic/cv/resume.pdf deleted file mode 100644 index 85fa03e..0000000 Binary files a/static/en/academic/cv/resume.pdf and /dev/null differ diff --git a/static/en/index.html b/static/en/index.html deleted file mode 100644 index 5d9f514..0000000 --- a/static/en/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - Spencer Whitehead - - - -

Pour accéder à la version française, veuillez cliquer ici.

-

This is the personal website of Spencer Whitehead.

-

Resume

- diff --git a/static/fr/resume/index.html b/static/fr/resume/index.html deleted file mode 100644 index f8be8e5..0000000 --- a/static/fr/resume/index.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - Spencer Nicholas Whitehead - CV - - - - -
-

Spencer Nicholas Whitehead

-
- Courriel: spencer@firemail.cc
- No de tél.: +1 984 312 9089 -
-
- -
-

Education

- -
-

Doctorant, Department of Mathematics, Université Duke | septembre 2022 – Avril 2027

-
    -
  • Currently researching four- and eight-dimensional geometry with Prof. Mark Stern.
  • -
  • Member of the Certificate in College Teaching program, to be awarded on graduation.
  • -
-
- -
-

M.Math. in Pure Mathematics (research thesis), Université de Waterloo | Octobre 2021 – août 2022

-
    -
  • Supervisé de Prof. Benoit Charbonneau.
  • -
  • Titre du thèse: Integrality theorems for symmetric instantons.
  • -
-
- -
-

B.Math. in Pure Mathematics; Minor in études de l'Asie d'Est, Université de Waterloo | septembre 2016 – août 2021

-
    -
  • Recipient of 2021 Alumni Gold Medal for the Faculty of Mathematics.
  • -
  • Recipient of 2021 Jessie W.H. Zou Memorial Award for Excellence in Undergraduate Research.
  • -
-
-
- -
-

Industry Experience

- -
-

Stagiaire en ingénierie logicielle, Citadel Enterprise, Janvier 2020 – Avril 2020

-
    -
  • Developed C++ data pipelines to parse and archive data streams from Thompson Reuters.
  • -
  • Handled over 300GB per day of market data at the height of the market impact of COVID-19.
  • -
-
- -
-

Stagiaire en ingénierie logicielle, ContextLogic LLC, Janvier 2018 – Avril 2018

-
    -
  • Worked as a member of the Platform Data team, monitoring the health of policies and shipping estimates.
  • -
  • Conducted shipping time estimate experiments ranging from neutral to gross +2.5% profits.
  • -
  • Created reports and Grafana dashboards combining data from MongoDB and TreasureData tracking merchant policy effectiveness.
  • -
-
- -
-

Stagiaire en ingénierie logicielle, Citadel LLC, septembre 2017 – décembre 2017

-
    -
  • Worked on the Accounting Development Team, creating and maintaining software for over 100 clients.
  • -
  • Designed, tested, and implemented new response formats reducing response size by 10x and increasing speed 5x.
  • -
-
-
- -
-

Skills

-
-
Langages
-
anglais, français (DELF B2), japonais (niveau B2/C1).
- -
Langages de programmation
-
C, C++, Python, Sage, Maple, Haskell.
- -
Logiciel
-
sklearn, numpy, (geo)pandas, pytorch, SQL.
-
-
- -
-

Leadership and Professional Service

-

Délegué syndical, Duke Graduate Students Union, septembre 2025 - prèsent

-
    -
  • Mediated workplace disputes and represented graduate workers in grievance proceedings.
  • -
- -

Président, Chapitre étudiant de l'American Mathematical Society, année scolaire 2024-25

-
    -
  • Organized and hosted the Triangle Area Graduate Mathematics Seminar with NC State University and UNC Chapel Hill at Duke, fevrier 2025.
  • -
- -

Représentant des doctorants, Duke Mathematics Departmental Teaching Committee, novembre 2023 - present

-
    -
  • Performed annual interviews and advocated for graduate interests in departmental teaching decisions.
  • -
-
- -
-

Academic Activity

- -
-

Selected Publications

-
    -
  • Edidin, Dan, Matthew Satriano, et Spencer Whitehead. "On a smoothness characterization for good moduli spaces." Advances in Mathematics 442 (Avril 2024).
  • -
  • Charbonneau, B. et Whitehead, S. "Studying Wythoff and Zometool Constructions using Maple." Maple in Mathematics Education and Research (pp. 65–76), 2020.
  • -
-
- -
-

Supervision

-

Duke Math+ program (joint with Biji Wong, Gregory Herschlag), Spring 2026

-

Supervised four undergraduate students in a project on the application of diffusion maps and machine learning to graph partition problems, with a focus on the study of gerrymandering.

- -

MITACS internship program (joint with Benoit Charbonneau), Spring 2022

-

Supervised two undergraduate students in a computational project on low-dimensional optimal packing problems

-
- -
-

Selected Research Presentations

-
    -
  • [Invité] An asymptotic Nahm transform for Spin(7) instantons. Mathematical Congress of the Americas, Miami, juliet 2025.
  • -
  • Symmetric instantons. (Poster). Geometric Models of Matter, Leeds, août 2024.
  • -
  • Generalized Pythagorean lutes. Bridges 2022, Helsinki, août 2022.
  • -
  • Integrality theorems for symmetric instantons. Union College Mathematics Conference, Schenectady, juin 2022.
  • -
-
-
-

Selected Teaching Experience

-

Chargé de cours MATH 106L (Lab calculus 2), août - décembre 2023, Université Duke

-
    -
  • Instruction et coordination d'une classe de 18 élèves.
  • -
  • Gestion d'un equipe de 4 auxiliaires d'enseignment
  • -
- -

Auxiliaire d'enseignment CS 246(E) ([Enriched] Object-Oriented Software Development), septembre 2018 - décembre 2019, Université de Waterloo.

-
    -
  • Delivered weekly tutorial lectures for classes of 50+ students.
  • -
  • Designed assignments and managed the course platform for running and evaluating student code.
  • -
-
-
- - - - diff --git a/templates/common.html b/templates/common.html new file mode 100644 index 0000000..1afc8b1 --- /dev/null +++ b/templates/common.html @@ -0,0 +1,20 @@ +{% macro meta(title, lang) %} + + + + + + {{ title }} + + +{% endmacro %} + +{% macro nav() %} + +{% endmacro %} diff --git a/static/en/academic/cv/index.html b/templates/en/academic/cv/index.html similarity index 100% rename from static/en/academic/cv/index.html rename to templates/en/academic/cv/index.html diff --git a/static/en/academic/index.html b/templates/en/academic/index.html similarity index 100% rename from static/en/academic/index.html rename to templates/en/academic/index.html diff --git a/static/en/academic/teaching/2023/106/grading_info/index.html b/templates/en/academic/teaching/2023/106/grading_info/index.html similarity index 100% rename from static/en/academic/teaching/2023/106/grading_info/index.html rename to templates/en/academic/teaching/2023/106/grading_info/index.html diff --git a/static/en/academic/teaching/2023/106/index.html b/templates/en/academic/teaching/2023/106/index.html similarity index 100% rename from static/en/academic/teaching/2023/106/index.html rename to templates/en/academic/teaching/2023/106/index.html diff --git a/static/en/academic/teaching/index.html b/templates/en/academic/teaching/index.html similarity index 100% rename from static/en/academic/teaching/index.html rename to templates/en/academic/teaching/index.html diff --git a/templates/en/index.html b/templates/en/index.html new file mode 100644 index 0000000..85ad546 --- /dev/null +++ b/templates/en/index.html @@ -0,0 +1,8 @@ +{% import "common.html" as common %} +{{ common::meta(title="Home Page", lang="en") }} + +

Pour accéder à la version française, veuillez cliquer ici.

+

This is the personal website of Spencer Whitehead. I am a fourth-year Ph.D. candidate at Duke University, expecting to graduate in early 2027. + My primary research interests are in gauge theory, four- and eight-dimensional differential geometry, and the applications of computer algebra systems to solving problems in geometry.

+

Resume

+ diff --git a/static/en/resume/index.html b/templates/en/resume/index.html similarity index 89% rename from static/en/resume/index.html rename to templates/en/resume/index.html index bb03995..e6c64c1 100644 --- a/static/en/resume/index.html +++ b/templates/en/resume/index.html @@ -1,11 +1,7 @@ - - - - - Spencer Nicholas Whitehead - CV - +{% import "common.html" as common %} +{{ common::meta(title="Spencer Whitehead - Resume", lang="en") }} - + {{ common::nav() }}

Spencer Nicholas Whitehead

@@ -19,16 +15,15 @@

Education

-

Ph.D. candidate, Department of Mathematics, Duke University | September 2022 – April 2027 (expected)

+

Ph.D. candidate, Department of Mathematics, Duke University, September 2022 – April 2027 (expected)

  • Currently researching four- and eight-dimensional geometry with Dr. Mark Stern.
  • -
  • Advanced to candidacy March 2025.
  • Member in the Certificate in College Teaching program, to be awarded on graduation.
-

M.Math. in Pure Mathematics (research thesis), University of Waterloo | October 2021 – August 2022

+

M.Math. in Pure Mathematics (research thesis), University of Waterloo, October 2021 – August 2022

  • Supervised by Dr. Benoit Charbonneau.
  • Thesis title: Integrality theorems for symmetric instantons.
  • @@ -36,7 +31,7 @@
-

B.Math. in Pure Mathematics; Minor in East Asian Studies, University of Waterloo | September 2016 – August 2021

+

B.Math. in Pure Mathematics; Minor in East Asian Studies, University of Waterloo, September 2016 – August 2021

  • Recipient of 2021 Alumni Gold Medal for the Faculty of Mathematics.
  • Recipient of 2021 Jessie W.H. Zou Memorial Award for Excellence in Undergraduate Research.
  • @@ -58,8 +53,7 @@

    Software Engineering Intern, ContextLogic LLC, January 2018 – April 2018

      -
    • Worked as a member of the Platform Data team, monitoring the health of policies and shipping estimates.
    • -
    • Conducted shipping time estimate experiments ranging from neutral to gross +2.5% profits.
    • +
    • Conducted shipping time estimate experiments providing up to gross +2.5% profits.
    • Created reports and Grafana dashboards combining data from MongoDB and TreasureData tracking merchant policy effectiveness.
    diff --git a/static/fr/index.html b/templates/fr/index.html similarity index 60% rename from static/fr/index.html rename to templates/fr/index.html index 8d23033..a1e1384 100644 --- a/static/fr/index.html +++ b/templates/fr/index.html @@ -1,11 +1,10 @@ - - - - - Spencer Whitehead - +{% import "common.html" as common %} +{{ common::meta(title="Page d'accueil", lang="fr") }} + +

    To access the English version, click here.

    Ceci est le site web personnel de Spencer Whitehead.

    +

    CV

    diff --git a/templates/fr/resume/index.html b/templates/fr/resume/index.html new file mode 100644 index 0000000..e649ff9 --- /dev/null +++ b/templates/fr/resume/index.html @@ -0,0 +1,150 @@ +{% import "common.html" as common %} +{{ common::meta(title="Spencer Whitehead - CV", lang="fr") }} + + +{{ common::nav() }} + +
    +

    Spencer Nicholas Whitehead

    +
    + Courriel : spencer@firemail.cc
    + Tél. : +1 984 312 9089 +
    +
    + +
    +

    Education

    + +
    +

    Doctorant, départment des mathématiques, Université Duke | septembre 2022 – avril 2027

    +
      +
    • Chercheur de la geometrie de quatre et huit dimensions sous la direction du Pr Mark Stern.
    • +
    • Membre du programme de certificat en enseignant universitaire, qui sera décerné à la reussit au doctorat.
    • +
    +
    + +
    +

    M.Math. en mathématiques pures (thèse du recherche), Université de Waterloo | octobre 2021 – août 2022

    +
      +
    • Sous la direction du Pr Benoit Charbonneau.
    • +
    • Titre du thèse : Integrality theorems for symmetric instantons.
    • +
    +
    + +
    +

    B.Math. en mathématiques pures; mineure en études de l'Asie de l'Est, Université de Waterloo | septembre 2016 – août 2021

    +
      +
    • 2021 Médaille d'or des anciens, Faculty of Mathematics.
    • +
    • 2021 Prix commémoratif Jessie W.H. Zou pour l'excellence en recherche au premier cycle.
    • +
    +
    +
    + +
    +

    Industry Experience

    + +
    +

    Stagiaire en ingénierie logicielle, Citadel Enterprise, janvier 2020 – avril 2020

    +
      +
    • Developpment de pipelines en C++ pour analyser et archiver donnèes de Thompson Reuters.
    • +
    • Traitment d'en haute de 300GB des donnèes de marché par jour pendant la crise de COVID-19.
    • +
    +
    + +
    +

    Stagiaire en ingénierie logicielle, ContextLogic LLC, janvier 2018 – avril 2018

    +
      +
    • Recherche sur les estimates de délais de livraison qui ont généré 2,5% de profits supplémentaires.
    • +
    • Création de reports et tableau de bord Grafana en combinaison des donnèes de MongoDB et TreasureData.
    • +
    +
    + +
    +

    Stagiaire en ingénierie logicielle, Citadel LLC, septembre 2017 – décembre 2017

    +
      +
    • Création et soutien de logiciel de accounting comptabilité pour plus de 100 clients interne.
    • +
    • Conception et implementation des nouveaux formats de réponse, ce qui a reduisé la taille de la réponse 10x et a amelioré la vitesse 5x.
    • +
    +
    +
    + +
    +

    Skills

    +
    +
    Langues
    +
    anglais, français (DELF B2), japonais (niveau B2/C1).
    + +
    Langages de programmation
    +
    C, C++, Python, Sage, Maple, Haskell.
    + +
    Outils informatiques
    +
    sklearn, numpy, (geo)pandas, pytorch, SQL.
    +
    +
    + +
    +

    Leadership et services professionnels

    +

    Délégué syndical, Duke Graduate Students Union, septembre 2025 - à ce jour

    +
      +
    • Mediation de conflits au travail et répresentation des doctorants en procédure de gref.
    • +
    + +

    Président, Section étudiant de l'American Mathematical Society, année universitaire 2024-25

    +
      +
    • Organisation du Triangle Area Graduate Mathematics Seminar avec l'Université NC State et l'UNC Chapel Hill à Duke, février 2025.
    • +
    + +

    Représentant des doctorants, Duke Mathematics Departmental Teaching Committee, novembre 2023 - à ce jour

    +
      +
    • Performed annual interviews and advocated for graduate interests in departmental teaching decisions.
    • +
    +
    + +
    +

    Academic Activity

    + +
    +

    Selected Publications

    +
      +
    • Edidin, Dan, Matthew Satriano, et Spencer Whitehead. "On a smoothness characterization for good moduli spaces." Advances in Mathematics 442 (avril 2024).
    • +
    • Charbonneau, B. et Whitehead, S. "Studying Wythoff and Zometool Constructions using Maple." Maple in Mathematics Education and Research (pp. 65–76), 2020.
    • +
    +
    + +
    +

    Direction

    +

    Duke Math+ program (joint with Biji Wong, Gregory Herschlag), mai - août 2026

    +

    Direction de quatres étudiants dans un projet sur l'application de diffusion maps et apprentissage automatique pour rechercher le gerrymandering.

    + +

    MITACS internship program (joint with Benoit Charbonneau), mai - août 2022

    +

    Direction de deux étudiants dans un projet sur le probleme de packing en bas dimension.

    +
    + +
    +

    Selected Research Presentations

    +
      +
    • [Invité] An asymptotic Nahm transform for Spin(7) instantons. Mathematical Congress of the Americas, Miami, julliet 2025.
    • +
    • Symmetric instantons. (Poster). Geometric Models of Matter, Leeds, août 2024.
    • +
    • Generalized Pythagorean lutes. Bridges 2022, Helsinki, août 2022.
    • +
    • Integrality theorems for symmetric instantons. Union College Mathematics Conference, Schenectady, juin 2022.
    • +
    +
    +
    +

    Selected Teaching Experience

    +

    Chargé de cours MATH 106L (Lab calculus 2), août - décembre 2023, Université Duke

    +
      +
    • Enseignement et coordination d'un group de 18 étudiants.
    • +
    • Gestion d'une équipe de 4 auxiliaires d'enseignement
    • +
    + +

    Auxiliaire d'enseignment CS 246(E) ([Enriched] Object-Oriented Software Development), septembre 2018 - décembre 2019, Université de Waterloo.

    +
      +
    • Delivered weekly tutorial lectures for classes of 50+ students.
    • +
    • Creation des devoirs et gestation d'outils logiciels pour evaluer code d'étudiants
    • +
    +
    +
    + + + +