args-cli 0.1.1

Command-line interface for args
Documentation
use std::io::{self, Write};

use crate::{client::ArgsClient, config::RunnerConfig, os::install_service};

pub async fn install(mut config: RunnerConfig) -> anyhow::Result<()> {
    if config.runner_token.is_none() {
        print!("Have you created a runner in the args UI? (y/n): ");
        io::stdout().flush()?;

        let mut input = String::new();
        io::stdin().read_line(&mut input)?;

        if matches!(input.trim().to_lowercase().as_str(), "n" | "no") {
            println!("Please create a runner at args.io/settings/runners to continue.");
            return Ok(());
        }

        print!("Please paste your runner token: ");
        io::stdout().flush()?;
        let mut token_input = String::new();
        io::stdin().read_line(&mut token_input)?;

        let token = token_input.trim().to_string();

        println!("Verifying your runner token...");

        let client = ArgsClient::new("args-runner").with_token(token.clone());
        client.verify_runner().await?;

        config.runner_token = Some(token);
        config.save()?;
    }

    install_service()?;

    Ok(())
}