Add #[must_use] to to_value conversions

This commit is contained in:
John Kugelman 2021-10-11 19:04:24 -04:00
parent 5b210643eb
commit 0cf84c8c19
6 changed files with 38 additions and 2 deletions

View File

@ -328,9 +328,11 @@ pub fn is_digit(self, radix: u32) -> bool {
/// ///
/// ```should_panic /// ```should_panic
/// // this panics /// // this panics
/// '1'.to_digit(37); /// let _ = '1'.to_digit(37);
/// ``` /// ```
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline] #[inline]
pub fn to_digit(self, radix: u32) -> Option<u32> { pub fn to_digit(self, radix: u32) -> Option<u32> {
assert!(radix <= 36, "to_digit: radix is too high (maximum 36)"); assert!(radix <= 36, "to_digit: radix is too high (maximum 36)");

View File

@ -240,6 +240,8 @@ pub const fn from_raw_parts(
/// The pointer can be later reconstructed with [`NonNull::from_raw_parts`]. /// The pointer can be later reconstructed with [`NonNull::from_raw_parts`].
#[unstable(feature = "ptr_metadata", issue = "81513")] #[unstable(feature = "ptr_metadata", issue = "81513")]
#[rustc_const_unstable(feature = "ptr_metadata", issue = "81513")] #[rustc_const_unstable(feature = "ptr_metadata", issue = "81513")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline] #[inline]
pub const fn to_raw_parts(self) -> (NonNull<()>, <T as super::Pointee>::Metadata) { pub const fn to_raw_parts(self) -> (NonNull<()>, <T as super::Pointee>::Metadata) {
(self.cast(), super::metadata(self.as_ptr())) (self.cast(), super::metadata(self.as_ptr()))
@ -381,6 +383,8 @@ pub unsafe fn as_mut<'a>(&mut self) -> &'a mut T {
/// ``` /// ```
#[stable(feature = "nonnull_cast", since = "1.27.0")] #[stable(feature = "nonnull_cast", since = "1.27.0")]
#[rustc_const_stable(feature = "const_nonnull_cast", since = "1.36.0")] #[rustc_const_stable(feature = "const_nonnull_cast", since = "1.36.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline] #[inline]
pub const fn cast<U>(self) -> NonNull<U> { pub const fn cast<U>(self) -> NonNull<U> {
// SAFETY: `self` is a `NonNull` pointer which is necessarily non-null // SAFETY: `self` is a `NonNull` pointer which is necessarily non-null

View File

@ -1337,6 +1337,8 @@ pub const fn as_ptr(&self) -> *const c_char {
/// assert_eq!(cstr.to_bytes(), b"foo"); /// assert_eq!(cstr.to_bytes(), b"foo");
/// ``` /// ```
#[inline] #[inline]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
pub fn to_bytes(&self) -> &[u8] { pub fn to_bytes(&self) -> &[u8] {
let bytes = self.to_bytes_with_nul(); let bytes = self.to_bytes_with_nul();
@ -1362,6 +1364,8 @@ pub fn to_bytes(&self) -> &[u8] {
/// assert_eq!(cstr.to_bytes_with_nul(), b"foo\0"); /// assert_eq!(cstr.to_bytes_with_nul(), b"foo\0");
/// ``` /// ```
#[inline] #[inline]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
pub fn to_bytes_with_nul(&self) -> &[u8] { pub fn to_bytes_with_nul(&self) -> &[u8] {
unsafe { &*(&self.inner as *const [c_char] as *const [u8]) } unsafe { &*(&self.inner as *const [c_char] as *const [u8]) }
@ -1432,6 +1436,8 @@ pub fn to_str(&self) -> Result<&str, str::Utf8Error> {
/// Cow::Owned(String::from("Hello <20>World")) as Cow<'_, str> /// Cow::Owned(String::from("Hello <20>World")) as Cow<'_, str>
/// ); /// );
/// ``` /// ```
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[stable(feature = "cstr_to_str", since = "1.4.0")] #[stable(feature = "cstr_to_str", since = "1.4.0")]
pub fn to_string_lossy(&self) -> Cow<'_, str> { pub fn to_string_lossy(&self) -> Cow<'_, str> {
String::from_utf8_lossy(self.to_bytes()) String::from_utf8_lossy(self.to_bytes())

View File

@ -575,6 +575,8 @@ fn from_inner_mut(inner: &mut Slice) -> &mut OsStr {
/// assert_eq!(os_str.to_str(), Some("foo")); /// assert_eq!(os_str.to_str(), Some("foo"));
/// ``` /// ```
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline] #[inline]
pub fn to_str(&self) -> Option<&str> { pub fn to_str(&self) -> Option<&str> {
self.inner.to_str() self.inner.to_str()
@ -626,6 +628,8 @@ pub fn to_str(&self) -> Option<&str> {
/// } /// }
/// ``` /// ```
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline] #[inline]
pub fn to_string_lossy(&self) -> Cow<'_, str> { pub fn to_string_lossy(&self) -> Cow<'_, str> {
self.inner.to_string_lossy() self.inner.to_string_lossy()
@ -643,6 +647,8 @@ pub fn to_string_lossy(&self) -> Cow<'_, str> {
/// assert_eq!(os_string, OsString::from("foo")); /// assert_eq!(os_string, OsString::from("foo"));
/// ``` /// ```
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline] #[inline]
pub fn to_os_string(&self) -> OsString { pub fn to_os_string(&self) -> OsString {
OsString { inner: self.inner.to_owned() } OsString { inner: self.inner.to_owned() }

View File

@ -418,6 +418,8 @@ pub const fn is_ipv6(&self) -> bool {
/// assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0x7f00, 0x1)).to_canonical().is_loopback(), true); /// assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0x7f00, 0x1)).to_canonical().is_loopback(), true);
/// ``` /// ```
#[inline] #[inline]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[rustc_const_unstable(feature = "const_ip", issue = "76205")] #[rustc_const_unstable(feature = "const_ip", issue = "76205")]
#[unstable(feature = "ip", issue = "27709")] #[unstable(feature = "ip", issue = "27709")]
pub const fn to_canonical(&self) -> IpAddr { pub const fn to_canonical(&self) -> IpAddr {
@ -882,6 +884,8 @@ pub const fn is_documentation(&self) -> bool {
/// ``` /// ```
#[rustc_const_stable(feature = "const_ipv4", since = "1.50.0")] #[rustc_const_stable(feature = "const_ipv4", since = "1.50.0")]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline] #[inline]
pub const fn to_ipv6_compatible(&self) -> Ipv6Addr { pub const fn to_ipv6_compatible(&self) -> Ipv6Addr {
let [a, b, c, d] = self.octets(); let [a, b, c, d] = self.octets();
@ -907,6 +911,8 @@ pub const fn to_ipv6_compatible(&self) -> Ipv6Addr {
/// ``` /// ```
#[rustc_const_stable(feature = "const_ipv4", since = "1.50.0")] #[rustc_const_stable(feature = "const_ipv4", since = "1.50.0")]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline] #[inline]
pub const fn to_ipv6_mapped(&self) -> Ipv6Addr { pub const fn to_ipv6_mapped(&self) -> Ipv6Addr {
let [a, b, c, d] = self.octets(); let [a, b, c, d] = self.octets();
@ -1619,6 +1625,8 @@ pub const fn is_multicast(&self) -> bool {
/// ``` /// ```
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")] #[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
#[unstable(feature = "ip", issue = "27709")] #[unstable(feature = "ip", issue = "27709")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline] #[inline]
pub const fn to_ipv4_mapped(&self) -> Option<Ipv4Addr> { pub const fn to_ipv4_mapped(&self) -> Option<Ipv4Addr> {
match self.octets() { match self.octets() {
@ -1656,6 +1664,8 @@ pub const fn to_ipv4_mapped(&self) -> Option<Ipv4Addr> {
/// ``` /// ```
#[rustc_const_stable(feature = "const_ipv6", since = "1.50.0")] #[rustc_const_stable(feature = "const_ipv6", since = "1.50.0")]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline] #[inline]
pub const fn to_ipv4(&self) -> Option<Ipv4Addr> { pub const fn to_ipv4(&self) -> Option<Ipv4Addr> {
if let [0, 0, 0, 0, 0, 0 | 0xffff, ab, cd] = self.segments() { if let [0, 0, 0, 0, 0, 0 | 0xffff, ab, cd] = self.segments() {
@ -1679,9 +1689,11 @@ pub const fn to_ipv4(&self) -> Option<Ipv4Addr> {
/// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0x7f00, 0x1).is_loopback(), false); /// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0x7f00, 0x1).is_loopback(), false);
/// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0x7f00, 0x1).to_canonical().is_loopback(), true); /// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0x7f00, 0x1).to_canonical().is_loopback(), true);
/// ``` /// ```
#[inline]
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")] #[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
#[unstable(feature = "ip", issue = "27709")] #[unstable(feature = "ip", issue = "27709")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline]
pub const fn to_canonical(&self) -> IpAddr { pub const fn to_canonical(&self) -> IpAddr {
if let Some(mapped) = self.to_ipv4_mapped() { if let Some(mapped) = self.to_ipv4_mapped() {
return IpAddr::V4(mapped); return IpAddr::V4(mapped);

View File

@ -1945,6 +1945,8 @@ pub fn as_os_str(&self) -> &OsStr {
/// assert_eq!(path.to_str(), Some("foo.txt")); /// assert_eq!(path.to_str(), Some("foo.txt"));
/// ``` /// ```
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline] #[inline]
pub fn to_str(&self) -> Option<&str> { pub fn to_str(&self) -> Option<&str> {
self.inner.to_str() self.inner.to_str()
@ -1971,6 +1973,8 @@ pub fn to_str(&self) -> Option<&str> {
/// Had `path` contained invalid unicode, the `to_string_lossy` call might /// Had `path` contained invalid unicode, the `to_string_lossy` call might
/// have returned `"fo<66>.txt"`. /// have returned `"fo<66>.txt"`.
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline] #[inline]
pub fn to_string_lossy(&self) -> Cow<'_, str> { pub fn to_string_lossy(&self) -> Cow<'_, str> {
self.inner.to_string_lossy() self.inner.to_string_lossy()
@ -1987,6 +1991,8 @@ pub fn to_string_lossy(&self) -> Cow<'_, str> {
/// assert_eq!(path_buf, std::path::PathBuf::from("foo.txt")); /// assert_eq!(path_buf, std::path::PathBuf::from("foo.txt"));
/// ``` /// ```
#[rustc_conversion_suggestion] #[rustc_conversion_suggestion]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
pub fn to_path_buf(&self) -> PathBuf { pub fn to_path_buf(&self) -> PathBuf {
PathBuf::from(self.inner.to_os_string()) PathBuf::from(self.inner.to_os_string())