about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorvarkor <github@varkor.com>2019-09-07 15:49:27 +0100
committervarkor <github@varkor.com>2019-09-07 15:49:27 +0100
commitb73e32c795ec438a4b2e1901abc4e2a281e1a18a (patch)
treede7cb92d083a75db1130186f428250aeeb2acfee /src/libcore
parentf0386a10e0112acef6ea0447e6e5a3ac1c7cb118 (diff)
downloadrust-b73e32c795ec438a4b2e1901abc4e2a281e1a18a.tar.gz
rust-b73e32c795ec438a4b2e1901abc4e2a281e1a18a.zip
Add `bool::then` and `bool::then_with`
Diffstat (limited to 'src/libcore')
-rw-r--r--src/libcore/bool/mod.rs42
-rw-r--r--src/libcore/tests/bool.rs7
-rw-r--r--src/libcore/tests/lib.rs2
3 files changed, 50 insertions, 1 deletions
diff --git a/src/libcore/bool/mod.rs b/src/libcore/bool/mod.rs
index ddca07b27a5..0fbd3b8c2bb 100644
--- a/src/libcore/bool/mod.rs
+++ b/src/libcore/bool/mod.rs
@@ -4,4 +4,44 @@
 
 #[cfg(not(boostrap_stdarch_ignore_this))]
 #[lang = "bool"]
-impl bool {}
+impl bool {
+    /// Returns `Some(t)` if the `bool` is `true`, or `None` otherwise.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// #![feature(bool_to_option)]
+    ///
+    /// assert_eq!(false.then(0), None);
+    /// assert_eq!(true.then(0), Some(0));
+    /// ```
+    #[unstable(feature = "bool_to_option", issue = "0")]
+    #[inline]
+    pub fn then<T>(self, t: T) -> Option<T> {
+        if self {
+            Some(t)
+        } else {
+            None
+        }
+    }
+
+    /// Returns `Some(f())` if the `bool` is `true`, or `None` otherwise.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// #![feature(bool_to_option)]
+    ///
+    /// assert_eq!(false.then_with(|| 0), None);
+    /// assert_eq!(true.then_with(|| 0), Some(0));
+    /// ```
+    #[unstable(feature = "bool_to_option", issue = "0")]
+    #[inline]
+    pub fn then_with<T, F: FnOnce() -> T>(self, f: F) -> Option<T> {
+        if self {
+            Some(f())
+        } else {
+            None
+        }
+    }
+}
diff --git a/src/libcore/tests/bool.rs b/src/libcore/tests/bool.rs
new file mode 100644
index 00000000000..0f1e6e89451
--- /dev/null
+++ b/src/libcore/tests/bool.rs
@@ -0,0 +1,7 @@
+#[test]
+fn test_bool_to_option() {
+    assert_eq!(false.then(0), None);
+    assert_eq!(true.then(0), Some(0));
+    assert_eq!(false.then_with(|| 0), None);
+    assert_eq!(true.then_with(|| 0), Some(0));
+}
diff --git a/src/libcore/tests/lib.rs b/src/libcore/tests/lib.rs
index a3b108b2e9c..b2c29aa2692 100644
--- a/src/libcore/tests/lib.rs
+++ b/src/libcore/tests/lib.rs
@@ -1,3 +1,4 @@
+#![feature(bool_to_option)]
 #![feature(bound_cloned)]
 #![feature(box_syntax)]
 #![feature(cell_update)]
@@ -40,6 +41,7 @@ mod any;
 mod array;
 mod ascii;
 mod atomic;
+mod bool;
 mod cell;
 mod char;
 mod clone;