error: this pattern reimplements `Option::ok_or`
  --> tests/ui/manual_ok_or.rs:11:5
   |
LL |     foo.map_or(Err("error"), |v| Ok(v));
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `foo.ok_or("error")`
   |
   = note: `-D clippy::manual-ok-or` implied by `-D warnings`
   = help: to override `-D warnings` add `#[allow(clippy::manual_ok_or)]`

error: this pattern reimplements `Option::ok_or`
  --> tests/ui/manual_ok_or.rs:14:5
   |
LL |     foo.map_or(Err("error"), Ok);
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `foo.ok_or("error")`

error: called `map_or(Err(_), Ok)` on an `Option` value
  --> tests/ui/manual_ok_or.rs:14:5
   |
LL |     foo.map_or(Err("error"), Ok);
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `ok_or`: `foo.ok_or("error")`
   |
   = note: `-D clippy::option-map-or-err-ok` implied by `-D warnings`
   = help: to override `-D warnings` add `#[allow(clippy::option_map_or_err_ok)]`

error: this pattern reimplements `Option::ok_or`
  --> tests/ui/manual_ok_or.rs:17:5
   |
LL |     None::<i32>.map_or(Err("error"), |v| Ok(v));
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `None::<i32>.ok_or("error")`

error: this pattern reimplements `Option::ok_or`
  --> tests/ui/manual_ok_or.rs:21:5
   |
LL | /     foo.map_or(Err::<i32, &str>(
LL | |         &format!(
LL | |             "{}{}{}{}{}{}{}",
LL | |             "Alice", "Bob", "Sarah", "Marc", "Sandra", "Eric", "Jenifer")
LL | |         ),
LL | |         |v| Ok(v),
LL | |     );
   | |_____^
   |
help: replace with
   |
LL ~     foo.ok_or(&format!(
LL +         "{}{}{}{}{}{}{}",
LL ~         "Alice", "Bob", "Sarah", "Marc", "Sandra", "Eric", "Jenifer"));
   |

error: aborting due to 5 previous errors

