flippy 0.4.3

Automates upgrades and pulls remote databases, files, and firmware for the Flipper Zero
use anyhow::{Result, bail};
use cliclack::select;
use flipper_rpc::transport::serial::{list_flipper_ports, rpc::SerialRpcTransport};

pub fn pick_cli() -> Result<SerialRpcTransport> {
    let ports = list_flipper_ports()?;

    let port = match ports.len() {
        0 => bail!(
            "No flippers are connected currently, please try replugging them, then re-running this command."
        ),
        1 => &ports[0].port_name,
        _ => {
            let items: Vec<_> = ports
                .iter()
                .map(|x| (&x.port_name, &x.device_name, &x.port_name))
                .collect();

            select("Which device is the target Flipper Zero?")
                .items(&items)
                .interact()?
        }
    };

    let cli = SerialRpcTransport::new(port)?;

    Ok(cli)
}