use std::collections::HashMap;
#[cfg(target_os = "windows")]
use windows::core::Error;
#[cfg(target_os = "windows")]
use windows::Devices::Bluetooth::GenericAttributeProfile::GattCharacteristic;
use crate::device::{Characteristic, Device};
#[cfg(target_os = "macos")]
use crate::mac::error::Error;
#[cfg(target_os = "macos")]
pub mod mac;
#[cfg(target_os = "windows")]
pub mod win;
pub mod device;
pub fn run<F>(factory: F)
where
F: Fn() -> Box<dyn Handler>,
{
#[cfg(target_os = "windows")]
win::Win::new().run(factory);
#[cfg(target_os = "macos")]
mac::Mac::new().run(factory);
}
pub trait Handler {
fn on_adapter_open(&mut self);
fn on_adapter_close(&mut self);
fn on_discover(&mut self, device: Device);
fn get_device_list(&mut self) ->HashMap<String,Device>;
fn on_connect(&mut self, uuid: String);
fn on_unconnect(&mut self, uuid: String);
fn on_disconnect(&mut self, uuid: String);
fn on_characteristics(&mut self, uuid: String, characteristic: Characteristic);
fn listen(&mut self, uuid: String);
fn on_data(&mut self, uuid: String, characteristic_uuid: String, data: Vec<u8>);
}