use core::fmt; use mt_dom::*; #[derive(Clone)] enum Value<'a> { Simple(String), Callback(&'a dyn FnMut(usize) -> String), } impl<'a> PartialEq for Value<'a> { fn eq(&self, other: &Self) -> bool { match (self, other) { (Value::Simple(this), Value::Simple(o)) => this == o, _ => true, } } } impl<'a> fmt::Debug for Value<'a> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { Value::Callback(_) => f.debug_tuple("Callback").finish(), Value::Simple(s) => f.debug_tuple("Simple").field(s).finish(), } } } fn main() { println!("simple.."); let elm1: Node<&'static str, &'static str, (), &'static str, Value> = element( "div", vec![ attr("class", Value::Simple("container".to_string())), attr("id", Value::Simple("elm1".to_string())), attr("click", Value::Callback(&|x: usize| x.to_string())), ], vec![], ); println!("elm1: {:#?}", elm1); let elm2: Node<&'static str, &'static str, (), &'static str, Value> = element( "div", vec![ attr("class", Value::Simple("container".to_string())), attr("id", Value::Simple("elm2".to_string())), attr("click", Value::Callback(&|x: usize| x.to_string())), ], vec![], ); let diff = diff_with_key(&elm1, &elm2, &"key"); println!("patches: {:#?}", diff); }