diff options
Diffstat (limited to 'src/singular.rs')
-rw-r--r-- | src/singular.rs | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/singular.rs b/src/singular.rs index ef04d2f..1b7e28d 100644 --- a/src/singular.rs +++ b/src/singular.rs @@ -1,6 +1,3 @@ -#[cfg(feature = "with-serde")] -use serde; - use std::default::Default; use std::fmt; use std::hash::Hash; @@ -8,6 +5,9 @@ use std::hash::Hasher; use std::mem; use std::option; +#[cfg(feature = "with-serde")] +use serde; + use crate::clear::Clear; /// Like `Option<T>`, but keeps the actual element on `clear`. @@ -341,7 +341,9 @@ impl<T: Default + Clear> SingularField<T> { /// Get contained data, consume self. Return default value for type if this is empty. #[inline] pub fn unwrap_or_default(mut self) -> T { - self.value.clear(); + if !self.set { + self.value.clear(); + } self.value } @@ -577,4 +579,16 @@ mod test { x.set_default(); assert_eq!(0, x.as_ref().unwrap().b); } + + #[test] + fn unwrap_or_default() { + assert_eq!( + "abc", + SingularField::some("abc".to_owned()).unwrap_or_default() + ); + assert_eq!("", SingularField::<String>::none().unwrap_or_default()); + let mut some = SingularField::some("abc".to_owned()); + some.clear(); + assert_eq!("", some.unwrap_or_default()); + } } |