diff --git a/egui/src/any/serializable/element.rs b/egui/src/any/serializable/element.rs index ef64c5bb..0b41d0ee 100644 --- a/egui/src/any/serializable/element.rs +++ b/egui/src/any/serializable/element.rs @@ -120,7 +120,7 @@ impl AnyMapElement { match self { AnyMapElement(Deserialized { value, .. }) => value.downcast_mut(), AnyMapElement(Serialized(s, _)) => { - *self = Self::new(ron::from_str::(s).ok()?); + *self = Self::new(from_ron_str::(s)?); match self { AnyMapElement(Deserialized { value, .. }) => value.downcast_mut(), @@ -138,12 +138,14 @@ impl AnyMapElement { Deserialized { value, .. } => { if !value.is::() { *self = Self::new(set_with()); - // TODO: log this error, because it can occurs when user used same Id or same type for different widgets + eprintln!( + "egui: Value stored in serialized memory was not of type {}", + std::any::type_name::() + ); } } Serialized(s, _) => { - *self = Self::new(ron::from_str::(s).unwrap_or_else(|_| set_with())); - // TODO: log deserialization error + *self = Self::new(from_ron_str::(s).unwrap_or_else(|| set_with())); } } @@ -153,3 +155,18 @@ impl AnyMapElement { } } } + +fn from_ron_str(ron: &str) -> Option { + match ron::from_str::(ron) { + Ok(value) => Some(value), + Err(err) => { + eprintln!( + "egui: Failed to deserialize {} from memory: {}, ron: {:?}", + std::any::type_name::(), + err, + ron + ); + None + } + } +}