use crate::LeoMessageCode;
pub mod ast;
pub use self::ast::*;
pub mod cli;
pub use self::cli::*;
pub mod compiler;
pub use self::compiler::*;
pub mod flattener;
pub use self::flattener::*;
pub mod input;
pub use self::input::*;
pub mod package;
pub use self::package::*;
pub mod parser;
pub use self::parser::*;
pub mod type_checker;
pub use self::type_checker::*;
#[derive(Debug, Error)]
pub enum LeoError {
#[error(transparent)]
AstError(#[from] AstError),
#[error(transparent)]
CliError(#[from] CliError),
#[error(transparent)]
CompilerError(#[from] CompilerError),
#[error(transparent)]
InputError(#[from] InputError),
#[error(transparent)]
PackageError(#[from] PackageError),
#[error(transparent)]
ParserError(#[from] ParserError),
#[error(transparent)]
TypeCheckerError(#[from] TypeCheckerError),
#[error(transparent)]
FlattenError(#[from] FlattenError),
#[error("")]
LastErrorCode(i32),
#[error(transparent)]
Anyhow(#[from] anyhow::Error),
}
impl LeoError {
pub fn error_code(&self) -> String {
use LeoError::*;
match self {
AstError(error) => error.error_code(),
CompilerError(error) => error.error_code(),
CliError(error) => error.error_code(),
InputError(error) => error.error_code(),
ParserError(error) => error.error_code(),
PackageError(error) => error.error_code(),
TypeCheckerError(error) => error.error_code(),
FlattenError(error) => error.error_code(),
LastErrorCode(_) => unreachable!(),
Anyhow(_) => unimplemented!(), }
}
pub fn exit_code(&self) -> i32 {
use LeoError::*;
match self {
AstError(error) => error.exit_code(),
CompilerError(error) => error.exit_code(),
CliError(error) => error.exit_code(),
InputError(error) => error.exit_code(),
ParserError(error) => error.exit_code(),
PackageError(error) => error.exit_code(),
TypeCheckerError(error) => error.exit_code(),
FlattenError(error) => error.exit_code(),
LastErrorCode(code) => *code,
Anyhow(_) => unimplemented!(), }
}
}
#[derive(Debug, Error)]
pub enum LeoWarning {
#[error(transparent)]
ParserWarning(#[from] ParserWarning),
}
impl LeoWarning {
pub fn error_code(&self) -> String {
use LeoWarning::*;
match self {
ParserWarning(warning) => warning.warning_code(),
}
}
}
pub type Result<T, E = LeoError> = core::result::Result<T, E>;