Skip to main content

cairn_knowledge_graph/error/
graph_computing_error.rs

1use std::error;
2use std::error::Error;
3use std::fmt;
4
5use super::logic_error::{LogicError, LogicErrorType};
6use super::other_error::{OtherError, OtherErrorType};
7use super::system_error::{SystemError, SystemErrorType};
8use super::user_error::{UserError, UserErrorType};
9
10use graphblas_sparse_linear_algebra::error::{
11    SparseLinearAlgebraError, SparseLinearAlgebraErrorType,
12};
13
14#[derive(Debug)]
15pub enum GraphComputingError {
16    SystemError(SystemError),
17    LogicError(LogicError),
18    UserError(UserError),
19    OtherError(OtherError),
20}
21
22#[derive(Clone, Debug, PartialEq)]
23pub enum GraphComputingErrorType {
24    SystemErrorType(SystemErrorType),
25    LogicErrorType(LogicErrorType),
26    UserErrorType(UserErrorType),
27    OtherErrorType(OtherErrorType),
28}
29
30impl error::Error for GraphComputingError {
31    fn source(&self) -> Option<&(dyn error::Error + 'static)> {
32        match self {
33            GraphComputingError::SystemError(error) => Some(error),
34            GraphComputingError::LogicError(error) => Some(error),
35            GraphComputingError::UserError(error) => Some(error),
36            GraphComputingError::OtherError(error) => Some(error),
37        }
38    }
39}
40
41impl GraphComputingError {
42    pub fn error_type(&self) -> GraphComputingErrorType {
43        match self {
44            GraphComputingError::SystemError(error) => {
45                GraphComputingErrorType::SystemErrorType(error.error_type())
46            }
47            GraphComputingError::LogicError(error) => {
48                GraphComputingErrorType::LogicErrorType(error.error_type())
49            }
50            GraphComputingError::UserError(error) => {
51                GraphComputingErrorType::UserErrorType(error.error_type())
52            }
53            GraphComputingError::OtherError(error) => {
54                GraphComputingErrorType::OtherErrorType(error.error_type())
55            }
56        }
57    }
58}
59
60impl fmt::Display for GraphComputingError {
61    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
62        writeln!(f, "{}", self.source().unwrap());
63        Ok(())
64    }
65}
66
67impl From<SystemError> for GraphComputingError {
68    fn from(error: SystemError) -> Self {
69        GraphComputingError::SystemError(error)
70    }
71}
72
73impl From<LogicError> for GraphComputingError {
74    fn from(error: LogicError) -> Self {
75        GraphComputingError::LogicError(error)
76    }
77}
78
79impl From<UserError> for GraphComputingError {
80    fn from(error: UserError) -> Self {
81        GraphComputingError::UserError(error)
82    }
83}
84
85impl From<std::fmt::Error> for GraphComputingError {
86    fn from(error: std::fmt::Error) -> Self {
87        GraphComputingError::OtherError(error.into())
88    }
89}
90
91impl From<GraphComputingError> for std::fmt::Error {
92    fn from(_error: GraphComputingError) -> Self {
93        std::fmt::Error {}
94    }
95}
96
97impl From<SparseLinearAlgebraError> for GraphComputingError {
98    fn from(error: SparseLinearAlgebraError) -> Self {
99        match error.error_type() {
100            SparseLinearAlgebraErrorType::LogicErrorType(_) => Self::LogicError(error.into()),
101            SparseLinearAlgebraErrorType::OtherErrorType(_) => Self::OtherError(error.into()),
102            SparseLinearAlgebraErrorType::SystemErrorType(_) => Self::SystemError(error.into()),
103        }
104    }
105}