diff options
| author | varkor <github@varkor.com> | 2019-09-07 15:49:27 +0100 |
|---|---|---|
| committer | varkor <github@varkor.com> | 2019-09-07 15:49:27 +0100 |
| commit | b73e32c795ec438a4b2e1901abc4e2a281e1a18a (patch) | |
| tree | de7cb92d083a75db1130186f428250aeeb2acfee /src/libcore | |
| parent | f0386a10e0112acef6ea0447e6e5a3ac1c7cb118 (diff) | |
| download | rust-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.rs | 42 | ||||
| -rw-r--r-- | src/libcore/tests/bool.rs | 7 | ||||
| -rw-r--r-- | src/libcore/tests/lib.rs | 2 |
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; |
