hglib 0.1.0

Mercurial command server client library.
#![feature(result_expect)]

extern crate hglib;
use hglib::cmdserver::CommandServer;
use hglib::Chunk;

fn run_command(cmdserver: &mut CommandServer, command: Vec<&[u8]>) -> (i32, Vec<u8>, Vec<u8>) {
    let (mut result, mut output, mut error) =
        (-1i32, vec![], vec![]);
    let run = cmdserver.connection
        .raw_command(command)
        .expect("failed to send 'log' command");

    for chunk in run {
        match chunk {
            Ok(Chunk::Output(s)) => output.extend(s),
            Ok(Chunk::Error(s)) => error.extend(s),
            Ok(Chunk::Result(r)) => { result = r },
            Ok(_) => unimplemented!(),
            Err(e) => panic!("failed to read command results: {}", e),
        }
    }

    (result, output, error)
}

fn main() {
    let mut cmdserver = CommandServer::new().expect("failed to start command server");
    println!("capabilities: {:?}", cmdserver.capabilities);
    println!("encoding: {:?}", cmdserver.encoding);

    let (result, output, error) =
        run_command(&mut cmdserver, vec![b"log", b"-l", b"5"]);
    cmdserver.connection.close().expect("command server did not stop cleanly");

    println!("output: {}",
             String::from_utf8(output).unwrap().trim_right_matches('\n'));
    println!("error: {}",
             String::from_utf8(error).unwrap().trim_right_matches('\n'));
    println!("result: {:?}", result);
}