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}