mrvillage-cli 0.1.13

My personal CLI
use std::process::Output;

use anyhow::Result;

use crate::structs::config::Host;

#[macro_export]
macro_rules! ssh_cmd {
    ($host:expr, $cmd:literal) => {
        $crate::utils::ssh::ssh_command($host, &format!("{}", std::format_args!($cmd)))
    };
    ($host:expr, $cmd:literal, $($args:tt)*) => {
        $crate::utils::ssh::ssh_command($host, &format!("{}", std::format_args!($cmd, $($args)*)))
    }
}

pub fn ssh_command(host: &Host, command: &str) -> Result<Output> {
    let mut ssh = std::process::Command::new("ssh");
    if host.forward_agent {
        ssh.arg("-A");
    }
    ssh.arg("-p")
        .arg(host.port.to_string())
        .arg(host.connection_string())
        .arg(command);
    Ok(ssh.output()?)
}