use std::{collections::HashMap, fmt::Debug, sync::Arc}; use dioxus_core::Event; pub type FormEvent = Event; /* DOMEvent: Send + SyncTarget relatedTarget */ #[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))] #[derive(Clone)] pub struct FormData { pub value: String, pub values: HashMap, #[cfg_attr(feature = "serialize", serde(skip))] pub files: Option>, } impl PartialEq for FormData { fn eq(&self, other: &Self) -> bool { self.value == other.value && self.values == other.values } } impl Debug for FormData { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("FormEvent") .field("value", &self.value) .field("values", &self.values) .finish() } } #[async_trait::async_trait(?Send)] pub trait FileEngine { // get a list of file names fn files(&self) -> Vec; // read a file to bytes async fn read_file(&self, file: &str) -> Option>; // read a file to string async fn read_file_to_string(&self, file: &str) -> Option; } impl_event! { FormData; /// onchange onchange /// oninput handler oninput /// oninvalid oninvalid /// onreset onreset /// onsubmit onsubmit }