framesmith-cli 0.1.0

CLI tool for controlling Samsung Frame TVs over the local network
use anyhow::{Result, bail};

use crate::cli::RemoteButton;
use crate::executor::Executor;
use crate::ipc::{Request, Response};

pub async fn run(exec: &Executor, button: &RemoteButton, json: bool) -> Result<()> {
    let request = Request::RemoteButton {
        button: button.to_ipc_string().to_string(),
    };

    let response = exec.send_request(request).await?;
    match &response {
        Response::Ok { data } => {
            if json {
                println!("{}", serde_json::to_string_pretty(data)?);
            } else {
                println!("Sent button press.");
            }
        }
        Response::Error { message } => bail!("{message}"),
        Response::TvDisconnected { message } => bail!("{message}"),
    }

    Ok(())
}