multipass 0.2.0

Rust SDK for Canonical Multipass
Documentation
use crate::info::{info, InfoRequest};
use crate::multipass::Instance;
use std::process::Command;

pub fn list() -> Result<Vec<Instance>, &'static str> {
    let output = Command::new("sh")
        .arg("-c")
        .arg("multipass list")
        .output()
        .expect("failed to execute process");
    let stdout = String::from_utf8(output.stdout).unwrap();
    parse_instances(stdout)
}

fn parse_instances(out: String) -> Result<Vec<Instance>, &'static str> {
    let mut instances: Vec<Instance> = vec![];
    let all_lines = out.trim().split("\n");
    for line in all_lines {
        let space = line.split(" ").collect::<Vec<_>>()[0].trim();
        if space != "Name" {
            match info(InfoRequest {
                name: space.to_string(),
            }) {
                Ok(instance) => instances.push(instance),
                Err(err) => return Err(err),
            }
        }
    }
    Ok(instances)
}