Add error module for error handling

This commit is contained in:
Matthias Beyer 2015-10-18 21:42:44 +02:00
parent e3ca30d4b1
commit e9b122f612
3 changed files with 51 additions and 29 deletions

35
src/error.rs Normal file
View file

@ -0,0 +1,35 @@
use runtime::Runtime;
pub struct ImagErrorBase {
pub shortdesc : String,
pub longdesc : String,
}
pub trait ImagError<'a> {
fn print(&self, rt: &Runtime);
fn print_long(&self, rt: &Runtime);
fn print_short(&self, rt: &Runtime);
}
impl<'a> ImagError<'a> for ImagErrorBase {
fn print(&self, rt: &Runtime) {
if self.longdesc.is_empty() {
let s = format!("Error: {}\n\n{}\n\n",
self.shortdesc, self.longdesc);
rt.print(&s)
} else {
let s = format!("Error: {}\n", self.shortdesc);
rt.print(&s)
}
}
fn print_short(&self, rt : &Runtime) {
rt.print(&self.shortdesc)
}
fn print_long(&self, rt : &Runtime) {
rt.print(&self.longdesc)
}
}

View file

@ -5,6 +5,7 @@ use runtime::Runtime;
use module::Module;
mod cli;
mod error;
mod runtime;
mod module;

View file

@ -1,49 +1,35 @@
use runtime::Runtime;
use error::ImagErrorBase;
pub struct ModuleError {
shortdesc : String,
longdesc : String,
base: ImagErrorBase,
module_name: String,
}
impl ModuleError {
pub fn short(short : String) -> ModuleError {
ModuleError::new(short, "".to_string())
pub fn short<T: Module>(module : &T, short : String) -> ModuleError {
ModuleError::new(module, short, "".to_string())
}
pub fn new(short : String, long : String) -> ModuleError {
pub fn new<T: Module>(module : &T, short : String, long : String) -> ModuleError {
ModuleError {
shortdesc: short,
longdesc: long,
base: ImagErrorBase {
shortdesc: short,
longdesc: long,
},
module_name: module.name(),
}
}
pub fn print(&self, rt : &Runtime) {
if self.longdesc.is_empty() {
let s = format!("Error: {}\n\n{}\n\n",
self.shortdesc, self.longdesc);
rt.print(&s)
} else {
let s = format!("Error: {}\n", self.shortdesc);
rt.print(&s)
}
}
pub fn print_short(&self, rt : &Runtime) {
rt.print(&self.shortdesc)
}
pub fn print_long(&self, rt : &Runtime) {
rt.print(&self.longdesc)
}
}
pub trait Module {
fn load(self, &rt : Runtime) -> Self;
fn name(self) -> String;
fn new() -> Self;
fn load(&self, &rt : Runtime) -> Self;
fn name(&self) -> String;
fn execute(self, &rt : Runtime) -> Option<ModuleError>;
fn execute(&self, &rt : Runtime) -> Option<ModuleError>;
}