stepflow_session/
errors.rs

1use stepflow_base::IdError;
2use stepflow_data::var::VarId;
3use stepflow_step::StepId;
4use stepflow_action::{ActionError, ActionId};
5use crate::SessionId;
6
7#[derive(Debug, PartialEq, Clone)]
8#[cfg_attr(feature = "serde-support", derive(serde::Serialize))]
9pub enum Error {
10  // ID errors
11  VarId(IdError<VarId>),
12  StepId(IdError<StepId>),
13  ActionId(IdError<ActionId>),
14  SessionId(IdError<SessionId>),
15
16  // data errors
17  InvalidValue(stepflow_data::InvalidValue),
18  InvalidVars(stepflow_data::InvalidVars),
19  InvalidStateDataError,
20
21  // action + step execution errors
22  NoStateToEval,
23
24  // something we try to not use
25  Other,
26}
27
28impl From<stepflow_data::InvalidValue> for Error {
29  fn from(err: stepflow_data::InvalidValue) -> Self {
30    Error::InvalidValue(err)
31  }
32}
33
34impl From<ActionError> for Error {
35    fn from(err: ActionError) -> Self {
36      match err {
37          ActionError::VarId(id_error) => Error::VarId(id_error),
38          ActionError::StepId(id_error) => Error::StepId(id_error),
39          ActionError::Other => Error::Other,
40      }
41    }
42}
43
44impl std::error::Error for Error {}
45
46impl std::fmt::Display for Error {
47    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
48        write!(f, "{:?}", self)
49    }
50}
51
52macro_rules! from_id_error {
53  ($id_type:ident) => {
54    impl From<IdError<$id_type>> for Error {
55      fn from(err: IdError<$id_type>) -> Self {
56        Error::$id_type(err)
57      }
58    }
59  };
60}
61
62from_id_error!(VarId);
63from_id_error!(StepId);
64from_id_error!(ActionId);
65from_id_error!(SessionId);