use crate::types::{BleDevice, DeviceId};
use bytes::Bytes;
use uuid::Uuid;
#[derive(Debug, Clone, Default)]
pub struct CentralConfig {
pub restore_identifier: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DisconnectCause {
LocalClose,
RemoteClose,
LinkLoss,
AdapterOff,
Gatt133,
Timeout,
Unknown(i32),
}
#[derive(Debug, Clone)]
pub enum CentralEvent {
AdapterStateChanged { powered: bool },
DeviceDiscovered(BleDevice),
DeviceConnected { device_id: DeviceId },
DeviceDisconnected {
device_id: DeviceId,
cause: DisconnectCause,
},
CharacteristicNotification {
device_id: DeviceId,
char_uuid: Uuid,
value: Bytes,
},
Restored { devices: Vec<BleDevice> },
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ScanMode {
#[default]
LowLatency,
LowPower,
}
#[derive(Debug, Clone, Default)]
pub struct ScanFilter {
pub services: Vec<Uuid>,
pub mode: ScanMode,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WriteType {
WithResponse,
WithoutResponse,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn disconnect_cause_is_debug_clone_eq() {
let a = DisconnectCause::LinkLoss;
let b = a.clone();
assert_eq!(a, b);
let _ = format!("{a:?}");
}
#[test]
fn disconnected_event_carries_cause() {
let ev = CentralEvent::DeviceDisconnected {
device_id: DeviceId::from("test"),
cause: DisconnectCause::LocalClose,
};
if let CentralEvent::DeviceDisconnected { cause, .. } = ev {
assert_eq!(cause, DisconnectCause::LocalClose);
} else {
panic!("wrong variant");
}
}
}