From e9b122f612e48c94bbbdaba2584c40f80f9a9371 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 18 Oct 2015 21:42:44 +0200 Subject: [PATCH] Add error module for error handling --- src/error.rs | 35 +++++++++++++++++++++++++++++++++++ src/main.rs | 1 + src/module.rs | 44 +++++++++++++++----------------------------- 3 files changed, 51 insertions(+), 29 deletions(-) create mode 100644 src/error.rs diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 00000000..9b06034a --- /dev/null +++ b/src/error.rs @@ -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) + } + +} diff --git a/src/main.rs b/src/main.rs index 40ea2ba5..aa577cdb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ use runtime::Runtime; use module::Module; mod cli; +mod error; mod runtime; mod module; diff --git a/src/module.rs b/src/module.rs index 1c686a51..bc9b224a 100644 --- a/src/module.rs +++ b/src/module.rs @@ -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(module : &T, short : String) -> ModuleError { + ModuleError::new(module, short, "".to_string()) } - pub fn new(short : String, long : String) -> ModuleError { + pub fn new(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; + fn execute(&self, &rt : Runtime) -> Option; }