1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/// Result<????, E> -> Result<(), E>
pub trait DropOk<E>
{
 /// Only drop Ok value, no drop Err value.
 /// # Example
 /// ```
 /// use drop_ok::DropOk;
 ///
 /// struct MyError{}
 ///
 /// fn some_function() -> Result<(), MyError>
 /// {
 ///  match "something"
 ///  {
 ///   "pattern-x" => some_task1().drop_ok()?,
 ///   "pattern-y" => some_task2().drop_ok()?,
 ///   "pattern-z" => some_task3()?,
 ///   "pattern-w" => some_task4(),
 ///   _ => ()
 ///  }
 ///  Ok(())
 /// }
 ///
 /// fn some_task1()     -> Result<i8     , MyError> { Ok(1) }
 /// fn some_task2<'a>() -> Result<&'a str, MyError> { Ok("abc") }
 /// fn some_task3()     -> Result<()     , MyError> { Ok(()) }
 /// fn some_task4() { }
 /// ```
 /// See also: <https://github.com/usagi/drop_ok/tests/test.rs>
 fn drop_ok(self) -> Result<(), E>;
}

impl<V, E> DropOk<E> for Result<V, E>
{
 fn drop_ok(self) -> Result<(), E>
 {
  self.map(|_| ())
 }
}