1#![no_std]
4
5pub trait ResultExt<O, E> {
9 fn map_auto<O2, E2>(self) -> Result<O2, E2> where
11 O2: From<O>,
12 E2: From<E>;
13}
14
15pub trait OptionExt<T> {
19 fn unwrap_or_auto<T2>(self, default: T2) -> T2 where
21 T2: From<T>;
22 fn map_auto<T2>(self) -> Option<T2> where
24 T2: From<T>;
25 fn ok_or_auto<O, E>(self, err: E) -> Result<O, E> where
27 O: From<T>;
28}
29
30impl<O, E> ResultExt<O, E> for Result<O, E> {
31 #[inline]
32 fn map_auto<O2, E2>(self) -> Result<O2, E2> where
33 O2: From<O>,
34 E2: From<E>
35 {
36 match self {
37 Err(e) => Err(E2::from(e)),
38 Ok(o) => Ok(O2::from(o)),
39 }
40 }
41}
42
43impl<T> OptionExt<T> for Option<T> {
44 #[inline]
45 fn unwrap_or_auto<T2>(self, default: T2) -> T2 where
46 T2: From<T>
47 {
48 match self {
49 None => default,
50 Some(t) => T2::from(t),
51 }
52 }
53
54 #[inline]
55 fn map_auto<T2>(self) -> Option<T2> where
56 T2: From<T>
57 {
58 match self {
59 None => None,
60 Some(t) => Some(T2::from(t)),
61 }
62 }
63
64 #[inline]
65 fn ok_or_auto<O, E>(self, err: E) -> Result<O, E> where
66 O: From<T>
67 {
68 match self {
69 None => Err(err),
70 Some(t) => Ok(O::from(t)),
71 }
72 }
73}