use std::cell::RefCell;
use std::rc::Rc;
pub enum ParseResult {
Parsed,
Help,
Exit,
Error(String),
}
pub enum Action<'a> {
Flag(Box<IFlagAction + 'a>),
Single(Box<IArgAction + 'a>),
Push(Box<IArgsAction + 'a>),
Many(Box<IArgsAction + 'a>),
}
pub trait TypedAction<T> {
fn bind<'x>(&self, Rc<RefCell<&'x mut T>>) -> Action<'x>;
}
pub trait IFlagAction {
fn parse_flag(&self) -> ParseResult;
}
pub trait IArgAction {
fn parse_arg(&self, arg: &str) -> ParseResult;
}
pub trait IArgsAction {
fn parse_args(&self, args: &[&str]) -> ParseResult;
}