aboutsummaryrefslogtreecommitdiff
path: root/src/singular.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/singular.rs')
-rw-r--r--src/singular.rs22
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());
+ }
}