canic_core/api/
error.rs

1use crate::{InternalError, InternalErrorClass, InternalErrorOrigin, dto::error::Error};
2
3fn internal_error_to_public(err: &InternalError) -> Error {
4    match err.class() {
5        InternalErrorClass::Access => Error::unauthorized(err.to_string()),
6
7        InternalErrorClass::Domain => match err.origin() {
8            InternalErrorOrigin::Config => Error::invalid("invalid configuration"),
9            _ => Error::conflict("policy rejected"),
10        },
11
12        InternalErrorClass::Invariant => Error::invariant("invariant violation"),
13
14        InternalErrorClass::Infra | InternalErrorClass::Ops | InternalErrorClass::Workflow => {
15            Error::internal("internal error")
16        }
17    }
18}
19
20impl From<&InternalError> for Error {
21    fn from(err: &InternalError) -> Self {
22        internal_error_to_public(err)
23    }
24}
25
26impl From<InternalError> for Error {
27    fn from(err: InternalError) -> Self {
28        internal_error_to_public(&err)
29    }
30}