cube-tui 0.1.7

Terminal UI timer and session manager for speedcubing, with optional web dashboard and BLE (GAN) timer support.
use crate::bluetooth::{BtTimerState, DeviceInfo};
use btleplug::platform::PeripheralId;

pub type BluetoothConnection = (
    flume::Sender<BtTimerState>,
    flume::Receiver<()>,
    btleplug::platform::Adapter,
    flume::Sender<()>,
);

#[derive(Debug)]
pub enum BluetoothEvent {
    Status(String),
    Error(String),
    Device(DeviceInfo),
    Adapter(btleplug::platform::Adapter),
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum BluetoothScreenState {
    #[default]
    Searching,
    Connecting,
    Connected,
}

#[derive(Default)]
pub struct BluetoothState {
    pub show: bool,
    pub screen_state: BluetoothScreenState,
    pub selected_index: usize,
    pub devices: Vec<DeviceInfo>,
    pub status: Option<String>,
    pub rx: Option<flume::Receiver<BluetoothEvent>>,
    pub timer_rx: Option<flume::Receiver<BtTimerState>>,
    pub cancel_tx: Option<flume::Sender<()>>,
    pub connected_rx: Option<flume::Receiver<()>>,
    pub adapter: Option<btleplug::platform::Adapter>,
    pub connected_device_name: Option<String>,
    pub connected_device_id: Option<PeripheralId>,
}