From ef519c1de54e6d833d05bac7c4ce290ae54e82dc Mon Sep 17 00:00:00 2001 From: Georg Semmler Date: Thu, 9 Aug 2018 11:02:08 +0200 Subject: [PATCH 1/3] Add a implementation of `From` for converting `&'a Option` into `Option<&'a T>` --- src/libcore/option.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/libcore/option.rs b/src/libcore/option.rs index 2b6c376f8a7..ad69d137685 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -1064,6 +1064,12 @@ impl From for Option { } } +impl<'a, T> From<&'a Option> for Option<&'a T> { + fn from(o: &'a Option) -> Option<&'a T> { + o.as_ref() + } +} + ///////////////////////////////////////////////////////////////////////////// // The Option Iterators ///////////////////////////////////////////////////////////////////////////// From 0cde1cbb10b044c17e1569ab0306db11735ca798 Mon Sep 17 00:00:00 2001 From: Georg Semmler Date: Thu, 9 Aug 2018 12:48:55 +0200 Subject: [PATCH 2/3] Add stability attribute --- src/libcore/option.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libcore/option.rs b/src/libcore/option.rs index ad69d137685..883e01ff2a8 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -1064,6 +1064,7 @@ impl From for Option { } } +#[stable(feature = "option_ref_from_ref_option", since = "1.30.0")] impl<'a, T> From<&'a Option> for Option<&'a T> { fn from(o: &'a Option) -> Option<&'a T> { o.as_ref() From a7a0225a281bbb9306862e647aee2f51aa595086 Mon Sep 17 00:00:00 2001 From: Georg Semmler Date: Fri, 10 Aug 2018 14:21:17 +0200 Subject: [PATCH 3/3] Also add a `From` implementation for `&mut Option` -> `Option<&mut T>' --- src/libcore/option.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/libcore/option.rs b/src/libcore/option.rs index 883e01ff2a8..32a0a8b3c51 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -1071,6 +1071,13 @@ impl<'a, T> From<&'a Option> for Option<&'a T> { } } +#[stable(feature = "option_ref_from_ref_option", since = "1.30.0")] +impl<'a, T> From<&'a mut Option> for Option<&'a mut T> { + fn from(o: &'a mut Option) -> Option<&'a mut T> { + o.as_mut() + } +} + ///////////////////////////////////////////////////////////////////////////// // The Option Iterators /////////////////////////////////////////////////////////////////////////////