1use crate::{Error, Info, ResolveResult};
2
3#[derive(Debug)]
4pub enum State {
5 Success(ResolveResult<Info>),
6 Resolving(Info),
7 Error(Error),
9 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}