framesmith-cli 0.1.0

CLI tool for controlling Samsung Frame TVs over the local network
use std::path::PathBuf;

use anyhow::Result;

use crate::client::Client;
use crate::connect;
use crate::ipc::{Request, Response};
use crate::server::handler;

pub enum Executor {
    Server(Client),
    Direct {
        host: String,
        auth_token_file: PathBuf,
        timeout: u64,
    },
}

impl Executor {
    pub async fn send_request(&self, request: Request) -> Result<Response> {
        match self {
            Executor::Server(client) => client.send_request(request).await,
            Executor::Direct {
                host,
                auth_token_file,
                timeout,
            } => {
                tracing::debug!("direct mode: connecting to TV at {host} (bypassing server)");
                let tv = connect::connect(host, auth_token_file, *timeout).await?;
                Ok(handler::dispatch(request, &tv).await)
            }
        }
    }
}