diff --git a/Cargo.lock b/Cargo.lock index 2ba68fa6e..6dd5ba63b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -369,9 +369,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.97" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "anymap2" @@ -1048,9 +1048,9 @@ dependencies = [ [[package]] name = "auto_impl" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e12882f59de5360c748c4cbf569a042d5fb0eb515f7bea9c1f470b47f6ffbd73" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", @@ -1125,7 +1125,7 @@ dependencies = [ "http-body 0.4.6", "hyper 0.14.32", "itoa 1.0.15", - "matchit", + "matchit 0.7.3", "memchr", "mime", "percent-encoding", @@ -1146,8 +1146,36 @@ checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", "axum-core 0.4.5", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "itoa 1.0.15", + "matchit 0.7.3", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper 1.0.2", + "tower 0.5.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de45108900e1f9b9242f7f2e254aa3e2c029c921c258fe9e6b4217eeebd54288" +dependencies = [ + "axum-core 0.5.2", "base64 0.22.1", "bytes", + "form_urlencoded", "futures-util", "http 1.3.1", "http-body 1.0.1", @@ -1155,7 +1183,7 @@ dependencies = [ "hyper 1.6.0", "hyper-util", "itoa 1.0.15", - "matchit", + "matchit 0.8.4", "memchr", "mime", "multer", @@ -1169,7 +1197,7 @@ dependencies = [ "sha1", "sync_wrapper 1.0.2", "tokio", - "tokio-tungstenite 0.24.0", + "tokio-tungstenite 0.26.2", "tower 0.5.2", "tower-layer", "tower-service", @@ -1214,6 +1242,26 @@ dependencies = [ "tracing", ] +[[package]] +name = "axum-core" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 1.0.2", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "axum-extra" version = "0.9.6" @@ -1252,7 +1300,7 @@ dependencies = [ "hyper 1.6.0", "hyper-util", "pin-project-lite", - "rustls 0.23.25", + "rustls 0.23.26", "rustls-pemfile 2.2.0", "rustls-pki-types", "tokio", @@ -1262,18 +1310,18 @@ dependencies = [ [[package]] name = "axum_session" -version = "0.12.4" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f0035d1d5a70ac279e80a75e60592023ba8b327c929c3827f6c5ed749b9f8b" +checksum = "9cbd59ac11f92412bd86308ce6c9d579e4a6ab627a2c7074afa5e4ef7144900d" dependencies = [ "aes-gcm", "async-trait", - "axum 0.7.9", - "base64 0.21.7", + "axum 0.8.3", + "base64 0.22.1", "bytes", "chrono", "cookie", - "dashmap 5.5.3", + "dashmap 6.1.0", "forwarded-header-value", "futures", "hmac", @@ -1283,8 +1331,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "sqlx", - "thiserror 1.0.69", + "thiserror 2.0.12", "tokio", "tower-layer", "tower-service", @@ -1294,18 +1341,18 @@ dependencies = [ [[package]] name = "axum_session_auth" -version = "0.12.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd4c620e865c92d9fca3ad57efeb4baef271f3ccdba163928002f13489952660" +checksum = "b7302ab5019fe9d4138d91647205ca1f69c54211df7491847f4117efe91d473e" dependencies = [ "anyhow", "async-recursion", "async-trait", - "axum-core 0.4.5", + "axum-core 0.5.2", "axum_session", "bytes", "chrono", - "dashmap 5.5.3", + "dashmap 6.1.0", "futures", "http 1.3.1", "http-body 1.0.1", @@ -1316,6 +1363,18 @@ dependencies = [ "tracing", ] +[[package]] +name = "axum_session_sqlx" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adf2123bc5cda89260f64744043e46e064213a7840b204acb611ad8268f131a7" +dependencies = [ + "async-trait", + "axum_session", + "chrono", + "sqlx", +] + [[package]] name = "backtrace" version = "0.3.74" @@ -1391,10 +1450,12 @@ dependencies = [ [[package]] name = "bigdecimal" -version = "0.3.1" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" +checksum = "1a22f228ab7a1b23027ccc6c350b72868017af7ea8356fbdf19f8d991c690013" dependencies = [ + "autocfg", + "libm", "num-bigint", "num-integer", "num-traits", @@ -2108,9 +2169,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.18" +version = "1.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c" +checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362" dependencies = [ "jobserver", "libc", @@ -2254,9 +2315,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.35" +version = "4.5.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944" +checksum = "2df961d8c8a0d08aa9945718ccf584145eee3f3aa06cddbeac12933781102e04" dependencies = [ "clap_builder", "clap_derive", @@ -2264,9 +2325,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.35" +version = "4.5.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9" +checksum = "132dbda40fb6753878316a489d5a1242a8ef2f0d9e47ba01c951ea8aa7d013a5" dependencies = [ "anstream", "anstyle", @@ -2597,6 +2658,12 @@ dependencies = [ "const-str-proc-macro", ] +[[package]] +name = "const-str" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" + [[package]] name = "const-str-proc-macro" version = "0.3.2" @@ -3131,9 +3198,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.156" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa3a202fc4f3dd6d2ce5a2f87b04fb2becc00f5643ee9c4743ba10777efb314f" +checksum = "3d6354e975ea4ec28033ec3a36fa9baa1a02e3eb22ad740eeb4929370d4f5ba8" dependencies = [ "cc", "cxxbridge-cmd", @@ -3145,9 +3212,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.156" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644bdf46f34f6325783f76a8ad8e737ab995a302d7868b5236a1ba55008883e0" +checksum = "8b4400e26ea4b99417e4263b1ce2d8452404d750ba0809a7bd043072593d430d" dependencies = [ "cc", "codespan-reporting 0.12.0", @@ -3159,9 +3226,9 @@ dependencies = [ [[package]] name = "cxxbridge-cmd" -version = "1.0.156" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8cefbebcb74ed0b4a08b76139e6c29d8884a0bb94d02c6f35de821a14a6e39" +checksum = "31860c98f69fc14da5742c5deaf78983e846c7b27804ca8c8319e32eef421bde" dependencies = [ "clap", "codespan-reporting 0.12.0", @@ -3172,15 +3239,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.156" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604e3eff62e2f27289d618f621491a068330c3c9f8eb06555dabc292c123596e" +checksum = "b0402a66013f3b8d3d9f2d7c9994656cc81e671054822b0728d7454d9231892f" [[package]] name = "cxxbridge-macro" -version = "1.0.156" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "130c3a05501d9c15dedbf08f2ff9af60f8e78422e3dffac1f43e2d83c5b489a1" +checksum = "64c0b38f32d68f3324a981645ee39b2d686af36d03c98a386df3716108c9feae" dependencies = [ "proc-macro2", "quote", @@ -3263,9 +3330,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "data-url" @@ -3529,7 +3596,7 @@ dependencies = [ "ansi-to-html", "ansi-to-tui", "anyhow", - "axum 0.7.9", + "axum 0.8.3", "axum-extra", "axum-server", "brotli 6.0.0", @@ -3594,7 +3661,7 @@ dependencies = [ "rayon", "regex", "reqwest 0.12.15", - "rustls 0.23.25", + "rustls 0.23.26", "serde", "serde_json", "strum 0.26.3", @@ -3619,7 +3686,7 @@ dependencies = [ "walkdir", "wasm-opt", "wasm-split-cli", - "which 7.0.2", + "which 7.0.3", ] [[package]] @@ -3865,7 +3932,7 @@ name = "dioxus-examples" version = "0.6.3" dependencies = [ "async-std", - "axum 0.7.9", + "axum 0.8.3", "base64 0.22.1", "ciborium", "dioxus", @@ -3904,7 +3971,7 @@ version = "0.6.3" dependencies = [ "async-trait", "aws-lc-rs", - "axum 0.7.9", + "axum 0.8.3", "base64 0.22.1", "bytes", "ciborium", @@ -3932,7 +3999,7 @@ dependencies = [ "once_cell", "parking_lot", "pin-project", - "rustls 0.23.25", + "rustls 0.23.26", "serde", "server_fn", "thiserror 1.0.69", @@ -4091,7 +4158,7 @@ dependencies = [ name = "dioxus-liveview" version = "0.6.3" dependencies = [ - "axum 0.7.9", + "axum 0.8.3", "dioxus", "dioxus-cli-config", "dioxus-core", @@ -4200,7 +4267,7 @@ dependencies = [ name = "dioxus-playwright-liveview-test" version = "0.0.1" dependencies = [ - "axum 0.7.9", + "axum 0.8.3", "dioxus", "dioxus-liveview", "tokio", @@ -4229,7 +4296,7 @@ dependencies = [ name = "dioxus-router" version = "0.6.3" dependencies = [ - "axum 0.7.9", + "axum 0.8.3", "base64 0.22.1", "ciborium", "criterion", @@ -4386,7 +4453,7 @@ dependencies = [ name = "dioxus_server_macro" version = "0.6.3" dependencies = [ - "axum 0.7.9", + "axum 0.8.3", "dioxus", "proc-macro2", "quote", @@ -4831,9 +4898,9 @@ dependencies = [ [[package]] name = "escargot" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05a3ac187a16b5382fef8c69fd1bad123c67b7cf3932240a2d43dcdd32cded88" +checksum = "83f351750780493fc33fa0ce8ba3c7d61f9736cfa3b3bb9ee2342643ffe40211" dependencies = [ "log", "once_cell", @@ -5275,9 +5342,10 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "axum 0.7.9", + "axum 0.8.3", "axum_session", "axum_session_auth", + "axum_session_sqlx", "dioxus", "dioxus-cli-config", "dioxus-fullstack", @@ -5322,7 +5390,7 @@ dependencies = [ name = "fullstack-router-example" version = "0.1.0" dependencies = [ - "axum 0.7.9", + "axum 0.8.3", "dioxus", "serde", "tokio", @@ -6396,9 +6464,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" +checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633" dependencies = [ "atomic-waker", "bytes", @@ -6482,11 +6550,11 @@ dependencies = [ [[package]] name = "hashlink" -version = "0.8.4" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.15.2", ] [[package]] @@ -6546,9 +6614,6 @@ name = "heck" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -dependencies = [ - "unicode-segmentation", -] [[package]] name = "heck" @@ -6795,7 +6860,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.8", + "h2 0.4.9", "http 1.3.1", "http-body 1.0.1", "httparse", @@ -6832,7 +6897,7 @@ dependencies = [ "hyper 1.6.0", "hyper-util", "log", - "rustls 0.23.25", + "rustls 0.23.26", "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", @@ -7520,9 +7585,9 @@ dependencies = [ [[package]] name = "jiff" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f33145a5cbea837164362c7bd596106eb7c5198f97d1ba6f6ebb3223952e488" +checksum = "e5ad87c89110f55e4cd4dc2893a9790820206729eaf221555f742d540b0724a0" dependencies = [ "jiff-static", "log", @@ -7533,9 +7598,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43ce13c40ec6956157a3635d97a1ee2df323b263f09ea14165131289cb0f5c19" +checksum = "d076d5b64a7e2fe6f0743f02c43ca4a6725c0f904203bfe276a5b3e793103605" dependencies = [ "proc-macro2", "quote", @@ -7841,9 +7906,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.171" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libfuzzer-sys" @@ -7908,9 +7973,9 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.27.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" dependencies = [ "cc", "pkg-config", @@ -7971,7 +8036,7 @@ dependencies = [ "ahash 0.8.11", "bitflags 2.9.0", "browserslist-rs 0.17.0", - "const-str", + "const-str 0.3.2", "cssparser 0.33.0", "cssparser-color", "dashmap 5.5.3", @@ -8020,9 +8085,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "liquid" @@ -8310,6 +8375,12 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +[[package]] +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + [[package]] name = "maybe-rayon" version = "0.1.1" @@ -9464,9 +9535,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-src" -version = "300.4.2+3.4.1" +version = "300.5.0+3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168ce4e058f975fe43e89d9ccf78ca668601887ae736090aacc23ae353c298e2" +checksum = "e8ce546f549326b0e6052b649198487d91320875da901e7bd11a06d1ee3f9c2f" dependencies = [ "cc", ] @@ -10596,7 +10667,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", - "rustls 0.23.25", + "rustls 0.23.26", "socket2", "thiserror 2.0.12", "tokio", @@ -10615,7 +10686,7 @@ dependencies = [ "rand 0.9.0", "ring", "rustc-hash 2.1.1", - "rustls 0.23.25", + "rustls 0.23.26", "rustls-pki-types", "slab", "thiserror 2.0.12", @@ -10878,9 +10949,9 @@ dependencies = [ [[package]] name = "ravif" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" +checksum = "d6a5f31fcf7500f9401fea858ea4ab5525c99f2322cfcee732c0e6c74208c0c6" dependencies = [ "avif-serialize", "imgref", @@ -11115,7 +11186,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.8", + "h2 0.4.9", "http 1.3.1", "http-body 1.0.1", "http-body-util", @@ -11133,7 +11204,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.25", + "rustls 0.23.26", "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", @@ -11417,7 +11488,7 @@ dependencies = [ "bitflags 2.9.0", "errno", "libc", - "linux-raw-sys 0.9.3", + "linux-raw-sys 0.9.4", "windows-sys 0.59.0", ] @@ -11449,9 +11520,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.25" +version = "0.23.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "822ee9188ac4ec04a2f0531e55d035fb2de73f18b41a63c70c2712503b6fb13c" +checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0" dependencies = [ "aws-lc-rs", "log", @@ -12005,12 +12076,14 @@ dependencies = [ [[package]] name = "server_fn" -version = "0.7.8" +version = "0.8.0-rc1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d05a9e3fd8d7404985418db38c6617cc793a1a27f398d4fbc9dfe8e41b804e6" +checksum = "4b279618eba9bf2298336a6b5f72c84bee46a5a76ad048a5763b552d69393988" dependencies = [ - "axum 0.7.9", + "axum 0.8.3", + "base64 0.22.1", "bytes", + "const-str 0.5.7", "const_format", "dashmap 6.1.0", "futures", @@ -12023,6 +12096,7 @@ dependencies = [ "once_cell", "pin-project-lite", "reqwest 0.12.15", + "rustversion", "send_wrapper", "serde", "serde_json", @@ -12030,6 +12104,8 @@ dependencies = [ "server_fn_macro_default", "thiserror 2.0.12", "throw_error", + "tokio", + "tokio-tungstenite 0.26.2", "tower 0.5.2", "tower-layer", "url", @@ -12042,23 +12118,24 @@ dependencies = [ [[package]] name = "server_fn_macro" -version = "0.7.8" +version = "0.8.0-rc1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504b35e883267b3206317b46d02952ed7b8bf0e11b2e209e2eb453b609a5e052" +checksum = "40c805d4055915c94d1b168bec37afc9fadcfd7c17798c63259e303667076a67" dependencies = [ "const_format", "convert_case 0.6.0", "proc-macro2", "quote", + "rustc_version 0.4.1", "syn 2.0.100", "xxhash-rust", ] [[package]] name = "server_fn_macro_default" -version = "0.7.8" +version = "0.8.0-rc1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb8b274f568c94226a8045668554aace8142a59b8bca5414ac5a79627c825568" +checksum = "e63085deb77b447034fd865a7a054c0a234bd1ce93c9cf13dd02e0138773930f" dependencies = [ "server_fn_macro", "syn 2.0.100", @@ -12320,6 +12397,9 @@ name = "smallvec" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +dependencies = [ + "serde", +] [[package]] name = "smartstring" @@ -12495,21 +12575,11 @@ dependencies = [ "der", ] -[[package]] -name = "sqlformat" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" -dependencies = [ - "nom", - "unicode_categories", -] - [[package]] name = "sqlx" -version = "0.7.4" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" +checksum = "14e22987355fbf8cfb813a0cf8cd97b1b4ec834b94dbd759a9e8679d41fabe83" dependencies = [ "sqlx-core", "sqlx-macros", @@ -12520,77 +12590,73 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.7.4" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" +checksum = "55c4720d7d4cd3d5b00f61d03751c685ad09c33ae8290c8a2c11335e0604300b" dependencies = [ - "ahash 0.8.11", - "atoi", + "base64 0.22.1", "bigdecimal", "bit-vec 0.6.3", - "byteorder", + "bstr", "bytes", "chrono", "crc 3.2.1", "crossbeam-queue", "either", - "event-listener 2.5.3", - "futures-channel", + "event-listener 5.4.0", "futures-core", "futures-intrusive", "futures-io", "futures-util", + "hashbrown 0.15.2", "hashlink", - "hex", "indexmap 2.9.0", + "ipnet", "ipnetwork", "log", "mac_address", "memchr", "native-tls", "once_cell", - "paste", "percent-encoding", "rust_decimal", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", + "rustls 0.23.26", "serde", "serde_json", "sha2", "smallvec", - "sqlformat", - "thiserror 1.0.69", + "thiserror 2.0.12", "time", "tokio", "tokio-stream", "tracing", "url", "uuid", - "webpki-roots 0.25.4", + "webpki-roots 0.26.8", ] [[package]] name = "sqlx-macros" -version = "0.7.4" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" +checksum = "175147fcb75f353ac7675509bc58abb2cb291caf0fd24a3623b8f7e3eb0a754b" dependencies = [ "proc-macro2", "quote", "sqlx-core", "sqlx-macros-core", - "syn 1.0.109", + "syn 2.0.100", ] [[package]] name = "sqlx-macros-core" -version = "0.7.4" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" +checksum = "1cde983058e53bfa75998e1982086c5efe3c370f3250bf0357e344fa3352e32b" dependencies = [ "dotenvy", "either", - "heck 0.4.1", + "heck 0.5.0", "hex", "once_cell", "proc-macro2", @@ -12602,7 +12668,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 1.0.109", + "syn 2.0.100", "tempfile", "tokio", "url", @@ -12610,12 +12676,12 @@ dependencies = [ [[package]] name = "sqlx-mysql" -version = "0.7.4" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" +checksum = "847d2e5393a4f39e47e4f36cab419709bc2b83cbe4223c60e86e1471655be333" dependencies = [ "atoi", - "base64 0.21.7", + "base64 0.22.1", "bigdecimal", "bitflags 2.9.0", "byteorder", @@ -12648,7 +12714,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 1.0.69", + "thiserror 2.0.12", "time", "tracing", "uuid", @@ -12657,12 +12723,12 @@ dependencies = [ [[package]] name = "sqlx-postgres" -version = "0.7.4" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" +checksum = "cc35947a541b9e0a2e3d85da444f1c4137c13040267141b208395a0d0ca4659f" dependencies = [ "atoi", - "base64 0.21.7", + "base64 0.22.1", "bigdecimal", "bit-vec 0.6.3", "bitflags 2.9.0", @@ -12673,12 +12739,12 @@ dependencies = [ "etcetera", "futures-channel", "futures-core", - "futures-io", "futures-util", "hex", "hkdf", "hmac", "home", + "ipnet", "ipnetwork", "itoa 1.0.15", "log", @@ -12695,7 +12761,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 1.0.69", + "thiserror 2.0.12", "time", "tracing", "uuid", @@ -12704,9 +12770,9 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.7.4" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" +checksum = "6c48291dac4e5ed32da0927a0b981788be65674aeb62666d19873ab4289febde" dependencies = [ "atoi", "chrono", @@ -12720,11 +12786,12 @@ dependencies = [ "log", "percent-encoding", "serde", + "serde_urlencoded", "sqlx-core", + "thiserror 2.0.12", "time", "tracing", "url", - "urlencoding", "uuid", ] @@ -14002,9 +14069,9 @@ dependencies = [ [[package]] name = "throw_error" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ef8bf264c6ae02a065a4a16553283f0656bd6266fc1fcb09fd2e6b5e91427b" +checksum = "41e42a6afdde94f3e656fae18f837cb9bbe500a5ac5de325b09f3ec05b9c28e3" dependencies = [ "pin-project-lite", ] @@ -14215,7 +14282,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ - "rustls 0.23.25", + "rustls 0.23.26", "tokio", ] @@ -14240,7 +14307,7 @@ dependencies = [ "futures-util", "log", "native-tls", - "rustls 0.23.25", + "rustls 0.23.26", "tokio", "tokio-native-tls", "tungstenite 0.23.0", @@ -14248,14 +14315,15 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.24.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" +checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", + "rustls 0.23.26", "tokio", - "tungstenite 0.24.0", + "tungstenite 0.26.2", ] [[package]] @@ -14656,19 +14724,18 @@ dependencies = [ [[package]] name = "tungstenite" -version = "0.24.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" +checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" dependencies = [ - "byteorder", "bytes", "data-encoding", "http 1.3.1", "httparse", "log", - "rand 0.8.5", + "rand 0.9.0", "sha1", - "thiserror 1.0.69", + "thiserror 2.0.12", "utf-8", ] @@ -14919,12 +14986,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "unicode_categories" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" - [[package]] name = "universal-hash" version = "0.5.1" @@ -14962,7 +15023,7 @@ dependencies = [ "base64 0.22.1", "log", "once_cell", - "rustls 0.23.25", + "rustls 0.23.26", "rustls-pki-types", "socks", "url", @@ -16003,13 +16064,13 @@ dependencies = [ [[package]] name = "which" -version = "7.0.2" +version = "7.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2774c861e1f072b3aadc02f8ba886c26ad6321567ecc294c935434cad06f1283" +checksum = "24d643ce3fd3e5b54854602a080f34fb10ab75e0b813ee32d00ca2b44fa74762" dependencies = [ "either", "env_home", - "rustix 0.38.44", + "rustix 1.0.5", "winsafe", ] @@ -16960,9 +17021,9 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4" +checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" [[package]] name = "xmlwriter" diff --git a/Cargo.toml b/Cargo.toml index ded973956..35d067953 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -208,7 +208,7 @@ tauri-utils = { version = "=2.1.1" } tauri-bundler = { version = "=2.2.3" } lru = "0.12.2" async-trait = "0.1.77" -axum = { version = "0.7.0", default-features = false } +axum = "0.8.1" axum-server = { version = "0.7.1", default-features = false } tower = "0.4.13" http = "1.0.0" @@ -222,8 +222,9 @@ serde = "1.0.61" syn = "2.0" quote = "1.0" proc-macro2 = "1.0" -axum_session = "0.12.1" -axum_session_auth = "0.12.1" +axum_session = "0.16.0" +axum_session_auth = "0.16.0" +axum_session_sqlx = "0.5.0" axum-extra = "0.9.2" reqwest = "0.12.5" owo-colors = "4.0.0" diff --git a/examples/fullstack-auth/Cargo.toml b/examples/fullstack-auth/Cargo.toml index 34654a794..69e630eb5 100644 --- a/examples/fullstack-auth/Cargo.toml +++ b/examples/fullstack-auth/Cargo.toml @@ -16,7 +16,7 @@ axum = { workspace = true, optional = true } tokio = { workspace = true, features = ["full"], optional = true } tower-http = { workspace = true, features = ["auth"], optional = true } async-trait = { version = "0.1.71", optional = true } -sqlx = { version = "0.7.0", features = [ +sqlx = { version = "0.8.2", features = [ "macros", "migrate", "postgres", @@ -34,12 +34,15 @@ anyhow = { workspace = true } [dependencies.axum_session] workspace = true -features = ["sqlite-rustls"] optional = true [dependencies.axum_session_auth] workspace = true -features = ["sqlite-rustls"] +optional = true + +[dependencies.axum_session_sqlx] +workspace = true +features = ["sqlite"] optional = true [features] @@ -54,6 +57,7 @@ server = [ "sqlx", "axum_session", "axum_session_auth", + "axum_session_sqlx", "http", "tower", ] diff --git a/examples/fullstack-auth/src/auth.rs b/examples/fullstack-auth/src/auth.rs index b97168628..a11ef7053 100644 --- a/examples/fullstack-auth/src/auth.rs +++ b/examples/fullstack-auth/src/auth.rs @@ -5,8 +5,9 @@ use axum::{ routing::get, Router, }; -use axum_session::{SessionConfig, SessionLayer, SessionSqlitePool, SessionStore}; +use axum_session::{SessionConfig, SessionLayer, SessionStore}; use axum_session_auth::*; +use axum_session_sqlx::SessionSqlitePool; use core::pin::Pin; use dioxus_fullstack::prelude::*; use serde::{Deserialize, Serialize}; @@ -192,12 +193,8 @@ pub async fn connect_to_database() -> SqlitePool { .unwrap() } -pub type Session = axum_session_auth::AuthSession< - crate::auth::User, - i64, - axum_session_auth::SessionSqlitePool, - sqlx::SqlitePool, ->; +pub type Session = + axum_session_auth::AuthSession; pub async fn get_session() -> Result { extract::() diff --git a/examples/fullstack-auth/src/main.rs b/examples/fullstack-auth/src/main.rs index 7d1037d20..d38a5a900 100644 --- a/examples/fullstack-auth/src/main.rs +++ b/examples/fullstack-auth/src/main.rs @@ -22,7 +22,7 @@ fn main() { use axum_session::SessionConfig; use axum_session::SessionStore; use axum_session_auth::AuthConfig; - use axum_session_auth::SessionSqlitePool; + use axum_session_sqlx::SessionSqlitePool; tokio::runtime::Runtime::new() .unwrap() .block_on(async move { @@ -49,7 +49,7 @@ fn main() { axum_session_auth::AuthSessionLayer::< crate::auth::User, i64, - axum_session_auth::SessionSqlitePool, + SessionSqlitePool, sqlx::SqlitePool, >::new(Some(pool)) .with_config(auth_config), diff --git a/packages/cli/src/serve/proxy.rs b/packages/cli/src/serve/proxy.rs index 3c29f2415..1f496d9ec 100644 --- a/packages/cli/src/serve/proxy.rs +++ b/packages/cli/src/serve/proxy.rs @@ -73,7 +73,7 @@ pub(crate) fn add_proxy(mut router: Router, proxy: &WebProxyConfig) -> Result String { let backend_router = Router::new().route( - "/*path", + "/{*path}", any(|request: axum::extract::Request| async move { format!("backend: {}", request.uri()) }), diff --git a/packages/cli/src/serve/server.rs b/packages/cli/src/serve/server.rs index f30e0361b..df9ec8489 100644 --- a/packages/cli/src/serve/server.rs +++ b/packages/cli/src/serve/server.rs @@ -211,8 +211,8 @@ impl WebServer { } self.send_shutdown().await; - for socket in self.hot_reload_sockets.drain(..) { - _ = socket.close().await; + for mut socket in self.hot_reload_sockets.drain(..) { + _ = socket.send(Message::Close(None)).await; } } @@ -302,7 +302,11 @@ impl WebServer { let mut i = 0; while i < self.hot_reload_sockets.len() { let socket = &mut self.hot_reload_sockets[i]; - if socket.send(Message::Text(msg.clone())).await.is_err() { + if socket + .send(Message::Text(msg.clone().into())) + .await + .is_err() + { self.hot_reload_sockets.remove(i); } else { i += 1; @@ -343,7 +347,7 @@ impl WebServer { async fn send_devserver_message(&mut self, msg: DevserverMsg) { for socket in self.hot_reload_sockets.iter_mut() { _ = socket - .send(Message::Text(serde_json::to_string(&msg).unwrap())) + .send(Message::Text(serde_json::to_string(&msg).unwrap().into())) .await; } } @@ -393,7 +397,11 @@ async fn devserver_mainloop( // If we're not using rustls, just use regular axum if https_cfg.enabled != Some(true) { - axum::serve(listener.try_into().unwrap(), router.into_make_service()).await?; + axum::serve( + tokio::net::TcpListener::from_std(listener).unwrap(), + router.into_make_service(), + ) + .await?; return Ok(()); } @@ -434,7 +442,7 @@ fn build_devserver_router( // For fullstack, liveview, and server, forward all requests to the inner server let address = fullstack_address.unwrap(); tracing::debug!("Proxying requests to fullstack server at {address}"); - router = router.nest_service("/",super::proxy::proxy_to( + router = router.fallback_service(super::proxy::proxy_to( format!("http://{address}").parse().unwrap(), true, |error| { @@ -461,8 +469,11 @@ fn build_devserver_router( .unwrap_or_default() .trim_matches('/') ); - - router = router.nest_service(&base_path, build_serve_dir(args, krate)); + if base_path == "/" { + router = router.fallback_service(build_serve_dir(args, krate)); + } else { + router = router.nest_service(&base_path, build_serve_dir(args, krate)); + } } // Setup middleware to intercept html requests if the build status is "Building" @@ -755,6 +766,6 @@ impl SharedStatus { async fn send_to(&self, socket: &mut WebSocket) -> Result<(), axum::Error> { let msg = serde_json::to_string(&self.get()).unwrap(); - socket.send(Message::Text(msg)).await + socket.send(Message::Text(msg.into())).await } } diff --git a/packages/fullstack/Cargo.toml b/packages/fullstack/Cargo.toml index b192cb5f7..3fdf4a6ca 100644 --- a/packages/fullstack/Cargo.toml +++ b/packages/fullstack/Cargo.toml @@ -12,7 +12,7 @@ resolver = "2" [dependencies] # server functions -server_fn = { version = "0.7.3", features = ["json", "url", "browser"], default-features = false } +server_fn = { version = "0.8.0-rc1", features = ["browser"], default-features = false } dioxus_server_macro = { workspace = true } # axum diff --git a/packages/fullstack/src/axum_core.rs b/packages/fullstack/src/axum_core.rs index ba752d98e..8b4c966db 100644 --- a/packages/fullstack/src/axum_core.rs +++ b/packages/fullstack/src/axum_core.rs @@ -160,8 +160,6 @@ async fn handle_server_fns_inner( additional_context: ContextProviders, req: Request, ) -> impl IntoResponse { - use server_fn::middleware::Service; - let path_string = path.to_string(); let (parts, body) = req.into_parts(); diff --git a/packages/liveview/src/adapters/axum_adapter.rs b/packages/liveview/src/adapters/axum_adapter.rs index 4e819d512..a57a97247 100644 --- a/packages/liveview/src/adapters/axum_adapter.rs +++ b/packages/liveview/src/adapters/axum_adapter.rs @@ -25,12 +25,12 @@ fn transform_rx(message: Result) -> Result, LiveVi message .map_err(|_| LiveViewError::SendingFailed)? .into_text() - .map(|s| s.into_bytes()) + .map(|s| s.as_str().into()) .map_err(|_| LiveViewError::SendingFailed) } async fn transform_tx(message: Vec) -> Result { - Ok(Message::Binary(message)) + Ok(Message::Binary(message.into())) } impl LiveviewRouter for Router { diff --git a/packages/playwright-tests/package-lock.json b/packages/playwright-tests/package-lock.json index 862788821..81d3878ba 100644 --- a/packages/playwright-tests/package-lock.json +++ b/packages/playwright-tests/package-lock.json @@ -9,22 +9,23 @@ "version": "1.0.0", "license": "ISC", "devDependencies": { - "@playwright/test": "^1.42.1" + "@playwright/test": "^1.51.0" } }, "node_modules/@playwright/test": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.42.1.tgz", - "integrity": "sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.51.0.tgz", + "integrity": "sha512-dJ0dMbZeHhI+wb77+ljx/FeC8VBP6j/rj9OAojO08JI80wTZy6vRk9KvHKiDCUh4iMpEiseMgqRBIeW+eKX6RA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright": "1.42.1" + "playwright": "1.51.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/fsevents": { @@ -33,6 +34,7 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -42,33 +44,35 @@ } }, "node_modules/playwright": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.42.1.tgz", - "integrity": "sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.51.0.tgz", + "integrity": "sha512-442pTfGM0xxfCYxuBa/Pu6B2OqxqqaYq39JS8QDMGThUvIOCd6s0ANDog3uwA0cHavVlnTQzGCN7Id2YekDSXA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.42.1" + "playwright-core": "1.51.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" }, "optionalDependencies": { "fsevents": "2.3.2" } }, "node_modules/playwright-core": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.42.1.tgz", - "integrity": "sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.51.0.tgz", + "integrity": "sha512-x47yPE3Zwhlil7wlNU/iktF7t2r/URR3VLbH6EknJd/04Qc/PSJ0EY3CMXipmglLG+zyRxW6HNo2EGbKLHPWMg==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } } } diff --git a/packages/playwright-tests/package.json b/packages/playwright-tests/package.json index abb388e3b..7eb106eb1 100644 --- a/packages/playwright-tests/package.json +++ b/packages/playwright-tests/package.json @@ -12,6 +12,6 @@ "author": "", "license": "ISC", "devDependencies": { - "@playwright/test": "^1.42.1" + "@playwright/test": "^1.51.0" } } diff --git a/packages/server-macro/Cargo.toml b/packages/server-macro/Cargo.toml index 71cf5b84a..7dcb221c5 100644 --- a/packages/server-macro/Cargo.toml +++ b/packages/server-macro/Cargo.toml @@ -16,7 +16,7 @@ description = "Server function macros for Dioxus" proc-macro2 = "^1.0.63" quote = "^1.0.26" syn = { workspace = true, features = ["full"] } -server_fn_macro = { version = "0.7.3" } +server_fn_macro = "0.8.0-rc1" [dev-dependencies] dioxus = { workspace = true, features = ["fullstack"] } diff --git a/packages/server-macro/src/lib.rs b/packages/server-macro/src/lib.rs index 66e9b3033..b8b3d2b0a 100644 --- a/packages/server-macro/src/lib.rs +++ b/packages/server-macro/src/lib.rs @@ -6,12 +6,8 @@ //! See the [server_fn_macro] crate for more information. use proc_macro::TokenStream; -use quote::quote; -use server_fn_macro::server_macro_impl; -use syn::{ - __private::ToTokens, - parse::{Parse, ParseStream}, -}; +use server_fn_macro::ServerFnCall; +use syn::{__private::ToTokens, parse_quote}; /// Declares that a function is a [server function](https://docs.rs/server_fn/). /// This means that its body will only run on the server, i.e., when the `ssr` @@ -146,107 +142,17 @@ use syn::{ /// } /// ``` #[proc_macro_attribute] -pub fn server(args: proc_macro::TokenStream, s: TokenStream) -> TokenStream { +pub fn server(args: proc_macro::TokenStream, body: TokenStream) -> TokenStream { // If there is no input codec, use json as the default - let args = default_json_codec(args); - - match server_macro_impl( - args.into(), - s.into(), - Some(syn::parse_quote!(server_fn)), - "/api", - None, - None, - ) { - Err(e) => e.to_compile_error().into(), - Ok(s) => s.to_token_stream().into(), - } -} - -fn default_json_codec(args: TokenStream) -> TokenStream { - // Try to parse the args - if let Err(err) = syn::parse::(args.clone()) { - return err.to_compile_error().into(); - } - let Ok(args_metadata) = syn::parse::(args.clone()) else { - // If we fail to parse the args, forward them directly to the macro for diagnostics - return args; + let parsed = match ServerFnCall::parse("/api", args.into(), body.into()) { + Ok(parsed) => parsed, + Err(e) => return e.to_compile_error().into(), }; - let mut new_tokens = args; - // Make sure the args always end with a comma - if args_metadata.requires_trailing_comma { - let default_comma: TokenStream = quote! {,}.into(); - new_tokens.extend(default_comma); - } - - // If the user didn't override the input codec, default to Json - if !args_metadata.manual_input { - let default_input: TokenStream = quote! { - input = server_fn::codec::Json, - } - .into(); - new_tokens.extend(default_input); - } - - // If the user didn't override the output codec, default to Json - if !args_metadata.manual_output { - let default_output: TokenStream = quote! { - output = server_fn::codec::Json, - } - .into(); - new_tokens.extend(default_output); - } - - new_tokens -} - -struct ServerFnArgsMetadata { - manual_input: bool, - manual_output: bool, - requires_trailing_comma: bool, -} - -impl Parse for ServerFnArgsMetadata { - fn parse(input: ParseStream) -> syn::Result { - let mut manual_input = false; - let mut manual_output = false; - let mut requires_trailing_comma = false; - let mut take_comma = |input: &ParseStream| { - let comma: Option = input.parse().ok(); - requires_trailing_comma = comma.is_none(); - }; - - while !input.is_empty() { - // Ignore legacy ident and string args - if input.peek(syn::Ident) && !input.peek2(syn::Token![=]) { - input.parse::()?; - take_comma(&input); - continue; - } - if input.peek(syn::LitStr) && !input.peek2(syn::Token![=]) { - input.parse::()?; - take_comma(&input); - continue; - } - - let ident: syn::Ident = input.parse()?; - let _: syn::Token![=] = input.parse()?; - let _: syn::Expr = input.parse()?; - - if ident == "input" { - manual_input = true; - } else if ident == "output" { - manual_output = true; - } - - take_comma(&input); - } - - Ok(Self { - manual_input, - manual_output, - requires_trailing_comma, - }) - } + parsed + .default_input_encoding(Some(parse_quote!(server_fn::codec::Json))) + .default_output_encoding(Some(parse_quote!(server_fn::codec::Json))) + .default_server_fn_path(Some(parse_quote!(server_fn))) + .to_token_stream() + .into() }