Add str.as_str() for easy dereferencing of Box · qinheping/verify-rust-std@81c4805 (original) (raw)

3 files changed

lines changed

Original file line number Diff line number Diff line change
@@ -93,6 +93,7 @@
93 93 // tidy-alphabetical-start
94 94 #![cfg_attr(not(no_global_oom_handling), feature(const_alloc_error))]
95 95 #![cfg_attr(not(no_global_oom_handling), feature(const_btree_len))]
96 +#![cfg_attr(test, feature(str_as_str))]
96 97 #![feature(alloc_layout_extra)]
97 98 #![feature(allocator_api)]
98 99 #![feature(array_chunks)]
Original file line number Diff line number Diff line change
@@ -448,7 +448,11 @@ fn test_from_box_str() {
448 448 use std:🧵:String;
449 449
450 450 let s = String::from("foo").into_boxed_str();
451 +assert_eq!((&&&s).as_str(), "foo");
452 +
451 453 let r: Rc<str> = Rc::from(s);
454 +assert_eq!((&r).as_str(), "foo");
455 +assert_eq!(r.as_str(), "foo");
452 456
453 457 assert_eq!(&r[..], "foo");
454 458 }
Original file line number Diff line number Diff line change
@@ -2737,6 +2737,17 @@ impl str {
2737 2737 pub fn substr_range(&self, substr: &str) -> Option<Range<usize>> {
2738 2738 self.as_bytes().subslice_range(substr.as_bytes())
2739 2739 }
2740 +
2741 +/// Returns the same string as a string slice `&str`.
2742 + ///
2743 + /// This method is redundant when used directly on `&str`, but
2744 + /// it helps dereferencing other string-like types to string slices,
2745 + /// for example references to `Box` or `Arc`.
2746 + #[inline]
2747 +#[unstable(feature = "str_as_str", issue = "130366")]
2748 +pub fn as_str(&self) -> &str {
2749 +self
2750 +}
2740 2751 }
2741 2752
2742 2753 #[stable(feature = "rust1", since = "1.0.0")]