about summary refs log tree commit diff
path: root/src/libcore/bool.rs
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-09-08 00:07:36 +0200
committerGitHub <noreply@github.com>2019-09-08 00:07:36 +0200
commitcd3cb281da9a4387f5896db75129d7dd73cca8f4 (patch)
treed19b29534ae871eaa6fdf621d2658dd041672075 /src/libcore/bool.rs
parentcab2d84f061c624a016250458f29f0297b74d0fe (diff)
parent7b3f72906ffea5a8aec9e3d109d8e012f771a672 (diff)
downloadrust-cd3cb281da9a4387f5896db75129d7dd73cca8f4.tar.gz
rust-cd3cb281da9a4387f5896db75129d7dd73cca8f4.zip
Rollup merge of #64255 - varkor:bool-to-option, r=Centril
Add methods for converting `bool` to `Option<T>`

This provides a reference implementation for https://github.com/rust-lang/rfcs/pull/2757.
Diffstat (limited to 'src/libcore/bool.rs')
-rw-r--r--src/libcore/bool.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/libcore/bool.rs b/src/libcore/bool.rs
new file mode 100644
index 00000000000..32ec26975e3
--- /dev/null
+++ b/src/libcore/bool.rs
@@ -0,0 +1,45 @@
+//! impl bool {}
+
+#[cfg(not(boostrap_stdarch_ignore_this))]
+#[lang = "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 = "64260")]
+    #[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 = "64260")]
+    #[inline]
+    pub fn then_with<T, F: FnOnce() -> T>(self, f: F) -> Option<T> {
+        if self {
+            Some(f())
+        } else {
+            None
+        }
+    }
+}