Skip to content

Commit

Permalink
Document From trait for Option implementations
Browse files Browse the repository at this point in the history
  • Loading branch information
Dolpheyn committed May 4, 2020
1 parent 6318d24 commit 5cb2fa4
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions src/libcore/option.rs
Expand Up @@ -1357,12 +1357,38 @@ impl<'a, T> IntoIterator for &'a mut Option<T> {

#[stable(since = "1.12.0", feature = "option_from")]
impl<T> From<T> for Option<T> {
/// Copies val to a new Option::Some
///
/// # Examples
///
/// ```
/// let o: Option<u8> = Option::from(67);
/// assert_eq!(Some(67), o);
/// ```
fn from(val: T) -> Option<T> {
Some(val)
}
}

#[stable(feature = "option_ref_from_ref_option", since = "1.30.0")]
/// Converts from &Option<T> to Option<&T>
///
/// # Examples
/// Converts an `Option<`[`String`]`>` into an `Option<`[`usize`]`>`, preserving the original.
/// The [`map`] method takes the `self` argument by value, consuming the original,
/// so this technique uses `as_ref` to first take an `Option` to a reference
/// to the value inside the original.
///
/// [`map`]: enum.Option.html#method.map
/// [`String`]: ../../std/string/struct.String.html
/// [`usize`]: ../../std/primitive.usize.html
///
/// ```
/// let s: Option<String> = Some(String::from("Hello, Rustaceans!"));
/// let o: Option<usize> = Option::from(&s).map(|ss: &String| ss.len());
/// println!("Can still print s: {}", s);
/// assert_eq!(o, Some(18));
/// ```
impl<'a, T> From<&'a Option<T>> for Option<&'a T> {
fn from(o: &'a Option<T>) -> Option<&'a T> {
o.as_ref()
Expand All @@ -1371,6 +1397,19 @@ impl<'a, T> From<&'a Option<T>> for Option<&'a T> {

#[stable(feature = "option_ref_from_ref_option", since = "1.30.0")]
impl<'a, T> From<&'a mut Option<T>> for Option<&'a mut T> {
/// Converts from &mut Option<T> to Option<&mut T>
///
/// # Examples
///
/// ```
/// let mut s = Some(String::from("Hello"));
/// let o: Option<&mut String> = Option::from(&mut s);
/// match o {
/// Some(t) => *t = String::from("Hello, Rustaceans!"),
/// None => (),
/// }
/// assert_eq!(s, Some(String::from("Hello, Rustaceans!")));
/// ```
fn from(o: &'a mut Option<T>) -> Option<&'a mut T> {
o.as_mut()
}
Expand Down

0 comments on commit 5cb2fa4

Please sign in to comment.