diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-09-08 00:07:36 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-09-08 00:07:36 +0200 |
| commit | cd3cb281da9a4387f5896db75129d7dd73cca8f4 (patch) | |
| tree | d19b29534ae871eaa6fdf621d2658dd041672075 /src/libcore/bool.rs | |
| parent | cab2d84f061c624a016250458f29f0297b74d0fe (diff) | |
| parent | 7b3f72906ffea5a8aec9e3d109d8e012f771a672 (diff) | |
| download | rust-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.rs | 45 |
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 + } + } +} |
