🛠️
Notes
  • README
  • ansible
    • Literal curly braces (raw)
  • bash
    • Case statement
    • Change quote style mid-string
    • Comparing versions
    • Hiding credentials on the command line
    • Directory of script
    • Using find to run a command on multiple files
    • Getting the line number of the nth match
    • Getopts
    • Parsing output with long lines using less
    • Print line at number
    • Remove final newline
    • Reading content between markers
    • Determine if a script was sourced or executed
    • Bash substring
    • Run a function on interrupt or error
    • Reference variable by name
  • chrome
    • Bypassing Chrome's NET::ERR_CERT_INVALID page
  • css
    • box-sizing: border-box
    • The currentColor keyword
    • Wrapper taking up at least 100% height
    • Using margin: auto; for centering
    • Margin-collapse
    • Which unit to use?
    • Hiding elements
  • git
    • Conditional git config includes
    • Viewing the evolution of a line or function
    • Name of current branch
    • Get the path to the repository root
    • Replaying a set of changes on a specific branch
    • Hide file from git diff output
    • Listing untracked files with git status
  • github
    • Setting up GitHub Actions
  • groovy
    • Appending items to a list
  • kubernetes
    • Waiting for a pod to be ready
  • make
    • Passing arguments to make rules
    • Running make in a set of subdirectories
  • npm
    • Update a value in a project's .npmrc
  • podman
    • Target last container
  • rust
    • The match operator
    • Unwrapping a Result
  • tmux
    • New window with prompt
  • tools
    • Running ngrok in the background
    • Using entr to react to file changes
  • typescript
    • Inferring the type of elements in an array
  • vim
    • The command-line window
    • Populate quickfix list with eslint errors
    • Visual increment
    • Opening a list of files in split windows
    • Insert line above matched line
    • Spelling
    • The tabular plugin
    • Populate quickfix list with tsc errors
  • yaml
    • Yaml multiline strings
  • zsh
    • Lazy loading command setup
Powered by GitBook
On this page
  • Returning and the question mark
  • Sources

Was this helpful?

  1. rust

Unwrapping a Result

PreviousThe match operatorNextNew window with prompt

Last updated 4 years ago

Was this helpful?

Many functions in Rust have their return values wrapped in a . The Result type is an enum with two variants, Ok and Err.

let result = std::fs::read_to_string("test.txt");

It is common to have to handle these cases separately. One can use a match statement, like so:

let content = match result {
  Ok(content) => content,
  Err(error) => panic!("Can't deal with: {}", error),
};

but this is in fact so common that there is a shortcut method called unwrap:

let content = result.unwrap();

Returning and the question mark

If we don't want to panic (and exit), we can return an error instead:

let content = match result {
  Ok(content) => content,
  Err(error) => return Err(error.into()),
};

Just like calling .unwrap() on a Result is a shortcut for match with panic! in the error arm, ? is a shortcut for a match with a return in the error arm:

let content = result?;

Sources

result
Unwrapping
Question mark