nils-macos-agent 0.5.5

CLI crate for nils-macos-agent in the nils-cli workspace.
Documentation
use serde::Serialize;

use crate::error::CliError;
use crate::model::SuccessEnvelope;

pub mod ax_action;
pub mod ax_attr;
pub mod ax_click;
pub mod ax_common;
pub mod ax_list;
pub mod ax_session;
pub mod ax_type;
pub mod ax_watch;
pub mod input_click;
pub mod input_hotkey;
pub mod input_source;
pub mod input_type;
pub mod list;
pub mod observe;
pub mod profile;
pub mod scenario;
pub mod wait;
pub mod window_activate;

const TSV_LIST_ONLY_FORMAT_MESSAGE: &str =
    "--format tsv is only supported for `windows list` and `apps list`";

pub(crate) fn emit_json_success<T>(command: &'static str, result: T) -> Result<(), CliError>
where
    T: Serialize,
{
    let payload = SuccessEnvelope::new(command, result);
    println!(
        "{}",
        serde_json::to_string(&payload)
            .map_err(|err| CliError::runtime(format!("failed to serialize json output: {err}")))?
    );
    Ok(())
}

pub(crate) fn reject_tsv_for_list_only() -> Result<(), CliError> {
    Err(CliError::usage(TSV_LIST_ONLY_FORMAT_MESSAGE))
}