]> git.lizzy.rs Git - rust.git/blob - library/core/src/bool.rs
Auto merge of #94598 - scottmcm:prefix-free-hasher-methods, r=Amanieu
[rust.git] / library / core / src / bool.rs
1 //! impl bool {}
2
3 use crate::marker::Destruct;
4
5 impl bool {
6     /// Returns `Some(t)` if the `bool` is [`true`](../std/keyword.true.html),
7     /// or `None` otherwise.
8     ///
9     /// # Examples
10     ///
11     /// ```
12     /// assert_eq!(false.then_some(0), None);
13     /// assert_eq!(true.then_some(0), Some(0));
14     /// ```
15     #[stable(feature = "bool_to_option", since = "1.62.0")]
16     #[rustc_const_unstable(feature = "const_bool_to_option", issue = "91917")]
17     #[inline]
18     pub const fn then_some<T>(self, t: T) -> Option<T>
19     where
20         T: ~const Destruct,
21     {
22         if self { Some(t) } else { None }
23     }
24
25     /// Returns `Some(f())` if the `bool` is [`true`](../std/keyword.true.html),
26     /// or `None` otherwise.
27     ///
28     /// # Examples
29     ///
30     /// ```
31     /// assert_eq!(false.then(|| 0), None);
32     /// assert_eq!(true.then(|| 0), Some(0));
33     /// ```
34     #[stable(feature = "lazy_bool_to_option", since = "1.50.0")]
35     #[rustc_const_unstable(feature = "const_bool_to_option", issue = "91917")]
36     #[inline]
37     pub const fn then<T, F>(self, f: F) -> Option<T>
38     where
39         F: ~const FnOnce() -> T,
40         F: ~const Destruct,
41     {
42         if self { Some(f()) } else { None }
43     }
44 }