use std::net::IpAddr;
use anyhow::{Context, Result};
pub async fn run(host: &str, json: bool) -> Result<()> {
let ip: IpAddr = host
.parse()
.with_context(|| format!("invalid IP address: {host}"))?;
let info = framesmith::get_device_info(ip)
.await
.context("failed to get device info")?;
if json {
println!(
"{}",
serde_json::json!({
"name": info.name(),
"model": info.model(),
"model_id": info.model_id(),
"os": info.os(),
"power_state": format!("{:?}", info.power_state()),
"frame_tv_support": info.frame_tv_support(),
"resolution": info.resolution(),
"ip": info.ip(),
"network_type": info.network_type(),
"wifi_mac": info.wifi_mac(),
})
);
} else {
println!("Name: {}", info.name());
println!("Model: {}", info.model());
println!("Model ID: {}", info.model_id());
println!("OS: {}", info.os());
println!("Power state: {:?}", info.power_state());
println!("Frame TV support: {}", info.frame_tv_support());
println!("Resolution: {}", info.resolution());
println!("IP: {}", info.ip());
println!("Network: {}", info.network_type());
println!("WiFi MAC: {}", info.wifi_mac());
}
Ok(())
}