Add module trait

This commit is contained in:
Matthias Beyer 2015-10-18 21:15:17 +02:00
parent 98c782212c
commit e3ca30d4b1
2 changed files with 51 additions and 0 deletions

View file

@ -2,9 +2,11 @@
use cli::Config;
use runtime::Runtime;
use module::Module;
mod cli;
mod runtime;
mod module;
fn main() {
let mut config = Config::new();

49
src/module.rs Normal file
View file

@ -0,0 +1,49 @@
use runtime::Runtime;
pub struct ModuleError {
shortdesc : String,
longdesc : String,
}
impl ModuleError {
pub fn short(short : String) -> ModuleError {
ModuleError::new(short, "".to_string())
}
pub fn new(short : String, long : String) -> ModuleError {
ModuleError {
shortdesc: short,
longdesc: long,
}
}
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 execute(self, &rt : Runtime) -> Option<ModuleError>;
}