xref: /DragonReach/src/error/parse_error/mod.rs (revision 2069cc0dc0984a2981454b00316ba607f88ac512)
1 use super::ErrorFormat;
2 /// 解析错误,错误信息应该包括文件名以及行号
3 #[repr(i32)]
4 #[derive(Debug, PartialEq, Eq, Clone)]
5 #[allow(dead_code, non_camel_case_types)]
6 pub enum ParseErrorType {
7     /// 不合法参数
8     EINVAL,
9     /// 结果过大 Result too large.
10     ERANGE,
11     /// 重复定义
12     EREDEF,
13     /// 未预料到的空值
14     EUnexpectedEmpty,
15     /// 语法错误
16     ESyntaxError,
17     /// 非法文件描述符
18     EBADF,
19     /// 非法文件
20     EFILE,
21     /// 不是目录
22     ENODIR,
23     /// 循环依赖
24     ECircularDependency,
25 }
26 /// 错误信息应该包括错误类型ParseErrorType,当前解析的文件名,当前解析的行号
27 #[derive(Debug, PartialEq, Eq, Clone)]
28 pub struct ParseError(ParseErrorType, String, usize);
29 
30 impl ParseError {
31     pub fn new(error_type: ParseErrorType, file_name: String, line_number: usize) -> ParseError {
32         ParseError(error_type, file_name, line_number)
33     }
34 
35     pub fn set_file(&mut self, path: &str) {
36         self.1 = path.to_string();
37     }
38 
39     pub fn set_linenum(&mut self, linenum: usize) {
40         self.2 = linenum;
41     }
42 }
43 
44 impl ErrorFormat for ParseError {
45     fn error_format(&self) -> String {
46         format!(
47             "Parse Error!,Error Type: {:?}, File: {}, Line: {}",
48             self.0, self.1, self.2
49         )
50     }
51 }
52