1use crate::LeoMessageCode;
19
20mod ast;
22pub use self::ast::*;
23
24mod cli;
26pub use self::cli::*;
27
28mod compiler;
30pub use self::compiler::*;
31
32mod flattener;
34pub use self::flattener::*;
35
36mod loop_unroller;
38pub use self::loop_unroller::*;
39
40mod interpreter_halt;
41pub use self::interpreter_halt::*;
42
43mod package;
45pub use self::package::*;
46
47mod parser;
49pub use self::parser::*;
50
51mod static_analyzer;
53pub use self::static_analyzer::*;
54
55mod type_checker;
57pub use self::type_checker::*;
58
59mod utils;
61pub use self::utils::*;
62
63#[derive(Debug, Error)]
66pub enum LeoError {
67 #[error(transparent)]
69 AstError(#[from] AstError),
70 #[error(transparent)]
72 CliError(#[from] CliError),
73 #[error(transparent)]
75 CompilerError(#[from] CompilerError),
76 #[error(transparent)]
77 InterpreterHalt(#[from] InterpreterHalt),
78 #[error(transparent)]
80 PackageError(#[from] PackageError),
81 #[error(transparent)]
83 ParserError(#[from] ParserError),
84 #[error(transparent)]
86 StaticAnalyzerError(#[from] StaticAnalyzerError),
87 #[error(transparent)]
89 TypeCheckerError(#[from] TypeCheckerError),
90 #[error(transparent)]
92 LoopUnrollerError(#[from] LoopUnrollerError),
93 #[error(transparent)]
95 FlattenError(#[from] FlattenError),
96 #[error("")]
99 LastErrorCode(i32),
100 #[error(transparent)]
102 UtilError(#[from] UtilError),
103 #[error(transparent)]
105 Anyhow(#[from] anyhow::Error),
106}
107
108impl LeoError {
109 pub fn error_code(&self) -> String {
111 use LeoError::*;
112
113 match self {
114 AstError(error) => error.error_code(),
115 CompilerError(error) => error.error_code(),
116 CliError(error) => error.error_code(),
117 ParserError(error) => error.error_code(),
118 PackageError(error) => error.error_code(),
119 StaticAnalyzerError(error) => error.error_code(),
120 TypeCheckerError(error) => error.error_code(),
121 LoopUnrollerError(error) => error.error_code(),
122 FlattenError(error) => error.error_code(),
123 UtilError(error) => error.error_code(),
124 LastErrorCode(_) => unreachable!(),
125 Anyhow(_) => "SnarkVM Error".to_string(), InterpreterHalt(_) => "Interpreter Halt".to_string(),
127 }
128 }
129
130 pub fn exit_code(&self) -> i32 {
132 use LeoError::*;
133
134 match self {
135 AstError(error) => error.exit_code(),
136 CompilerError(error) => error.exit_code(),
137 CliError(error) => error.exit_code(),
138 ParserError(error) => error.exit_code(),
139 PackageError(error) => error.exit_code(),
140 StaticAnalyzerError(error) => error.exit_code(),
141 TypeCheckerError(error) => error.exit_code(),
142 LoopUnrollerError(error) => error.exit_code(),
143 FlattenError(error) => error.exit_code(),
144 UtilError(error) => error.exit_code(),
145 LastErrorCode(code) => *code,
146 Anyhow(_) => 11000, InterpreterHalt(_) => 1,
148 }
149 }
150}
151
152#[derive(Debug, Error, Hash, PartialEq, Eq)]
155pub enum LeoWarning {
156 #[error(transparent)]
158 ParserWarning(#[from] ParserWarning),
159 #[error(transparent)]
161 StaticAnalyzerWarning(#[from] StaticAnalyzerWarning),
162 #[error(transparent)]
164 TypeCheckerWarning(#[from] TypeCheckerWarning),
165}
166
167impl LeoWarning {
168 pub fn error_code(&self) -> String {
170 use LeoWarning::*;
171
172 match self {
173 ParserWarning(warning) => warning.warning_code(),
174 TypeCheckerWarning(warning) => warning.warning_code(),
175 StaticAnalyzerWarning(warning) => warning.warning_code(),
176 }
177 }
178}
179
180pub type Result<T, E = LeoError> = core::result::Result<T, E>;