restorekit-cli 0.1.6

CLI for DFU-restoring Apple Silicon Macs
use restorekit::{dfu, Result};

pub fn run(json: bool) -> Result<()> {
    let devices = dfu::list()?;

    if json {
        println!("{}", serde_json::to_string(&devices).unwrap());
        return Ok(());
    }

    if devices.is_empty() {
        println!("No Macs in DFU mode found.");
        if !dfu::host_can_trigger_dfu() {
            println!("\n{}", dfu::manual_dfu_instructions());
        } else {
            println!("Cable a target Mac to the DFU port and run `restorekit dfu`.");
        }
        return Ok(());
    }

    println!(
        "Found {} Mac{} in DFU mode:\n",
        devices.len(),
        if devices.len() == 1 { "" } else { "s" }
    );
    for d in &devices {
        println!("  {}", d.display_name());
        if let Some(id) = d.identifier() {
            println!("    identifier: {id}");
        }
        println!("    chip: CPID:{:04x}  board: BDID:{:02x}", d.cpid, d.bdid);
        println!("    ECID: {}", d.ecid_hex());
        if let Some(srtg) = &d.srtg {
            println!("    iBoot: {srtg}");
        }
        println!();
    }

    Ok(())
}