mod add_task;
mod change_done;
mod change_due_date;
mod change_priority;
mod help;
mod list;
pub use commands::add_task::AddTask;
pub use commands::change_done::ChangeDone;
pub use commands::change_due_date::ChangeDueDate;
pub use commands::change_priority::ChangePriority;
pub use commands::help::Help;
pub use commands::list::List;
use controller::Tri;
use errors::Result;
pub trait Command {
fn examples(user: &str) -> Vec<String>;
fn run(&self, tri: &Tri, user: &str) -> Result<String>;
}
#[derive(Debug, PartialEq)]
pub enum DynamicCommand {
AddTask(AddTask),
ChangeDone(ChangeDone),
ChangeDueDate(ChangeDueDate),
ChangePriority(ChangePriority),
Help(Help),
List(List),
}
impl Command for DynamicCommand {
fn examples(user: &str) -> Vec<String> {
let mut v = vec![];
v.extend(AddTask::examples(user));
v.extend(ChangeDone::examples(user));
v.extend(ChangeDueDate::examples(user));
v.extend(ChangePriority::examples(user));
v.extend(Help::examples(user));
v.extend(List::examples(user));
v.sort();
v
}
fn run(&self, tri: &Tri, user: &str) -> Result<String> {
match *self {
DynamicCommand::AddTask(ref cmd) => cmd.run(tri, user),
DynamicCommand::ChangeDone(ref cmd) => cmd.run(tri, user),
DynamicCommand::ChangeDueDate(ref cmd) => cmd.run(tri, user),
DynamicCommand::ChangePriority(ref cmd) => cmd.run(tri, user),
DynamicCommand::Help(ref cmd) => cmd.run(tri, user),
DynamicCommand::List(ref cmd) => cmd.run(tri, user),
}
}
}