# manual-unwrap-or-default

Prefer unwrapOrDefault over equivalent Result pattern matching

Branching on a Result to select its successful payload or the payload type's default manually unwraps the Result.
Instead, you SHOULD use `unwrapOrDefault` to state the defaulting operation directly.

- Category: style
- Level: warning
- Fix: automatic
- Scope: module

## Reported

```ds title="main.ds"
function value<T: Default>(result: Result<T, string>): T {
    return match (result) {
        Ok { value } => value
        Err { error: _ } => T.default()
    };
}
```

## Accepted

```ds title="main.ds"
function value<T: Default>(result: Result<T, string>): T {
    return result.unwrapOrDefault();
}
```

## Prior art

- [Clippy · manual_unwrap_or_default](https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default)

[language/linter/src/rules/style/manual_unwrap_or_default.rs:8](https://github.com/destack-sh/destack/blob/main/language/linter/src/rules/style/manual_unwrap_or_default.rs#L8)
