Add error module for error handling
This commit is contained in:
parent
e3ca30d4b1
commit
e9b122f612
3 changed files with 51 additions and 29 deletions
35
src/error.rs
Normal file
35
src/error.rs
Normal 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)
|
||||
}
|
||||
|
||||
}
|
|
@ -5,6 +5,7 @@ use runtime::Runtime;
|
|||
use module::Module;
|
||||
|
||||
mod cli;
|
||||
mod error;
|
||||
mod runtime;
|
||||
mod module;
|
||||
|
||||
|
|
|
@ -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 {
|
||||
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>;
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue