cliff3_util/
error.rs

1//! 라이브러리 공용 오류 정의 module
2
3use std::fmt::{Debug, Display, Formatter};
4
5/// 라이브러리에서 사용하는 오류에 대한 공통 정의 trait
6///
7/// [`Debug`] mixin을 하지 않을 경우 LibError를 구현한 에러를 포함하는 [`Result`]에서
8/// `unwrap` 사용시 아래의 오류 발생함
9///
10/// ```text
11/// `dyn error::LibError` cannot be formatted using `{:?}` because it doesn't implement `Debug`
12/// ```
13pub trait LibError: Debug {
14    /// 해당 에러의 메시지를 반환
15    // fn from_message(message: &str) -> Self;
16    fn get_message(&self) -> &str;
17
18    /// 해당 에러의 명칭을 반환
19    fn get_type_name_from_instance(&self) -> &str;
20}
21
22// MissingArgumentError ----------------------------------------------------------------------------
23/// 인자 누락 오류
24#[derive(PartialEq, Debug)]
25pub struct MissingArgumentError {
26    message: String,
27}
28
29impl Default for MissingArgumentError {
30    fn default() -> Self {
31        MissingArgumentError {
32            message: "인자가 누락되었습니다.".to_owned(),
33        }
34    }
35}
36
37impl LibError for MissingArgumentError {
38    fn get_message(&self) -> &str {
39        self.message.as_str()
40    }
41
42    fn get_type_name_from_instance(&self) -> &str {
43        return std::any::type_name::<MissingArgumentError>();
44    }
45}
46
47impl From<&str> for MissingArgumentError {
48    fn from(value: &str) -> Self {
49        MissingArgumentError {
50            message: value.to_owned(),
51        }
52    }
53}
54
55impl Display for MissingArgumentError {
56    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
57        write!(f, "Missing argument error.")
58    }
59}
60
61// InvalidArgumentError ----------------------------------------------------------------------------
62/// 잘못된 인자에 대한 오류
63#[derive(PartialEq, Debug)]
64pub struct InvalidArgumentError {
65    message: String,
66}
67
68impl InvalidArgumentError {
69    pub fn new(message: &str) -> Self {
70        Self {
71            message: message.to_owned(),
72        }
73    }
74}
75
76impl Default for InvalidArgumentError {
77    fn default() -> Self {
78        InvalidArgumentError {
79            message: "유효하지 않은 인자 입니다.".to_owned(),
80        }
81    }
82}
83
84impl LibError for InvalidArgumentError {
85    fn get_message(&self) -> &str {
86        self.message.as_str()
87    }
88
89    fn get_type_name_from_instance(&self) -> &str {
90        return std::any::type_name::<InvalidArgumentError>();
91    }
92}
93
94impl Display for InvalidArgumentError {
95    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
96        write!(f, "Invalid argument error.")
97    }
98}
99
100impl From<&str> for InvalidArgumentError {
101    fn from(value: &str) -> Self {
102        InvalidArgumentError {
103            message: value.to_owned(),
104        }
105    }
106}