nodejs_resolver/
state.rs

1use crate::{Error, Info, ResolveResult};
2
3#[derive(Debug)]
4pub enum State {
5    Success(ResolveResult<Info>),
6    Resolving(Info),
7    /// return error directly
8    Error(Error),
9    /// forEachBail
10    Failed(Info),
11}
12
13impl State {
14    pub fn then<F: FnOnce(Info) -> State>(self, op: F) -> Self {
15        match self {
16            State::Resolving(info) => op(info),
17            _ => self,
18        }
19    }
20
21    pub fn map_success<F: FnOnce(Info) -> State>(self, op: F) -> Self {
22        match self {
23            State::Success(ResolveResult::Resource(info)) => op(info),
24            _ => self,
25        }
26    }
27
28    pub fn map_failed<F: FnOnce(Info) -> State>(self, op: F) -> Self {
29        match self {
30            State::Failed(info) => op(info),
31            _ => self,
32        }
33    }
34
35    pub fn is_finished(&self) -> bool {
36        matches!(self, State::Success(_) | State::Error(_))
37    }
38}