Skip to content

Commit f333266

Browse files
committed
Add future::unwrap_or_else implementation
1 parent 768d7dd commit f333266

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Future
2828
- [ ] future::poll_fn
2929
- [x] future::ready
3030
- [x] future::then
31-
- [ ] future::unwrap_or_else
31+
- [x] future::unwrap_or_else
3232

3333
Stream
3434

src/future.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,14 @@ pub async fn err_into<Fut, T, E, U>(future: Fut) -> Result<T,U>
9393
future_result.map_err(Into::into)
9494
}
9595

96+
pub async fn unwrap_or_else<Fut, T, E, F>(future: Fut, f: F) -> T
97+
where Fut: Future<Output = Result<T,E>>,
98+
F: FnOnce(E) -> T,
99+
{
100+
let future_result = await!(future);
101+
future_result.unwrap_or_else(f)
102+
}
103+
96104
#[cfg(test)]
97105
mod tests {
98106
use futures::executor;
@@ -187,4 +195,13 @@ mod tests {
187195
assert_eq!(await!(future_err_i32), Err::<(), i32>(1));
188196
});
189197
}
198+
199+
#[test]
200+
fn test_unwrap_or_else() {
201+
executor::block_on(async {
202+
let future = ready(Err::<(), &str>("Boom!"));
203+
let new_future = unwrap_or_else(future, |_| ());
204+
assert_eq!(await!(new_future), ());
205+
});
206+
}
190207
}

0 commit comments

Comments
 (0)