From aab1258f0eab45b430b70f971bdcf4e2146021e0 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 20 Dec 2024 14:00:03 -0600 Subject: [PATCH] remove the file engine feature in the html crate (#3392) --- packages/dioxus/Cargo.toml | 2 +- packages/html/Cargo.toml | 10 ++++----- packages/html/src/events/drag.rs | 4 ---- packages/html/src/events/form.rs | 8 ------- packages/html/src/file_data.rs | 7 ------- packages/liveview/Cargo.toml | 2 +- packages/web/src/events/drag.rs | 36 +++++++++++++++++++------------- packages/web/src/events/file.rs | 32 ++++++++++++++++------------ packages/web/src/events/form.rs | 30 +++++++++++++++----------- 9 files changed, 65 insertions(+), 66 deletions(-) diff --git a/packages/dioxus/Cargo.toml b/packages/dioxus/Cargo.toml index ca667f054..005898c56 100644 --- a/packages/dioxus/Cargo.toml +++ b/packages/dioxus/Cargo.toml @@ -43,7 +43,7 @@ macro = ["dep:dioxus-core-macro"] html = ["dep:dioxus-html"] hooks = ["dep:dioxus-hooks"] devtools = ["dep:dioxus-devtools", "dioxus-web?/devtools", "dioxus-fullstack?/devtools"] -mounted = ["dioxus-web?/mounted", "dioxus-html?/mounted"] +mounted = ["dioxus-web?/mounted"] file_engine = ["dioxus-web?/file_engine"] asset = ["dep:manganis"] document = ["dioxus-web?/document", "dep:dioxus-document", "dep:dioxus-history"] diff --git a/packages/html/Cargo.toml b/packages/html/Cargo.toml index 362ebe4c2..0671696e7 100644 --- a/packages/html/Cargo.toml +++ b/packages/html/Cargo.toml @@ -23,7 +23,7 @@ js-sys = { version = "0.3.56", optional = true } euclid = "0.22.7" enumset = "1.1.2" keyboard-types = { version = "0.7", default-features = false } -async-trait = { version = "0.1.58", optional = true } +async-trait = { version = "0.1.58" } tokio = { workspace = true, features = ["fs", "io-util"], optional = true } futures-channel = { workspace = true } serde_json = { version = "1", optional = true } @@ -41,7 +41,7 @@ tokio = { workspace = true, features = ["time"] } manganis = { workspace = true } [features] -default = ["serialize", "mounted", "file_engine"] +default = ["serialize"] serialize = [ "dep:serde", "dep:serde_json", @@ -50,10 +50,10 @@ serialize = [ "keyboard-types/serde", "dioxus-core/serialize" ] +# TODO: Remove the mounted feature flag in the next major release. It no longer activates any extra code mounted = [] -file_engine = [ - "dep:async-trait", -] +# TODO: Remove the file engine feature flag in the next major release. It no longer activates any extra code +file_engine = [] hot-reload-context = ["dep:dioxus-rsx"] html-to-rsx = [] diff --git a/packages/html/src/events/drag.rs b/packages/html/src/events/drag.rs index 63cdffad8..dfb5e02f5 100644 --- a/packages/html/src/events/drag.rs +++ b/packages/html/src/events/drag.rs @@ -59,7 +59,6 @@ impl DragData { } impl crate::HasFileData for DragData { - #[cfg(feature = "file_engine")] fn files(&self) -> Option> { self.inner.files() } @@ -112,7 +111,6 @@ impl PointerInteraction for DragData { pub struct SerializedDragData { pub mouse: crate::point_interaction::SerializedPointInteraction, - #[cfg(feature = "file_engine")] #[serde(default)] files: Option, } @@ -122,7 +120,6 @@ impl SerializedDragData { fn new(drag: &DragData) -> Self { Self { mouse: crate::point_interaction::SerializedPointInteraction::from(drag), - #[cfg(feature = "file_engine")] files: None, } } @@ -137,7 +134,6 @@ impl HasDragData for SerializedDragData { #[cfg(feature = "serialize")] impl crate::file_data::HasFileData for SerializedDragData { - #[cfg(feature = "file_engine")] fn files(&self) -> Option> { self.files .as_ref() diff --git a/packages/html/src/events/form.rs b/packages/html/src/events/form.rs index feaadffe6..267fda3bb 100644 --- a/packages/html/src/events/form.rs +++ b/packages/html/src/events/form.rs @@ -105,7 +105,6 @@ impl FormData { } /// Get the files of the form event - #[cfg(feature = "file_engine")] pub fn files(&self) -> Option> { self.inner.files() } @@ -177,7 +176,6 @@ pub struct SerializedFormData { #[serde(default)] valid: bool, - #[cfg(feature = "file_engine")] #[serde(default)] files: Option, } @@ -190,12 +188,10 @@ impl SerializedFormData { value, values, valid: true, - #[cfg(feature = "file_engine")] files: None, } } - #[cfg(feature = "file_engine")] /// Add files to the serialized form data object pub fn with_files(mut self, files: crate::file_data::SerializedFileEngine) -> Self { self.files = Some(files); @@ -208,7 +204,6 @@ impl SerializedFormData { value: data.value(), values: data.values(), valid: data.valid(), - #[cfg(feature = "file_engine")] files: { match data.files() { Some(files) => { @@ -234,7 +229,6 @@ impl SerializedFormData { value: data.value(), values: data.values(), valid: data.valid(), - #[cfg(feature = "file_engine")] files: None, } } @@ -261,7 +255,6 @@ impl HasFormData for SerializedFormData { #[cfg(feature = "serialize")] impl HasFileData for SerializedFormData { - #[cfg(feature = "file_engine")] fn files(&self) -> Option> { self.files .as_ref() @@ -269,7 +262,6 @@ impl HasFileData for SerializedFormData { } } -#[cfg(feature = "file_engine")] impl HasFileData for FormData { fn files(&self) -> Option> { self.inner.files() diff --git a/packages/html/src/file_data.rs b/packages/html/src/file_data.rs index 4b74edf44..cad64f8f6 100644 --- a/packages/html/src/file_data.rs +++ b/packages/html/src/file_data.rs @@ -1,15 +1,10 @@ pub trait HasFileData: std::any::Any { - // NOTE: The methods of this trait are config'ed out instead of the trait - // itself because several other traits inherit from this trait and there isn't a clean way to - // conditionally inherit from a trait based on a config. - #[cfg(feature = "file_engine")] fn files(&self) -> Option> { None } } #[cfg(feature = "serialize")] -#[cfg(feature = "file_engine")] /// A file engine that serializes files to bytes #[derive(serde::Serialize, serde::Deserialize, Debug, PartialEq, Clone)] pub struct SerializedFileEngine { @@ -17,7 +12,6 @@ pub struct SerializedFileEngine { } #[cfg(feature = "serialize")] -#[cfg(feature = "file_engine")] #[async_trait::async_trait(?Send)] impl FileEngine for SerializedFileEngine { fn files(&self) -> Vec { @@ -46,7 +40,6 @@ impl FileEngine for SerializedFileEngine { } } -#[cfg(feature = "file_engine")] #[async_trait::async_trait(?Send)] pub trait FileEngine { // get a list of file names diff --git a/packages/liveview/Cargo.toml b/packages/liveview/Cargo.toml index 8b1d8d432..a71582d46 100644 --- a/packages/liveview/Cargo.toml +++ b/packages/liveview/Cargo.toml @@ -22,7 +22,7 @@ tokio-stream = { version = "0.1.11", features = ["net"] } tokio-util = { version = "0.7.4", features = ["rt"] } serde = { version = "1.0.151", features = ["derive"] } serde_json = "1.0.91" -dioxus-html = { workspace = true, features = ["serialize", "mounted"] } +dioxus-html = { workspace = true, features = ["serialize"] } dioxus-document = { workspace = true } dioxus-history = { workspace = true } rustc-hash = { workspace = true } diff --git a/packages/web/src/events/drag.rs b/packages/web/src/events/drag.rs index 82769554f..8704ee27e 100644 --- a/packages/web/src/events/drag.rs +++ b/packages/web/src/events/drag.rs @@ -74,25 +74,31 @@ impl HasDragData for Synthetic { } impl HasFileData for Synthetic { - #[cfg(feature = "file_engine")] fn files(&self) -> Option> { - use wasm_bindgen::JsCast; - - let files = self - .event - .dyn_ref::() - .and_then(|drag_event| { - drag_event.data_transfer().and_then(|dt| { - dt.files().and_then(|files| { - #[allow(clippy::arc_with_non_send_sync)] - crate::file_engine::WebFileEngine::new(files).map(|f| { - std::sync::Arc::new(f) as std::sync::Arc + #[cfg(feature = "file_engine")] + { + use wasm_bindgen::JsCast; + let files = self + .event + .dyn_ref::() + .and_then(|drag_event| { + drag_event.data_transfer().and_then(|dt| { + dt.files().and_then(|files| { + #[allow(clippy::arc_with_non_send_sync)] + crate::file_engine::WebFileEngine::new(files).map(|f| { + std::sync::Arc::new(f) + as std::sync::Arc + }) }) }) - }) - }); + }); - files + files + } + #[cfg(not(feature = "file_engine"))] + { + None + } } } diff --git a/packages/web/src/events/file.rs b/packages/web/src/events/file.rs index 981a5288b..5968d31b0 100644 --- a/packages/web/src/events/file.rs +++ b/packages/web/src/events/file.rs @@ -3,22 +3,28 @@ use dioxus_html::HasFileData; use super::Synthetic; impl HasFileData for Synthetic { - #[cfg(feature = "file_engine")] fn files(&self) -> Option> { - use wasm_bindgen::JsCast; + #[cfg(feature = "file_engine")] + { + use wasm_bindgen::JsCast; - let files = self - .event - .dyn_ref() - .and_then(|input: &web_sys::HtmlInputElement| { - input.files().and_then(|files| { - #[allow(clippy::arc_with_non_send_sync)] - crate::file_engine::WebFileEngine::new(files).map(|f| { - std::sync::Arc::new(f) as std::sync::Arc + let files = self + .event + .dyn_ref() + .and_then(|input: &web_sys::HtmlInputElement| { + input.files().and_then(|files| { + #[allow(clippy::arc_with_non_send_sync)] + crate::file_engine::WebFileEngine::new(files).map(|f| { + std::sync::Arc::new(f) as std::sync::Arc + }) }) - }) - }); + }); - files + files + } + #[cfg(not(feature = "file_engine"))] + { + None + } } } diff --git a/packages/web/src/events/form.rs b/packages/web/src/events/form.rs index 07717f847..80113effa 100644 --- a/packages/web/src/events/form.rs +++ b/packages/web/src/events/form.rs @@ -106,21 +106,27 @@ impl HasFormData for WebFormData { } impl HasFileData for WebFormData { - #[cfg(feature = "file_engine")] fn files(&self) -> Option> { - let files = self - .element - .dyn_ref() - .and_then(|input: &web_sys::HtmlInputElement| { - input.files().and_then(|files| { - #[allow(clippy::arc_with_non_send_sync)] - crate::file_engine::WebFileEngine::new(files).map(|f| { - std::sync::Arc::new(f) as std::sync::Arc + #[cfg(feature = "file_engine")] + { + let files = self + .element + .dyn_ref() + .and_then(|input: &web_sys::HtmlInputElement| { + input.files().and_then(|files| { + #[allow(clippy::arc_with_non_send_sync)] + crate::file_engine::WebFileEngine::new(files).map(|f| { + std::sync::Arc::new(f) as std::sync::Arc + }) }) - }) - }); + }); - files + files + } + #[cfg(not(feature = "file_engine"))] + { + None + } } }