diff --git a/yaserde/tests/option.rs b/yaserde/tests/option.rs index fe59cb0..3c5cc34 100644 --- a/yaserde/tests/option.rs +++ b/yaserde/tests/option.rs @@ -107,3 +107,30 @@ fn option_struct() { ); test_for_type!(Option::, None, None); } + +#[test] +fn option_bool_no_crash_on_bad_input() { + init(); + + #[derive(Debug, PartialEq, YaDeserialize, YaSerialize)] + struct Test { + field: SubTest, + } + + #[derive(Debug, PartialEq, YaDeserialize, YaSerialize)] + struct SubTest { + #[yaserde(attribute)] + content: Option, + } + + impl Default for SubTest { + fn default() -> Self { + SubTest { content: None } + } + } + + let content = "/ = yaserde::de::from_str(content); + + assert!(result.is_err()); +} diff --git a/yaserde_derive/src/de/expand_struct.rs b/yaserde_derive/src/de/expand_struct.rs index 592ae94..8fff8c9 100644 --- a/yaserde_derive/src/de/expand_struct.rs +++ b/yaserde_derive/src/de/expand_struct.rs @@ -116,7 +116,7 @@ pub fn parse( self, v: &str, ) -> ::std::result::Result { - ::std::result::Result::Ok(#field_type::from_str(#map_if_bool).unwrap()) + #field_type::from_str(#map_if_bool).map_err(|e| e.to_string()) } } })