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)
}