commit 0.1.0

A POSIX-inspired command interpreter written in Rust
Documentation
extern crate scp;

use scp::{Command, CommandLine, ExecResult, ParseError};
use scp::{ParamAccessor, OptionAccessor};

fn main() {
    let mut command_line = CommandLine::new();

    command_line.register(Command::new(vec!["greet"]).set_syntax_format("s-(f, from)s"));

    match command_line.run("greet \"John Doe\" -fMrs.\\ Doe") {
        ExecResult::Err(e) => handle_error(e),
        ExecResult::Ok {
            command,
            subcommand: _,
            parameters,
            options,
        } => {
            match command {
                "greet" => {
                    println!("Hello, {}.", parameters.iter().poll());

                    if let Some(o) = options.by_long_flag("from") {
                        println!("It's {}!", o.parameter());
                    }
                }
                _ => {}
            }
        }
    }
}

fn handle_error(error: ParseError) {
    match error {
        ParseError::InvalidSyntax(e) => eprintln!("{}", e),
        ParseError::UnknownCommand => eprintln!("Unknown command"),
        ParseError::MissingSubcommand => eprintln!("Missing subcommand"),
        ParseError::MissingParameter(kind) => eprintln!("Missing parameter of type {}", kind.to_string()),
        ParseError::InvalidParameter(s) => eprintln!("Invalid parameter: {}", s),
        ParseError::UnnecessaryFlag(s) => eprintln!("Unknown flag: {}", s),
        ParseError::UnnecessaryParameter(s) => eprintln!("Unnecessary parameter: {}", s),
    }
}