cargo-warp 0.1.1

Build then copy your project binary to a remote host.
use cargo_metadata::Message;
use std::process::{Command, Stdio};

pub fn cargo_build(project: Option<&str>) -> Vec<std::path::PathBuf> {
    let mut args: Vec<&str> = vec!["build", "--message-format=json-render-diagnostics"];

    if let Some(project) = project {
        args.push("-p");
        args.push(project)
    }

    let mut command = Command::new("cargo")
        .args(args)
        .stdout(Stdio::piped())
        .spawn()
        .unwrap();

    let reader = std::io::BufReader::new(command.stdout.take().unwrap());
    let mut files: Vec<std::path::PathBuf> = vec![];
    for message in cargo_metadata::Message::parse_stream(reader) {
        if let Message::CompilerArtifact(artifact) = message.unwrap() {
            if artifact.executable.is_some() {
                files.push(
                    artifact
                        .executable
                        .unwrap()
                        .into_os_string()
                        .into_string()
                        .unwrap()
                        .into(),
                );
            }
        }
    }

    let _output = command.wait().expect("Couldn't get cargo's exit status");

    files
}