cairn_knowledge_graph/error/
graph_computing_error.rs1use 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}