ps_promise/methods/consume.rs
1use std::mem::replace;
2
3use crate::{Promise, PromiseRejection};
4
5impl<T, E> Promise<T, E>
6where
7 T: Unpin,
8 E: PromiseRejection,
9{
10 /// If settled, consumes and returns the result.
11 /// Returns `None` if still pending.
12 pub fn consume(&mut self) -> Option<Result<T, E>> {
13 match replace(self, Self::Consumed) {
14 Self::Resolved(val) => Some(Ok(val)),
15 Self::Rejected(err) => Some(Err(err)),
16 Self::Consumed => Some(Err(E::already_consumed())),
17 other @ Self::Pending(_) => {
18 *self = other;
19 None
20 }
21 }
22 }
23}