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 {