diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 60a4c09..54f7546 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,13 +34,13 @@ jobs: run: cargo binstall -y --force cargo-deny cargo-machete cargo-sort - name: Lint - run: cargo clippy --locked + run: cargo clippy --all-features --all-targets --locked - name: Check dependencies run: cargo deny check - name: Check unused dependencies - run: cargo machete + run: cargo machete --with-metadata - name: Check manifest formatting run: cargo sort --workspace --check diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f114ad4..ef9e768 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,6 +12,7 @@ repos: hooks: - id: fmt - id: clippy + args: ['--all-targets', '--all-features', '--', '-D', 'warnings'] - repo: https://github.com/EmbarkStudios/cargo-deny rev: 0.18.5 @@ -28,6 +29,7 @@ repos: name: cargo-machete language: rust entry: cargo machete + args: ['--with-metadata'] types: [file, toml] files: Cargo\.(toml|lock) pass_filenames: false diff --git a/Cargo.lock b/Cargo.lock index ed9c1eb..4f2ba40 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -400,9 +400,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "arrayvec" @@ -460,6 +460,22 @@ dependencies = [ "syn 2.0.104", ] +[[package]] +name = "async-tungstenite" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee88b4c88ac8c9ea446ad43498955750a4bbe64c4392f21ccfe5d952865e318f" +dependencies = [ + "atomic-waker", + "futures-core", + "futures-io", + "futures-task", + "futures-util", + "log", + "pin-project-lite", + "tungstenite 0.27.0", +] + [[package]] name = "atoi" version = "2.0.0" @@ -568,6 +584,29 @@ dependencies = [ "tracing", ] +[[package]] +name = "axum-extra" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9963ff19f40c6102c76756ef0a46004c0d58957d87259fc9208ff8441c12ab96" +dependencies = [ + "axum", + "axum-core", + "bytes", + "futures-util", + "headers", + "http 1.3.1", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "serde_core", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "axum-macros" version = "0.5.0" @@ -768,6 +807,9 @@ name = "bytes" version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +dependencies = [ + "serde", +] [[package]] name = "bytestring" @@ -801,6 +843,17 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + [[package]] name = "cfg-if" version = "1.0.1" @@ -819,6 +872,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "charset" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f927b07c74ba84c7e5fe4db2baeb3e996ab2688992e39ac68ce3220a677c7e" +dependencies = [ + "base64 0.22.1", + "encoding_rs", +] + [[package]] name = "chrono" version = "0.4.42" @@ -983,9 +1046,9 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const-serialize" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c02a1f46ffe1c6f05edf568a7d8e2ab477c75a6ec5f33d2b83ce54fc3f096ca" +checksum = "52644987e6357cb7d5bf2a0724a3e847e95292174449818a3ec2f534f98dab97" dependencies = [ "const-serialize-macro", "serde", @@ -993,9 +1056,9 @@ dependencies = [ [[package]] name = "const-serialize-macro" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1da74b91de7c3426afaed28ed514bc4cd39821eeecf9f32dc424023310a63ae4" +checksum = "7c7a0c525c8d315f5195430912463f41dd5e274853b41b8bdc967f2762ad7cf6" dependencies = [ "proc-macro2", "quote", @@ -1008,6 +1071,12 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "041fbfcf8e7054df725fb9985297e92422cdc80fcf313665f5ca3d761bb63f4c" +[[package]] +name = "const-str" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4d34b8f066904ed7cfa4a6f9ee96c3214aa998cb44b69ca20bd2054f47402ed" + [[package]] name = "const_format" version = "0.2.34" @@ -1034,6 +1103,15 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f67855af358fcb20fac58f9d714c94e2b228fe5694c1c9b4ead4a366343eda1b" +[[package]] +name = "content_disposition" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc14a88e1463ddd193906285abe5c360c7e8564e05ccc5d501755f7fbc9ca9c" +dependencies = [ + "charset", +] + [[package]] name = "convert_case" version = "0.6.0" @@ -1081,6 +1159,24 @@ dependencies = [ "version_check", ] +[[package]] +name = "cookie_store" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eac901828f88a5241ee0600950ab981148a18f2f756900ffba1b125ca6a3ef9" +dependencies = [ + "cookie 0.18.1", + "document-features", + "idna", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -1367,9 +1463,9 @@ dependencies = [ [[package]] name = "dioxus" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c5e29983134d7b38f2d4578afc649ce5df744d9a7e13a1b1a983376f1056f41" +checksum = "1131726405073c771d935bfe494df678c429cfbc0b88d2809de02abc116c5094" dependencies = [ "dioxus-asset-resolver", "dioxus-cli-config", @@ -1380,6 +1476,7 @@ dependencies = [ "dioxus-devtools", "dioxus-document", "dioxus-fullstack", + "dioxus-fullstack-macro", "dioxus-history", "dioxus-hooks", "dioxus-html", @@ -1391,7 +1488,6 @@ dependencies = [ "dioxus-ssr", "dioxus-stores", "dioxus-web", - "dioxus_server_macro", "manganis", "serde", "subsecond", @@ -1400,35 +1496,40 @@ dependencies = [ [[package]] name = "dioxus-asset-resolver" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b6782436b323a84b4d9f90cf2365b35a1cdb918191221f71865dcc2e70016b6" +checksum = "5c83e98aa114918ea686ed6066a1def700d7ea15134f7e4071a5ebdf34744fd9" dependencies = [ + "dioxus-cli-config", + "http 1.3.1", + "infer", "jni", "js-sys", "manganis-core", "ndk", "ndk-context", "ndk-sys", + "percent-encoding", "thiserror 2.0.17", + "tokio", "wasm-bindgen-futures", "web-sys", ] [[package]] name = "dioxus-cli-config" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8cec511d8a05ed60071bb0088f07ec40325faf27a608fa19d65befdd842b57f" +checksum = "d9af6002ed49ea4c6bf710a38577b70eea1378e77a0e061a13b4ea82846fe2d7" dependencies = [ "wasm-bindgen", ] [[package]] name = "dioxus-config-macro" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0711887c38dcebd391bfa5a0759c79ffcc5b0c21ee120cf3d99c42346eb626d" +checksum = "4b9d17791dc5abd55fd215d874029d2c9991523329e3c130ad7acc5ad61b8cd0" dependencies = [ "proc-macro2", "quote", @@ -1436,16 +1537,17 @@ dependencies = [ [[package]] name = "dioxus-config-macros" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349cae693022df3af125c9f794aef0ffec97f2e1d01c252d883149e7ca7a0324" +checksum = "31c228fb7feb656af145893939c5d7dcc8c6ec1315c07e46a3d1d9e61f490e8f" [[package]] name = "dioxus-core" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07b55eccaa5c4f35f1755ea18a5716fe8ecba60ff1f25c52be6ceda2e6a52eb6" +checksum = "100ab706b1eb213930944c05b10cffad1c6cee0a5003d8277cbb8b56576cfe6c" dependencies = [ + "anyhow", "const_format", "dioxus-core-types", "futures-channel", @@ -1464,9 +1566,9 @@ dependencies = [ [[package]] name = "dioxus-core-macro" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9280f81c8d58863b3077f1b7ca097e2f2b28d30a5aa02a656fbf72b0aee1bd9f" +checksum = "61eea01e7d86a9e2e60696465287db384f35cbba031fb852c2f2535c102efa00" dependencies = [ "convert_case 0.8.0", "dioxus-rsx", @@ -1477,20 +1579,22 @@ dependencies = [ [[package]] name = "dioxus-core-types" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0ef2a94b4ceb8f7a39f56a539d07e82b0358a49a0b95028ad48635975df29d7" +checksum = "31053062fb7c4c1fbd7836fbc5481d1d8c27e4aa5282936bdf03d51ac20b27b8" [[package]] name = "dioxus-devtools" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60af4e129968ab1713471ed0b29c3eefa4e8e09252429487d7a581e93c7ecfe5" +checksum = "f89271fc1db803ffca037886418e6449bcf2c15bbdd4582abf01f40a215f5529" dependencies = [ "dioxus-cli-config", "dioxus-core", "dioxus-devtools-types", "dioxus-signals", + "futures-channel", + "futures-util", "serde", "serde_json", "subsecond", @@ -1502,9 +1606,9 @@ dependencies = [ [[package]] name = "dioxus-devtools-types" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64274704b6a8d018112473cdce0b3db1dcccfa79bde445223592fe4e396ff5ef" +checksum = "d2b3e4222c4f21d6a5dc992b0a0467bf72c35e2890744990ab429cd97cd18335" dependencies = [ "dioxus-core", "serde", @@ -1513,9 +1617,9 @@ dependencies = [ [[package]] name = "dioxus-document" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11c7f4ff62a842c026c74b9782dd9117a2310ec52de69d858a9e54b96b3bac15" +checksum = "be762853a5d9414562e93cf72d0d10dd43f8099d1fb49b5208b54b999473aff3" dependencies = [ "dioxus-core", "dioxus-core-macro", @@ -1532,66 +1636,114 @@ dependencies = [ [[package]] name = "dioxus-fullstack" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819981e8aa811d9b81ac3135a8a74db2f1fa7510473c3251f98eceb2c710632e" +checksum = "4fa3b561d8837da6892b3543c2ed4b1b232ce68ce25bb79c195128f63ef0fb1a" dependencies = [ + "anyhow", + "async-stream", + "async-tungstenite", + "axum", + "axum-core", + "axum-extra", "base64 0.22.1", "bytes", "ciborium", + "const-str 0.7.0", + "const_format", + "content_disposition", + "derive_more", + "dioxus-asset-resolver", + "dioxus-cli-config", "dioxus-core", - "dioxus-devtools", - "dioxus-document", - "dioxus-fullstack-hooks", - "dioxus-fullstack-protocol", - "dioxus-history", - "dioxus-interpreter-js", - "dioxus-server", - "dioxus-web", - "dioxus_server_macro", + "dioxus-fullstack-core", + "dioxus-fullstack-macro", + "dioxus-hooks", + "dioxus-html", + "dioxus-signals", + "form_urlencoded", + "futures", "futures-channel", "futures-util", - "generational-box", + "gloo-net", + "headers", "http 1.3.1", + "http-body", + "http-body-util", + "inventory", + "js-sys", + "mime", + "pin-project", + "reqwest", + "rustversion", + "send_wrapper", "serde", - "server_fn", + "serde_json", + "serde_qs", + "serde_urlencoded", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tokio-tungstenite 0.27.0", + "tokio-util", + "tower", + "tower-http", + "tower-layer", "tracing", + "tungstenite 0.27.0", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", "web-sys", + "xxhash-rust", ] [[package]] -name = "dioxus-fullstack-hooks" -version = "0.7.0-rc.0" +name = "dioxus-fullstack-core" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef5fad61b2821b8f26c8498834920d617449d0b866aaac01b95284237f76e9d5" +checksum = "8e5e5b2a384abe1c4ba5572bba5495a1566f533e4f0bf281cc731f5a5642831b" dependencies = [ + "anyhow", + "axum-core", + "base64 0.22.1", + "ciborium", "dioxus-core", - "dioxus-fullstack-protocol", + "dioxus-document", "dioxus-history", "dioxus-hooks", "dioxus-signals", "futures-channel", + "futures-util", + "generational-box", + "http 1.3.1", + "inventory", "serde", + "serde_json", + "thiserror 2.0.17", + "tracing", ] [[package]] -name = "dioxus-fullstack-protocol" -version = "0.7.0-rc.0" +name = "dioxus-fullstack-macro" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2f266ad9e20be14b8899f2133dd942131f03e6749650e65e2aaec2c7f8a4bc1" +checksum = "6259bb298e7c5a6ca2530bcb1de8081005aeb88a2925f3d0fcba645c87d77c73" dependencies = [ - "base64 0.22.1", - "ciborium", - "dioxus-core", - "serde", - "tracing", + "const_format", + "convert_case 0.8.0", + "proc-macro2", + "quote", + "syn 2.0.104", + "xxhash-rust", ] [[package]] name = "dioxus-history" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e9e34323717a78ea3f8ba5072ff484744a656e8d422932c19937b67f45113e" +checksum = "1b29e37ff774f4a28c212f9437c0693c4993aa806e9d3c42a71c026464847bf1" dependencies = [ "dioxus-core", "tracing", @@ -1599,9 +1751,9 @@ dependencies = [ [[package]] name = "dioxus-hooks" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab776b9a156765cc7dd7876891c98b9ab06b1f995d33ff169b06ef4f23cfd437" +checksum = "065f90252e520ffcfd066588f5028cd04f04499e9a38a3d63efa212303dd7e18" dependencies = [ "dioxus-core", "dioxus-signals", @@ -1616,11 +1768,12 @@ dependencies = [ [[package]] name = "dioxus-html" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "073e5b69a7b66e9cbb49530df8c4cf86bf2aff3322ba86a3d722f9d58cd9c54b" +checksum = "e5f62494757bd5cc292c7b6c1d8e026463a780bc1b22aee9f2581fcab631e1dd" dependencies = [ "async-trait", + "bytes", "dioxus-core", "dioxus-core-macro", "dioxus-core-types", @@ -1629,6 +1782,7 @@ dependencies = [ "enumset", "euclid", "futures-channel", + "futures-util", "generational-box", "keyboard-types", "lazy-js-bundle", @@ -1641,9 +1795,9 @@ dependencies = [ [[package]] name = "dioxus-html-internal-macro" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162beea862dc888897a0b527db08724ede0f09e59fe081ab39caa0b085f40e10" +checksum = "8182c6d902dc85e743988cd77d98880475b2977b63a41cac2640600a78fdce8c" dependencies = [ "convert_case 0.8.0", "proc-macro2", @@ -1653,9 +1807,9 @@ dependencies = [ [[package]] name = "dioxus-interpreter-js" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd2ef3fe9bddfcac6d2ccf123d4834b5c3d97e6f2be8fcbfc4943226d9d7d4fe" +checksum = "d06b5231afd4abdc3b7f8e3740fd962b423c1859fcfd8b47bf7b77012a1dd53e" dependencies = [ "dioxus-core", "dioxus-core-types", @@ -1670,26 +1824,11 @@ dependencies = [ "web-sys", ] -[[package]] -name = "dioxus-isrg" -version = "0.7.0-rc.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de299631d53fbde53d86609884a5b2bae65d9c1d86c78a79b7d2254b9ba1771" -dependencies = [ - "chrono", - "http 1.3.1", - "lru", - "rustc-hash 2.1.1", - "thiserror 2.0.17", - "tracing", - "walkdir", -] - [[package]] name = "dioxus-liveview" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90ea4ac81b0c239f00c70a06d1433135babca3412817d4c21a1a188964e5a7f" +checksum = "8d78671230db6e2233a7f00bf74e80fa5bb79e63a2934962bdc1579b013f83e2" dependencies = [ "axum", "dioxus-cli-config", @@ -1715,11 +1854,10 @@ dependencies = [ [[package]] name = "dioxus-logger" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d39a7c4d1f848fa62d0e605aabce921cc8a95ccea3d17101a840d216471adb7" +checksum = "b0cb776d0d89a5ce89795565b9967ae410bd7f0dedebb1ee3bb48156797753a5" dependencies = [ - "console_error_panic_hook", "dioxus-cli-config", "tracing", "tracing-subscriber", @@ -1728,14 +1866,14 @@ dependencies = [ [[package]] name = "dioxus-router" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6260ba0131670716b7410bc6b2eba13cc7677ba133c9678b5508214a7a2a1794" +checksum = "c0f2b44bbaa3aa0c74346d9d214e38ad71f4f7a7306581c07bdc1c53a0475c8a" dependencies = [ "dioxus-cli-config", "dioxus-core", "dioxus-core-macro", - "dioxus-fullstack-hooks", + "dioxus-fullstack-core", "dioxus-history", "dioxus-hooks", "dioxus-html", @@ -1749,9 +1887,9 @@ dependencies = [ [[package]] name = "dioxus-router-macro" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71f2013d2871815f6e84478198c5f458c735f053703a800a9ac684b98de2cfa" +checksum = "86edd85b5863995a4bcb07007de0d4a0690d4c30a687f423ccb9675f0fac35a7" dependencies = [ "base16", "digest", @@ -1764,9 +1902,9 @@ dependencies = [ [[package]] name = "dioxus-rsx" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee08e1302f384a54d97b762eddb57cf3b7335b08b176e136c1d9631b5c71ff18" +checksum = "10d6cfe41e61ffa2f9390123589be7d482dee5e9fe4ed0fe53c976791175f357" dependencies = [ "proc-macro2", "proc-macro2-diagnostics", @@ -1776,14 +1914,16 @@ dependencies = [ [[package]] name = "dioxus-server" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1116ed485980f0df75d9251dd216e325e059d71fe1ef823ee967105aa4d4be48" +checksum = "60720b456f09e4653c53fa1103f438a3a2109188727bbc271e6710b84a84dfc6" dependencies = [ + "anyhow", "async-trait", "axum", "base64 0.22.1", "bytes", + "chrono", "ciborium", "dashmap", "dioxus-cli-config", @@ -1791,44 +1931,50 @@ dependencies = [ "dioxus-core-macro", "dioxus-devtools", "dioxus-document", - "dioxus-fullstack-hooks", - "dioxus-fullstack-protocol", + "dioxus-fullstack-core", "dioxus-history", + "dioxus-hooks", "dioxus-html", "dioxus-interpreter-js", - "dioxus-isrg", + "dioxus-logger", "dioxus-router", "dioxus-signals", "dioxus-ssr", "enumset", + "futures", "futures-channel", "futures-util", "generational-box", "http 1.3.1", + "http-body-util", "hyper", "hyper-util", "inventory", + "lru", "parking_lot", "pin-project", + "rustc-hash 2.1.1", "serde", - "server_fn", + "serde_json", + "serde_qs", "subsecond", "thiserror 2.0.17", "tokio", + "tokio-tungstenite 0.27.0", "tokio-util", "tower", "tower-http", - "tower-layer", "tracing", "tracing-futures", - "web-sys", + "url", + "walkdir", ] [[package]] name = "dioxus-signals" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1d0e70a8da969c0404f5ef8cf6f47042bea55608b582079f3ea3d9fff46125c" +checksum = "c3721982f4f639736e3752e6f2f8dc8062595e8c25baec609f9cc6e6ba535422" dependencies = [ "dioxus-core", "futures-channel", @@ -1842,9 +1988,9 @@ dependencies = [ [[package]] name = "dioxus-ssr" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21c377da1f2ea708be1112dd61189d6dcd19c8db25208b750c3849f760fa854d" +checksum = "3b7aad29c450879529dcbe0b84fb98789985827db7d939272227045a4835c8d4" dependencies = [ "askama_escape", "dioxus-core", @@ -1854,9 +2000,9 @@ dependencies = [ [[package]] name = "dioxus-stores" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5494e5aa7333f3be918741eeb6bfb4d1cbf28d25035a2a3c2c5bcebdc27b0b68" +checksum = "56af6ce8d7f024621cd5f9511ed0f607edcec0e1e3fd6096e4cd2e0c43b573a5" dependencies = [ "dioxus-core", "dioxus-signals", @@ -1865,9 +2011,9 @@ dependencies = [ [[package]] name = "dioxus-stores-macro" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecb7365b1a587a9f2340cf8f925a00b997d8d31b4ee25ecb21ca8bdf99c2c33" +checksum = "712e6d4cafbef29c6271556c2a19a602d335eba166a831c91bc059a14f49a866" dependencies = [ "convert_case 0.8.0", "proc-macro2", @@ -1877,17 +2023,16 @@ dependencies = [ [[package]] name = "dioxus-web" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34eb4f341b0203f7b1fe1804d4561a19a399bf7fa4821a5b87cff5fd89d834bd" +checksum = "a288270f9dbbfadd13c3ef4592f992914e3dc583279a0584561da28d456c5940" dependencies = [ - "async-trait", "dioxus-cli-config", "dioxus-core", "dioxus-core-types", "dioxus-devtools", "dioxus-document", - "dioxus-fullstack-protocol", + "dioxus-fullstack-core", "dioxus-history", "dioxus-html", "dioxus-interpreter-js", @@ -1899,36 +2044,35 @@ dependencies = [ "js-sys", "lazy-js-bundle", "rustc-hash 2.1.1", + "send_wrapper", "serde", "serde-wasm-bindgen", "serde_json", "tracing", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", ] [[package]] -name = "dioxus_server_macro" -version = "0.7.0-rc.0" +name = "displaydoc" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a032e9eaa291ded578b6c368ba35dd18d052e1cbcf2395244e555edd1767e61" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "server_fn_macro", "syn 2.0.104", ] [[package]] -name = "displaydoc" -version = "0.2.5" +name = "document-features" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", + "litrs", ] [[package]] @@ -2082,7 +2226,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2315,9 +2459,9 @@ dependencies = [ [[package]] name = "generational-box" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb058e0358ff765e719ab3e61629c5090fedb6a6ccf66479de21440a33d7f084" +checksum = "27018cde29a071e38c8ff65fb5266e3768ed97dd66ed8bb6626d1b96a7eebdc9" dependencies = [ "parking_lot", "tracing", @@ -2523,6 +2667,30 @@ dependencies = [ "hashbrown 0.15.4", ] +[[package]] +name = "headers" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" +dependencies = [ + "base64 0.22.1", + "bytes", + "headers-core", + "http 1.3.1", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" +dependencies = [ + "http 1.3.1", +] + [[package]] name = "heck" version = "0.4.1" @@ -2913,6 +3081,15 @@ dependencies = [ "serde", ] +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + [[package]] name = "inherent" version = "1.0.12" @@ -3069,9 +3246,9 @@ checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" [[package]] name = "lazy-js-bundle" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22c4abc3d491546025db72681ed8b1ff0e6e77d67f196460179b027d591b6ff" +checksum = "8baa9332fc2af0a7035efc69e29f725e4e65d7d3e49010f39da2a5c9253318c3" [[package]] name = "lazy_static" @@ -3340,7 +3517,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -3384,6 +3561,12 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +[[package]] +name = "litrs" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + [[package]] name = "local-channel" version = "0.1.5" @@ -3452,9 +3635,9 @@ dependencies = [ [[package]] name = "manganis" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "105544bc1d466decccab19427eddb801b6e575bb4907410eb4fed604ed78d358" +checksum = "1ee211e26e60d87d00d7df3bc04487d1e3170eba0fb9732cea2c9aa837b3e457" dependencies = [ "const-serialize", "manganis-core", @@ -3463,9 +3646,9 @@ dependencies = [ [[package]] name = "manganis-core" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71ef461824c58f3d260c1f548f7a8aee2e0b6b805a503d15f8535a3a6272d7" +checksum = "27aea79d04e173ba4cbcca9f5988186dd728e668c44566ca8896fe264358bd68" dependencies = [ "const-serialize", "dioxus-cli-config", @@ -3475,9 +3658,9 @@ dependencies = [ [[package]] name = "manganis-macro" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06115a15f5d7bf6fcfee1b6979155cc51ab21ce7f06d907f6435d24175778f9e" +checksum = "b378240a403db8dec139b4d4ecde4d960edfb108cc71b6ae5ed58d3544f2a7c4" dependencies = [ "dunce", "macro-string", @@ -3776,7 +3959,7 @@ version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51e219e79014df21a225b1860a479e2dcd7cbd9130f4defd4bd0e191ea31d67d" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "chrono", "getrandom 0.2.16", "http 1.3.1", @@ -4222,9 +4405,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -4242,6 +4425,12 @@ dependencies = [ "yansi", ] +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + [[package]] name = "ptr_meta" version = "0.1.4" @@ -4262,6 +4451,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "publicsuffix" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +dependencies = [ + "idna", + "psl-types", +] + [[package]] name = "querystring" version = "1.1.0" @@ -4320,7 +4519,7 @@ dependencies = [ "once_cell", "socket2 0.5.10", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4558,12 +4757,14 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.22" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "base64 0.22.1", "bytes", + "cookie 0.18.1", + "cookie_store", "encoding_rs", "futures-core", "futures-util", @@ -4739,7 +4940,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.4.15", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4752,7 +4953,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.9.4", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5237,7 +5438,7 @@ dependencies = [ "axum", "base64 0.22.1", "bytes", - "const-str", + "const-str 0.6.3", "const_format", "dashmap", "futures", @@ -5248,7 +5449,6 @@ dependencies = [ "inventory", "js-sys", "pin-project-lite", - "reqwest", "rustc_version", "rustversion", "send_wrapper", @@ -5259,7 +5459,6 @@ dependencies = [ "thiserror 2.0.17", "throw_error", "tokio", - "tokio-tungstenite 0.27.0", "tower", "tower-layer", "url", @@ -5396,7 +5595,7 @@ version = "0.1.0" name = "shield-dioxus" version = "0.1.0" dependencies = [ - "async-trait", + "anyhow", "dioxus", "serde_json", "shield", @@ -5407,7 +5606,7 @@ dependencies = [ name = "shield-dioxus-axum" version = "0.1.0" dependencies = [ - "async-trait", + "anyhow", "dioxus-server", "shield", "shield-axum", @@ -6038,9 +6237,9 @@ checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" [[package]] name = "subsecond" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b14ed4d86ab065ffbfdb994fd3e44daf5244b02cb643bd52949d74b703f36605" +checksum = "1d8102982e5ba0a355d992cd55b14a67df4ac6916b4ca119e8851f9673a94b0b" dependencies = [ "js-sys", "libc", @@ -6057,9 +6256,9 @@ dependencies = [ [[package]] name = "subsecond-types" -version = "0.7.0-rc.0" +version = "0.7.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "275920a8a5634e47e12253971db85946798795bbe4d9dfc1debf23533d823983" +checksum = "38d92e6854bebf39abe8afb71ab99460f87ffcaed25ec08a6f4f9fa5da6ac8ec" dependencies = [ "serde", ] @@ -6207,7 +6406,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix 1.0.7", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -6381,6 +6580,7 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", + "tokio-util", ] [[package]] @@ -6415,6 +6615,7 @@ checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" dependencies = [ "bytes", "futures-core", + "futures-io", "futures-sink", "futures-util", "hashbrown 0.15.4", @@ -7133,7 +7334,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 9617da8..bea0ba7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,15 +33,16 @@ actix-files = "0.6.6" actix-session = "0.11.0" actix-utils = "3.0.1" actix-web = "4.9.0" +anyhow = "1.0.100" async-std = "1.13.0" async-trait = "0.1.83" axum = "0.8.1" bon = "3.3.2" chrono = "0.4.39" console_error_panic_hook = "0.1.2" -dioxus = "0.7.0-rc.0" -dioxus-html = "0.7.0-rc.0" -dioxus-server = "0.7.0-rc.0" +dioxus = "0.7.0-rc.3" +dioxus-html = "0.7.0-rc.3" +dioxus-server = "0.7.0-rc.3" futures = "0.3.31" http = "1.2.0" leptos = "0.8.3" diff --git a/examples/dioxus-axum/src/main.rs b/examples/dioxus-axum/src/main.rs index 40ed6b9..c435178 100644 --- a/examples/dioxus-axum/src/main.rs +++ b/examples/dioxus-axum/src/main.rs @@ -15,14 +15,14 @@ fn main() { #[cfg(feature = "server")] #[tokio::main] async fn main() { - use std::{env, sync::Arc}; + use std::sync::Arc; - use axum::Router; + use axum::{Extension, Router}; use dioxus::{ cli_config::fullstack_address_or_localhost, prelude::{DioxusRouterExt, *}, }; - use shield::{ErasedMethod, Method, Shield, ShieldOptions}; + use shield::{Shield, ShieldOptions}; use shield_bootstrap::BootstrapDioxusStyle; use shield_dioxus_axum::{AuthRoutes, AxumDioxusIntegration, ShieldLayer}; use shield_memory::{MemoryStorage, User}; @@ -66,15 +66,14 @@ async fn main() { // Initialize router let router = Router::new() - .nest("/api/auth", AuthRoutes::router::()) + .nest("/api/auth", AuthRoutes::new(shield).router()) .serve_dioxus_application( - ServeConfig::builder() - .context(AxumDioxusIntegration::::default().context()) - .context(BootstrapDioxusStyle::default().context()) - .build() - .unwrap(), + ServeConfig::new().context(BootstrapDioxusStyle::default().context()), App, ) + .layer(Extension( + AxumDioxusIntegration::::default().context(), + )) .layer(shield_layer) .layer(session_layer); diff --git a/examples/workos/src/main.rs b/examples/workos/src/main.rs index bcd7f67..ef9bcd3 100644 --- a/examples/workos/src/main.rs +++ b/examples/workos/src/main.rs @@ -17,12 +17,12 @@ fn main() { async fn main() { use std::{env, sync::Arc}; - use axum::Router; + use axum::{Extension, Router}; use dioxus::{ cli_config::fullstack_address_or_localhost, prelude::{DioxusRouterExt, *}, }; - use shield::{ErasedMethod, Method, Shield, ShieldOptions}; + use shield::{Shield, ShieldOptions}; use shield_bootstrap::BootstrapDioxusStyle; use shield_dioxus_axum::{AxumDioxusIntegration, ShieldLayer}; use shield_memory::{MemoryStorage, User}; @@ -69,13 +69,12 @@ async fn main() { // Initialize router let router = Router::new() .serve_dioxus_application( - ServeConfig::builder() - .context(AxumDioxusIntegration::::default().context()) - .context(BootstrapDioxusStyle::default().context()) - .build() - .unwrap(), + ServeConfig::new().context(BootstrapDioxusStyle::default().context()), App, ) + .layer(Extension( + AxumDioxusIntegration::::default().context(), + )) .layer(shield_layer) .layer(session_layer); diff --git a/packages/core/shield/src/shield.rs b/packages/core/shield/src/shield.rs index 8f85637..f14f015 100644 --- a/packages/core/shield/src/shield.rs +++ b/packages/core/shield/src/shield.rs @@ -13,12 +13,13 @@ use utoipa::{ }, }; +#[cfg(feature = "utoipa")] +use crate::path::ActionPathParams; use crate::{ action::{ActionForms, ActionMethodForm, ActionProviderForm}, error::{ActionError, MethodError, ProviderError, SessionError, ShieldError}, method::ErasedMethod, options::ShieldOptions, - path::ActionPathParams, request::Request, response::ResponseType, session::Session, diff --git a/packages/integrations/shield-dioxus-axum/Cargo.toml b/packages/integrations/shield-dioxus-axum/Cargo.toml index c5cbbb0..7afc4cb 100644 --- a/packages/integrations/shield-dioxus-axum/Cargo.toml +++ b/packages/integrations/shield-dioxus-axum/Cargo.toml @@ -13,7 +13,7 @@ default = [] utoipa = ["shield-axum/utoipa"] [dependencies] -async-trait.workspace = true +anyhow.workspace = true dioxus-server.workspace = true shield.workspace = true shield-axum.workspace = true diff --git a/packages/integrations/shield-dioxus-axum/src/integration.rs b/packages/integrations/shield-dioxus-axum/src/integration.rs index 2154a61..ba219fc 100644 --- a/packages/integrations/shield-dioxus-axum/src/integration.rs +++ b/packages/integrations/shield-dioxus-axum/src/integration.rs @@ -1,9 +1,8 @@ use std::marker::PhantomData; -use async_trait::async_trait; -use dioxus_server::extract; - -use shield::{Session, ShieldDyn, User}; +use anyhow::{Result, anyhow}; +use dioxus_server::http::Extensions; +use shield::{Session, Shield, ShieldDyn, User}; use shield_axum::{ExtractSession, ExtractShield}; use shield_dioxus::{DioxusIntegration, DioxusIntegrationDyn}; @@ -21,19 +20,24 @@ impl Default for AxumDioxusIntegration { } } -#[async_trait] impl DioxusIntegration for AxumDioxusIntegration { - async fn extract_shield(&self) -> ShieldDyn { - let ExtractShield(shield) = extract::, _>() - .await - .expect("Shield should be extracted"); - - ShieldDyn::new(shield) + fn extract_shield(&self, extensions: &Extensions) -> Result { + let ExtractShield(shield) = extensions + .get::>() + .cloned() + .map(ExtractShield) + .ok_or_else(|| anyhow!("Shield should be extracted"))?; + + Ok(ShieldDyn::new(shield)) } - async fn extract_session(&self) -> Session { - let ExtractSession(session) = extract().await.expect("Session should be extracted"); + fn extract_session(&self, extensions: &Extensions) -> Result { + let ExtractSession(session) = extensions + .get::() + .cloned() + .map(ExtractSession) + .ok_or_else(|| anyhow!("Session should be extracted"))?; - session + Ok(session) } } diff --git a/packages/integrations/shield-dioxus/Cargo.toml b/packages/integrations/shield-dioxus/Cargo.toml index b1ff1b4..911592b 100644 --- a/packages/integrations/shield-dioxus/Cargo.toml +++ b/packages/integrations/shield-dioxus/Cargo.toml @@ -12,7 +12,7 @@ version.workspace = true server = ["dioxus/server"] [dependencies] -async-trait.workspace = true +anyhow.workspace = true dioxus = { workspace = true, features = ["fullstack", "router"] } serde_json.workspace = true shield.workspace = true diff --git a/packages/integrations/shield-dioxus/src/integration.rs b/packages/integrations/shield-dioxus/src/integration.rs index 3de83b9..ea538ba 100644 --- a/packages/integrations/shield-dioxus/src/integration.rs +++ b/packages/integrations/shield-dioxus/src/integration.rs @@ -1,13 +1,13 @@ use std::sync::Arc; -use async_trait::async_trait; +use anyhow::Result; +use dioxus::fullstack::http::Extensions; use shield::{Session, ShieldDyn}; -#[async_trait] pub trait DioxusIntegration: Send + Sync { - async fn extract_shield(&self) -> ShieldDyn; + fn extract_shield(&self, extensions: &Extensions) -> Result; - async fn extract_session(&self) -> Session; + fn extract_session(&self, extensions: &Extensions) -> Result; } #[derive(Clone)] @@ -18,11 +18,11 @@ impl DioxusIntegrationDyn { Self(Arc::new(integration)) } - pub async fn extract_shield(&self) -> ShieldDyn { - self.0.extract_shield().await + pub fn extract_shield(&self, extensions: &Extensions) -> Result { + self.0.extract_shield(extensions) } - pub async fn extract_session(&self) -> Session { - self.0.extract_session().await + pub fn extract_session(&self, extensions: &Extensions) -> Result { + self.0.extract_session(extensions) } } diff --git a/packages/integrations/shield-dioxus/src/routes/action.rs b/packages/integrations/shield-dioxus/src/routes/action.rs index 5c15160..c80cae1 100644 --- a/packages/integrations/shield-dioxus/src/routes/action.rs +++ b/packages/integrations/shield-dioxus/src/routes/action.rs @@ -28,69 +28,63 @@ pub fn Action(props: ActionProps) -> Element { } } -// TODO: Figure out a way to access `FromContext` and `extract` without `dioxus/server` feature. +#[get("/api/auth/forms", parts: dioxus::fullstack::http::request::Parts)] +async fn forms(action_id: String) -> Result { + use anyhow::anyhow; -#[cfg_attr(not(feature = "server"), allow(unused_variables))] -#[server] -async fn forms(action_id: String) -> Result { - #[cfg(feature = "server")] - { - use dioxus::prelude::{FromContext, extract}; + use crate::integration::DioxusIntegrationDyn; - use crate::integration::DioxusIntegrationDyn; + let integration = parts + .extensions + .get::() + .ok_or_else(|| anyhow!("Dioxus Shield integration should be extracted."))?; + let shield = integration.extract_shield(&parts.extensions)?; + let session = integration.extract_session(&parts.extensions)?; - let FromContext(integration): FromContext = extract().await?; - let shield = integration.extract_shield().await; - let session = integration.extract_session().await; + let forms = shield + .action_forms(&action_id, session) + .await + .context("Failed to get Shield action forms.")?; - let forms = shield.action_forms(&action_id, session).await?; - - Ok(forms) - } - - #[cfg(not(feature = "server"))] - unreachable!() + Ok(forms) } -#[cfg_attr(not(feature = "server"), allow(unused_variables))] -#[server] +#[post("/api/auth/call", parts: dioxus::fullstack::http::request::Parts)] pub async fn call( action_id: String, method_id: String, provider_id: Option, // TODO: Would be nice if this argument could fill up with all unknown keys instead of setting name to `data[...]`. data: Value, -) -> Result { - #[cfg(feature = "server")] - { - use dioxus::prelude::{FromContext, extract}; - use serde_json::Value; - use shield::Request; - - use crate::integration::DioxusIntegrationDyn; - - tracing::info!("call data {data:#?}"); - - let FromContext(integration): FromContext = extract().await?; - let shield = integration.extract_shield().await; - let session = integration.extract_session().await; - - let response = shield - .call( - &action_id, - &method_id, - provider_id.as_deref(), - session, - Request { - query: Value::Null, - form_data: data, - }, - ) - .await?; - - Ok(response) - } - - #[cfg(not(feature = "server"))] - unreachable!() +) -> Result { + use anyhow::anyhow; + use serde_json::Value; + use shield::Request; + + use crate::integration::DioxusIntegrationDyn; + + tracing::info!("call data {data:#?}"); + + let integration = parts + .extensions + .get::() + .ok_or_else(|| anyhow!("Dioxus Shield integration should be extracted."))?; + let shield = integration.extract_shield(&parts.extensions)?; + let session = integration.extract_session(&parts.extensions)?; + + let response = shield + .call( + &action_id, + &method_id, + provider_id.as_deref(), + session, + Request { + query: Value::Null, + form_data: data, + }, + ) + .await + .context("Failed to call Shield action.")?; + + Ok(response) } diff --git a/packages/styles/shield-bootstrap/src/dioxus/form.rs b/packages/styles/shield-bootstrap/src/dioxus/form.rs index f33b648..37dc948 100644 --- a/packages/styles/shield-bootstrap/src/dioxus/form.rs +++ b/packages/styles/shield-bootstrap/src/dioxus/form.rs @@ -36,7 +36,10 @@ pub fn Form(props: FormProps) -> Element { .data() .values() .into_iter() - .filter_map(|(key, values)| values.first().map(|value| (key, value.clone()))) + .filter_map(|(key, value)| match value { + FormValue::Text(value) => Some((key, value)), + FormValue::File(_) => None, + }) .collect::>() ).expect("TODO: handle error");