orion_error/core/
reason.rs1use thiserror::Error;
2
3use super::{DomainReason, UvsReason};
4
5#[derive(Error, Debug, Clone, PartialEq)]
8pub enum StructReason<T: DomainReason> {
9 #[error("{0}")]
10 Universal(UvsReason),
11 #[error("{0}")]
12 Domain(T),
13}
14impl<T: DomainReason> From<UvsReason> for StructReason<T> {
15 fn from(value: UvsReason) -> Self {
16 Self::Universal(value)
17 }
18}
19
20impl<T: DomainReason> From<T> for StructReason<T> {
21 fn from(value: T) -> Self {
22 Self::Domain(value)
23 }
24}
25
26pub trait ErrorCode {
27 fn error_code(&self) -> i32 {
28 500
29 }
30}
31impl<T: DomainReason + ErrorCode> ErrorCode for StructReason<T> {
32 fn error_code(&self) -> i32 {
33 match self {
34 StructReason::Universal(uvs_reason) => uvs_reason.error_code(),
35 StructReason::Domain(domain) => domain.error_code(),
36 }
37 }
38}
39
40pub fn convert_reason<R1, R2>(other: StructReason<R1>) -> StructReason<R2>
41where
42 R1: DomainReason,
43 R2: DomainReason,
44 StructReason<R2>: From<R1>,
45{
46 match other {
47 StructReason::Universal(uvs_reason) => StructReason::Universal(uvs_reason),
48 StructReason::Domain(domain) => StructReason::from(domain),
49 }
50}