5

What is a good way to extract data from a &Result type?

In my specific case, I have a &Result<DirEntry, Error> type, which I can't unwrap because I don't own the object. I tried to dereference and clone it (*left_item).clone(), but that just gives me a error with the note:

the method `clone` exists but the following trait bounds were not satisfied:
`std::result::Result<std::fs::DirEntry, std::io::Error> : std::clone::Clone`
Tim Diekmann
  • 7,755
  • 11
  • 41
  • 69
8176135
  • 3,755
  • 3
  • 19
  • 42

1 Answers1

9

You are looking for Result::as_ref:

Converts from Result<T, E> to Result<&T, &E>.

Produces a new Result, containing a reference into the original, leaving the original in place.

The following code solves your problem:

let entry: &DirEntry = result.as_ref().unwrap();

For a mutable version, Result::as_mut is provided.

Community
  • 1
  • 1
Tim Diekmann
  • 7,755
  • 11
  • 41
  • 69