nils-macos-agent 0.5.5

CLI crate for nils-macos-agent in the nils-cli workspace.
Documentation
use crate::backend::input_source;
use crate::backend::process::ProcessRunner;
use crate::cli::{InputSourceCurrentArgs, InputSourceSwitchArgs, OutputFormat};
use crate::commands::{emit_json_success, reject_tsv_for_list_only};
use crate::error::CliError;
use crate::model::{InputSourceCurrentResult, InputSourceSwitchResult};
use crate::run::ActionPolicy;

pub fn run_current(
    format: OutputFormat,
    _args: &InputSourceCurrentArgs,
    policy: ActionPolicy,
    runner: &dyn ProcessRunner,
) -> Result<(), CliError> {
    let result = InputSourceCurrentResult {
        current: input_source::current(runner, policy.timeout_ms)?,
    };
    match format {
        OutputFormat::Json => {
            emit_json_success("input-source.current", result)?;
        }
        OutputFormat::Text => {
            println!("input-source.current\tcurrent={}", result.current);
        }
        OutputFormat::Tsv => {
            return reject_tsv_for_list_only();
        }
    }

    Ok(())
}

pub fn run_switch(
    format: OutputFormat,
    args: &InputSourceSwitchArgs,
    policy: ActionPolicy,
    runner: &dyn ProcessRunner,
) -> Result<(), CliError> {
    let state = input_source::switch(runner, &args.id, policy.timeout_ms)?;
    let result = InputSourceSwitchResult {
        previous: state.previous,
        current: state.current,
        switched: state.switched,
    };
    match format {
        OutputFormat::Json => {
            emit_json_success("input-source.switch", result)?;
        }
        OutputFormat::Text => {
            println!(
                "input-source.switch\tprevious={}\tcurrent={}\tswitched={}",
                result.previous, result.current, result.switched
            );
        }
        OutputFormat::Tsv => {
            return reject_tsv_for_list_only();
        }
    }

    Ok(())
}