diff --git a/packages/html/src/events/form.rs b/packages/html/src/events/form.rs
index ee69104b9..ca1686cb7 100644
--- a/packages/html/src/events/form.rs
+++ b/packages/html/src/events/form.rs
@@ -1,13 +1,17 @@
-use std::{any::Any, collections::HashMap, fmt::Debug, sync::Arc};
+use std::{any::Any, collections::HashMap, fmt::Debug};
use dioxus_core::Event;
-use serde::{Deserialize, Serialize};
pub type FormEvent = Event;
/// A form value that may either be a list of values or a single value
-#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
-#[serde(untagged)] // this will serialize Text(String) -> String and VecText(Vec) to Vec
+#[cfg_attr(
+ feature = "serialize",
+ derive(serde::Serialize, serde::Deserialize),
+ // this will serialize Text(String) -> String and VecText(Vec) to Vec
+ serde(untagged)
+)]
+#[derive(Debug, Clone, PartialEq)]
pub enum FormValue {
Text(String),
VecText(Vec),
@@ -86,20 +90,23 @@ pub trait HasFormData: std::any::Any {
fn as_any(&self) -> &dyn std::any::Any;
}
-fn convert_hashmap_to_json(hashmap: &HashMap) -> serde_json::Result
-where
- K: Serialize + std::hash::Hash + Eq,
- V: Serialize,
-{
- serde_json::to_string(hashmap)
-}
-
impl FormData {
+ #[cfg(feature = "serialize")]
/// Parse the values into a struct with one field per value
pub fn parsed_values(&self) -> Result
where
T: serde::de::DeserializeOwned,
{
+ use serde::Serialize;
+
+ fn convert_hashmap_to_json(hashmap: &HashMap) -> serde_json::Result
+ where
+ K: Serialize + std::hash::Hash + Eq,
+ V: Serialize,
+ {
+ serde_json::to_string(hashmap)
+ }
+
let parsed_json =
convert_hashmap_to_json(&self.values()).expect("Failed to parse values to JSON");
@@ -176,7 +183,7 @@ impl HasFormData for SerializedFormData {
fn files(&self) -> Option> {
self.files
.as_ref()
- .map(|files| Arc::new(files.clone()) as _)
+ .map(|files| std::sync::Arc::new(files.clone()) as _)
}
fn as_any(&self) -> &dyn std::any::Any {