Skip to content

Commit 25e4447

Browse files
committed
renamed inner_deref feature's deref*() methods as_deref*() as per discussion #50264
1 parent eab3eb3 commit 25e4447

19 files changed

+113
-116
lines changed

src/libcore/option.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -991,11 +991,11 @@ impl<T: Default> Option<T> {
991991

992992
#[unstable(feature = "inner_deref", reason = "newly added", issue = "50264")]
993993
impl<T: Deref> Option<T> {
994-
/// Converts from `&Option<T>` to `Option<&T::Target>`.
994+
/// Converts from `Option<T>` (or `&Option<T>`) to `Option<&T::Target>`.
995995
///
996-
/// Leaves the original Option in-place, creating a new one with a reference
997-
/// to the original one, additionally coercing the contents via `Deref`.
998-
pub fn deref(&self) -> Option<&T::Target> {
996+
/// Leaves the original `Option` in-place, creating a new one containing a reference to the
997+
/// inner type's `Deref::Target` type.
998+
pub fn as_deref(&self) -> Option<&T::Target> {
999999
self.as_ref().map(|t| t.deref())
10001000
}
10011001
}

src/libcore/result.rs

+12-15
Original file line numberDiff line numberDiff line change
@@ -927,37 +927,34 @@ impl<T: Default, E> Result<T, E> {
927927

928928
#[unstable(feature = "inner_deref", reason = "newly added", issue = "50264")]
929929
impl<T: Deref, E> Result<T, E> {
930-
/// Converts from `&Result<T, E>` to `Result<&T::Target, &E>`.
930+
/// Converts from `&Result<T, E>` (or `&Result<T, E>`) to `Result<&T::Target, &E>`.
931931
///
932-
/// Leaves the original Result in-place, creating a new one with a reference
933-
/// to the original one, additionally coercing the `Ok` arm of the Result via
934-
/// `Deref`.
935-
pub fn deref_ok(&self) -> Result<&T::Target, &E> {
932+
/// Leaves the original `Result` in-place, creating a new one containing a reference to the
933+
/// `Ok` type's `Deref::Target` type.
934+
pub fn as_deref_ok(&self) -> Result<&T::Target, &E> {
936935
self.as_ref().map(|t| t.deref())
937936
}
938937
}
939938

940939
#[unstable(feature = "inner_deref", reason = "newly added", issue = "50264")]
941940
impl<T, E: Deref> Result<T, E> {
942-
/// Converts from `&Result<T, E>` to `Result<&T, &E::Target>`.
941+
/// Converts from `&Result<T, E>` (or `&Result<T, E>`) to `Result<&T, &E::Target>`.
943942
///
944-
/// Leaves the original Result in-place, creating a new one with a reference
945-
/// to the original one, additionally coercing the `Err` arm of the Result via
946-
/// `Deref`.
947-
pub fn deref_err(&self) -> Result<&T, &E::Target>
943+
/// Leaves the original `Result` in-place, creating a new one containing a reference to the
944+
/// `Err` type's `Deref::Target` type.
945+
pub fn as_deref_err(&self) -> Result<&T, &E::Target>
948946
{
949947
self.as_ref().map_err(|e| e.deref())
950948
}
951949
}
952950

953951
#[unstable(feature = "inner_deref", reason = "newly added", issue = "50264")]
954952
impl<T: Deref, E: Deref> Result<T, E> {
955-
/// Converts from `&Result<T, E>` to `Result<&T::Target, &E::Target>`.
953+
/// Converts from `&Result<T, E>` (or `&Result<T, E>`) to `Result<&T::Target, &E::Target>`.
956954
///
957-
/// Leaves the original Result in-place, creating a new one with a reference
958-
/// to the original one, additionally coercing both the `Ok` and `Err` arms
959-
/// of the Result via `Deref`.
960-
pub fn deref(&self) -> Result<&T::Target, &E::Target>
955+
/// Leaves the original `Result` in-place, creating a new one containing a reference to both
956+
/// the `Ok` and `Err` types' `Deref::Target` types.
957+
pub fn as_deref(&self) -> Result<&T::Target, &E::Target>
961958
{
962959
self.as_ref().map(|t| t.deref()).map_err(|e| e.deref())
963960
}

src/libcore/tests/option.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -310,20 +310,20 @@ fn test_try() {
310310
}
311311

312312
#[test]
313-
fn test_option_deref() {
313+
fn test_option_as_deref() {
314314
// Some: &Option<T: Deref>::Some(T) -> Option<&T::Deref::Target>::Some(&*T)
315315
let ref_option = &Some(&42);
316-
assert_eq!(ref_option.deref(), Some(&42));
316+
assert_eq!(ref_option.as_deref(), Some(&42));
317317

318318
let ref_option = &Some(String::from("a result"));
319-
assert_eq!(ref_option.deref(), Some("a result"));
319+
assert_eq!(ref_option.as_deref(), Some("a result"));
320320

321321
let ref_option = &Some(vec![1, 2, 3, 4, 5]);
322-
assert_eq!(ref_option.deref(), Some(&[1, 2, 3, 4, 5][..]));
322+
assert_eq!(ref_option.as_deref(), Some(&[1, 2, 3, 4, 5][..]));
323323

324324
// None: &Option<T: Deref>>::None -> None
325325
let ref_option: &Option<&i32> = &None;
326-
assert_eq!(ref_option.deref(), None);
326+
assert_eq!(ref_option.as_deref(), None);
327327
}
328328

329329
#[test]

src/libcore/tests/result.rs

+28-28
Original file line numberDiff line numberDiff line change
@@ -225,94 +225,94 @@ fn test_try() {
225225
}
226226

227227
#[test]
228-
fn test_result_deref() {
229-
// &Result<T: Deref, E>::Ok(T).deref_ok() ->
228+
fn test_result_as_deref() {
229+
// &Result<T: Deref, E>::Ok(T).as_deref_ok() ->
230230
// Result<&T::Deref::Target, &E>::Ok(&*T)
231231
let ref_ok = &Result::Ok::<&i32, u8>(&42);
232232
let expected_result = Result::Ok::<&i32, &u8>(&42);
233-
assert_eq!(ref_ok.deref_ok(), expected_result);
233+
assert_eq!(ref_ok.as_deref_ok(), expected_result);
234234

235235
let ref_ok = &Result::Ok::<String, u32>(String::from("a result"));
236236
let expected_result = Result::Ok::<&str, &u32>("a result");
237-
assert_eq!(ref_ok.deref_ok(), expected_result);
237+
assert_eq!(ref_ok.as_deref_ok(), expected_result);
238238

239239
let ref_ok = &Result::Ok::<Vec<i32>, u32>(vec![1, 2, 3, 4, 5]);
240240
let expected_result = Result::Ok::<&[i32], &u32>(&[1, 2, 3, 4, 5][..]);
241-
assert_eq!(ref_ok.deref_ok(), expected_result);
241+
assert_eq!(ref_ok.as_deref_ok(), expected_result);
242242

243-
// &Result<T: Deref, E: Deref>::Ok(T).deref() ->
243+
// &Result<T: Deref, E: Deref>::Ok(T).as_deref() ->
244244
// Result<&T::Deref::Target, &E::Deref::Target>::Ok(&*T)
245245
let ref_ok = &Result::Ok::<&i32, &u8>(&42);
246246
let expected_result = Result::Ok::<&i32, &u8>(&42);
247-
assert_eq!(ref_ok.deref(), expected_result);
247+
assert_eq!(ref_ok.as_deref(), expected_result);
248248

249249
let ref_ok = &Result::Ok::<String, &u32>(String::from("a result"));
250250
let expected_result = Result::Ok::<&str, &u32>("a result");
251-
assert_eq!(ref_ok.deref(), expected_result);
251+
assert_eq!(ref_ok.as_deref(), expected_result);
252252

253253
let ref_ok = &Result::Ok::<Vec<i32>, &u32>(vec![1, 2, 3, 4, 5]);
254254
let expected_result = Result::Ok::<&[i32], &u32>(&[1, 2, 3, 4, 5][..]);
255-
assert_eq!(ref_ok.deref(), expected_result);
255+
assert_eq!(ref_ok.as_deref(), expected_result);
256256

257-
// &Result<T, E: Deref>::Err(T).deref_err() ->
257+
// &Result<T, E: Deref>::Err(T).as_deref_err() ->
258258
// Result<&T, &E::Deref::Target>::Err(&*E)
259259
let ref_err = &Result::Err::<u8, &i32>(&41);
260260
let expected_result = Result::Err::<&u8, &i32>(&41);
261-
assert_eq!(ref_err.deref_err(), expected_result);
261+
assert_eq!(ref_err.as_deref_err(), expected_result);
262262

263263
let ref_err = &Result::Err::<u32, String>(String::from("an error"));
264264
let expected_result = Result::Err::<&u32, &str>("an error");
265-
assert_eq!(ref_err.deref_err(), expected_result);
265+
assert_eq!(ref_err.as_deref_err(), expected_result);
266266

267267
let ref_err = &Result::Err::<u32, Vec<i32>>(vec![5, 4, 3, 2, 1]);
268268
let expected_result = Result::Err::<&u32, &[i32]>(&[5, 4, 3, 2, 1][..]);
269-
assert_eq!(ref_err.deref_err(), expected_result);
269+
assert_eq!(ref_err.as_deref_err(), expected_result);
270270

271-
// &Result<T: Deref, E: Deref>::Err(T).deref_err() ->
271+
// &Result<T: Deref, E: Deref>::Err(T).as_deref_err() ->
272272
// Result<&T, &E::Deref::Target>::Err(&*E)
273273
let ref_err = &Result::Err::<&u8, &i32>(&41);
274274
let expected_result = Result::Err::<&u8, &i32>(&41);
275-
assert_eq!(ref_err.deref(), expected_result);
275+
assert_eq!(ref_err.as_deref(), expected_result);
276276

277277
let ref_err = &Result::Err::<&u32, String>(String::from("an error"));
278278
let expected_result = Result::Err::<&u32, &str>("an error");
279-
assert_eq!(ref_err.deref(), expected_result);
279+
assert_eq!(ref_err.as_deref(), expected_result);
280280

281281
let ref_err = &Result::Err::<&u32, Vec<i32>>(vec![5, 4, 3, 2, 1]);
282282
let expected_result = Result::Err::<&u32, &[i32]>(&[5, 4, 3, 2, 1][..]);
283-
assert_eq!(ref_err.deref(), expected_result);
283+
assert_eq!(ref_err.as_deref(), expected_result);
284284

285-
// The following cases test calling deref_* with the wrong variant (i.e.
286-
// `deref_ok()` with a `Result::Err()`, or `deref_err()` with a `Result::Ok()`.
287-
// While unusual, these cases are supported to ensure that an `inner_deref`
285+
// The following cases test calling `as_deref_*` with the wrong variant (i.e.
286+
// `as_deref_ok()` with a `Result::Err()`, or `as_deref_err()` with a `Result::Ok()`.
287+
// While uncommon, these cases are supported to ensure that an `as_deref_*`
288288
// call can still be made even when one of the Result types does not implement
289289
// `Deref` (for example, std::io::Error).
290290

291-
// &Result<T, E: Deref>::Ok(T).deref_err() ->
291+
// &Result<T, E: Deref>::Ok(T).as_deref_err() ->
292292
// Result<&T, &E::Deref::Target>::Ok(&T)
293293
let ref_ok = &Result::Ok::<i32, &u8>(42);
294294
let expected_result = Result::Ok::<&i32, &u8>(&42);
295-
assert_eq!(ref_ok.deref_err(), expected_result);
295+
assert_eq!(ref_ok.as_deref_err(), expected_result);
296296

297297
let ref_ok = &Result::Ok::<&str, &u32>("a result");
298298
let expected_result = Result::Ok::<&&str, &u32>(&"a result");
299-
assert_eq!(ref_ok.deref_err(), expected_result);
299+
assert_eq!(ref_ok.as_deref_err(), expected_result);
300300

301301
let ref_ok = &Result::Ok::<[i32; 5], &u32>([1, 2, 3, 4, 5]);
302302
let expected_result = Result::Ok::<&[i32; 5], &u32>(&[1, 2, 3, 4, 5]);
303-
assert_eq!(ref_ok.deref_err(), expected_result);
303+
assert_eq!(ref_ok.as_deref_err(), expected_result);
304304

305-
// &Result<T: Deref, E>::Err(E).deref_ok() ->
305+
// &Result<T: Deref, E>::Err(E).as_deref_ok() ->
306306
// Result<&T::Deref::Target, &E>::Err(&E)
307307
let ref_err = &Result::Err::<&u8, i32>(41);
308308
let expected_result = Result::Err::<&u8, &i32>(&41);
309-
assert_eq!(ref_err.deref_ok(), expected_result);
309+
assert_eq!(ref_err.as_deref_ok(), expected_result);
310310

311311
let ref_err = &Result::Err::<&u32, &str>("an error");
312312
let expected_result = Result::Err::<&u32, &&str>(&"an error");
313-
assert_eq!(ref_err.deref_ok(), expected_result);
313+
assert_eq!(ref_err.as_deref_ok(), expected_result);
314314

315315
let ref_err = &Result::Err::<&u32, [i32; 5]>([5, 4, 3, 2, 1]);
316316
let expected_result = Result::Err::<&u32, &[i32; 5]>(&[5, 4, 3, 2, 1]);
317-
assert_eq!(ref_err.deref_ok(), expected_result);
317+
assert_eq!(ref_err.as_deref_ok(), expected_result);
318318
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#![feature(inner_deref)]
2+
3+
fn main() {
4+
let _result = &Some(42).as_deref();
5+
//~^ ERROR no method named `as_deref` found for type `std::option::Option<{integer}>`
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
error[E0599]: no method named `as_deref` found for type `std::option::Option<{integer}>` in the current scope
2+
--> $DIR/option-as_deref.rs:4:29
3+
|
4+
LL | let _result = &Some(42).as_deref();
5+
| ^^^^^^^^
6+
|
7+
= note: the method `as_deref` exists but the following trait bounds were not satisfied:
8+
`{integer} : std::ops::Deref`
9+
10+
error: aborting due to previous error
11+
12+
For more information about this error, try `rustc --explain E0599`.

src/test/ui/issues/issue-50264-inner-deref-trait/option-deref.rs

-6
This file was deleted.

src/test/ui/issues/issue-50264-inner-deref-trait/option-deref.stderr

-12
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#![feature(inner_deref)]
2+
3+
fn main() {
4+
let _result = &Ok(42).as_deref();
5+
//~^ ERROR no method named `as_deref` found
6+
}

src/test/ui/issues/issue-50264-inner-deref-trait/result-deref-ok.stderr renamed to src/test/ui/issues/issue-50264-inner-deref-trait/result-as_deref.stderr

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
error[E0599]: no method named `deref_ok` found for type `std::result::Result<{integer}, _>` in the current scope
2-
--> $DIR/result-deref-ok.rs:4:27
1+
error[E0599]: no method named `as_deref` found for type `std::result::Result<{integer}, _>` in the current scope
2+
--> $DIR/result-as_deref.rs:4:27
33
|
4-
LL | let _result = &Ok(42).deref_ok();
4+
LL | let _result = &Ok(42).as_deref();
55
| ^^^^^^^^
66
|
7-
= note: the method `deref_ok` exists but the following trait bounds were not satisfied:
7+
= note: the method `as_deref` exists but the following trait bounds were not satisfied:
88
`{integer} : std::ops::Deref`
99

1010
error: aborting due to previous error
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#![feature(inner_deref)]
2+
3+
fn main() {
4+
let _result = &Err(41).as_deref_err();
5+
//~^ ERROR no method named `as_deref_err` found
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
error[E0599]: no method named `as_deref_err` found for type `std::result::Result<_, {integer}>` in the current scope
2+
--> $DIR/result-as_deref_err.rs:4:28
3+
|
4+
LL | let _result = &Err(41).as_deref_err();
5+
| ^^^^^^^^^^^^
6+
|
7+
= note: the method `as_deref_err` exists but the following trait bounds were not satisfied:
8+
`{integer} : std::ops::Deref`
9+
10+
error: aborting due to previous error
11+
12+
For more information about this error, try `rustc --explain E0599`.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#![feature(inner_deref)]
2+
3+
fn main() {
4+
let _result = &Ok(42).as_deref_ok();
5+
//~^ ERROR no method named `as_deref_ok` found
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
error[E0599]: no method named `as_deref_ok` found for type `std::result::Result<{integer}, _>` in the current scope
2+
--> $DIR/result-as_deref_ok.rs:4:27
3+
|
4+
LL | let _result = &Ok(42).as_deref_ok();
5+
| ^^^^^^^^^^^
6+
|
7+
= note: the method `as_deref_ok` exists but the following trait bounds were not satisfied:
8+
`{integer} : std::ops::Deref`
9+
10+
error: aborting due to previous error
11+
12+
For more information about this error, try `rustc --explain E0599`.

src/test/ui/issues/issue-50264-inner-deref-trait/result-deref-err.rs

-6
This file was deleted.

src/test/ui/issues/issue-50264-inner-deref-trait/result-deref-err.stderr

-12
This file was deleted.

src/test/ui/issues/issue-50264-inner-deref-trait/result-deref-ok.rs

-6
This file was deleted.

src/test/ui/issues/issue-50264-inner-deref-trait/result-deref.rs

-6
This file was deleted.

src/test/ui/issues/issue-50264-inner-deref-trait/result-deref.stderr

-12
This file was deleted.

0 commit comments

Comments
 (0)