Rollup merge of #89869 - kpreid:from-doc, r=yaahc
Add documentation to more `From::from` implementations. For users looking at documentation through IDE popups, this gives them relevant information rather than the generic trait documentation wording “Performs the conversion”. For users reading the documentation for a specific type for any reason, this informs them when the conversion may allocate or copy significant memory versus when it is always a move or cheap copy. Notes on specific cases: * The new documentation for `From<T> for T` explains that it is not a conversion at all. * Also documented `impl<T, U> Into<U> for T where U: From<T>`, the other central blanket implementation of conversion. * The new documentation for construction of maps and sets from arrays of keys mentions the handling of duplicates. Future work could be to do this for *all* code paths that convert an iterable to a map or set. * I did not add documentation to conversions of a specific error type to a more general error type. * I did not add documentation to unstable code. This change was prepared by searching for the text "From<... for" and so may have missed some cases that for whatever reason did not match. I also looked for `Into` impls but did not find any worth documenting by the above criteria.
This commit is contained in:
@@ -315,6 +315,7 @@ impl<T: Ord + Copy> Ord for Cell<T> {
|
||||
#[stable(feature = "cell_from", since = "1.12.0")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "88674")]
|
||||
impl<T> const From<T> for Cell<T> {
|
||||
/// Creates a new `Cell<T>` containing the given value.
|
||||
fn from(t: T) -> Cell<T> {
|
||||
Cell::new(t)
|
||||
}
|
||||
@@ -1244,6 +1245,7 @@ impl<T: ?Sized + Ord> Ord for RefCell<T> {
|
||||
#[stable(feature = "cell_from", since = "1.12.0")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "88674")]
|
||||
impl<T> const From<T> for RefCell<T> {
|
||||
/// Creates a new `RefCell<T>` containing the given value.
|
||||
fn from(t: T) -> RefCell<T> {
|
||||
RefCell::new(t)
|
||||
}
|
||||
@@ -1979,6 +1981,7 @@ impl<T: Default> Default for UnsafeCell<T> {
|
||||
#[stable(feature = "cell_from", since = "1.12.0")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "88674")]
|
||||
impl<T> const From<T> for UnsafeCell<T> {
|
||||
/// Creates a new `UnsafeCell<T>` containing the given value.
|
||||
fn from(t: T) -> UnsafeCell<T> {
|
||||
UnsafeCell::new(t)
|
||||
}
|
||||
|
||||
@@ -538,6 +538,10 @@ impl<T, U> const Into<U> for T
|
||||
where
|
||||
U: ~const From<T>,
|
||||
{
|
||||
/// Calls `U::from(self)`.
|
||||
///
|
||||
/// That is, this conversion is whatever the implementation of
|
||||
/// <code>[From]<T> for U</code> chooses to do.
|
||||
fn into(self) -> U {
|
||||
U::from(self)
|
||||
}
|
||||
@@ -547,6 +551,7 @@ where
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "88674")]
|
||||
impl<T> const From<T> for T {
|
||||
/// Returns the argument unchanged.
|
||||
fn from(t: T) -> T {
|
||||
t
|
||||
}
|
||||
|
||||
@@ -75,6 +75,7 @@ impl<T: Eq> Eq for OnceCell<T> {}
|
||||
|
||||
#[unstable(feature = "once_cell", issue = "74465")]
|
||||
impl<T> const From<T> for OnceCell<T> {
|
||||
/// Creates a new `OnceCell<T>` which already contains the given `value`.
|
||||
fn from(value: T) -> Self {
|
||||
OnceCell { inner: UnsafeCell::new(Some(value)) }
|
||||
}
|
||||
|
||||
@@ -721,6 +721,9 @@ impl<T: ?Sized> const From<Unique<T>> for NonNull<T> {
|
||||
#[stable(feature = "nonnull", since = "1.25.0")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "88674")]
|
||||
impl<T: ?Sized> const From<&mut T> for NonNull<T> {
|
||||
/// Converts a `&mut T` to a `NonNull<T>`.
|
||||
///
|
||||
/// This conversion is safe and infallible since references cannot be null.
|
||||
#[inline]
|
||||
fn from(reference: &mut T) -> Self {
|
||||
// SAFETY: A mutable reference cannot be null.
|
||||
@@ -731,6 +734,9 @@ impl<T: ?Sized> const From<&mut T> for NonNull<T> {
|
||||
#[stable(feature = "nonnull", since = "1.25.0")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "88674")]
|
||||
impl<T: ?Sized> const From<&T> for NonNull<T> {
|
||||
/// Converts a `&T` to a `NonNull<T>`.
|
||||
///
|
||||
/// This conversion is safe and infallible since references cannot be null.
|
||||
#[inline]
|
||||
fn from(reference: &T) -> Self {
|
||||
// SAFETY: A reference cannot be null, so the conditions for
|
||||
|
||||
@@ -178,6 +178,9 @@ impl<T: ?Sized> fmt::Pointer for Unique<T> {
|
||||
|
||||
#[unstable(feature = "ptr_internals", issue = "none")]
|
||||
impl<T: ?Sized> const From<&mut T> for Unique<T> {
|
||||
/// Converts a `&mut T` to a `Unique<T>`.
|
||||
///
|
||||
/// This conversion is infallible since references cannot be null.
|
||||
#[inline]
|
||||
fn from(reference: &mut T) -> Self {
|
||||
// SAFETY: A mutable reference cannot be null
|
||||
|
||||
@@ -1295,6 +1295,7 @@ impl const From<bool> for AtomicBool {
|
||||
#[stable(feature = "atomic_from", since = "1.23.0")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "88674")]
|
||||
impl<T> const From<*mut T> for AtomicPtr<T> {
|
||||
/// Converts a `*mut T` into an `AtomicPtr<T>`.
|
||||
#[inline]
|
||||
fn from(p: *mut T) -> Self {
|
||||
Self::new(p)
|
||||
|
||||
@@ -243,7 +243,7 @@ impl<T, E> Poll<Option<Result<T, E>>> {
|
||||
#[stable(feature = "futures_api", since = "1.36.0")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "88674")]
|
||||
impl<T> const From<T> for Poll<T> {
|
||||
/// Convert to a `Ready` variant.
|
||||
/// Moves the value into a [`Poll::Ready`] to make a `Poll<T>`.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
|
||||
Reference in New Issue
Block a user