bluest 0.6.9

A cross-platform Bluetooth Low Energy (BLE) library
Documentation
use std::error::Error;
use std::time::Duration;

use bluest::{btuuid, Adapter};
use futures_lite::StreamExt;
use tracing::info;
use tracing::metadata::LevelFilter;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    use tracing_subscriber::prelude::*;
    use tracing_subscriber::{fmt, EnvFilter};

    tracing_subscriber::registry()
        .with(fmt::layer())
        .with(
            EnvFilter::builder()
                .with_default_directive(LevelFilter::INFO.into())
                .from_env_lossy(),
        )
        .init();

    let device_id = {
        let adapter = Adapter::default().await.unwrap();
        adapter.wait_available().await?;

        info!("looking for device");
        let device = adapter
            .discover_devices(&[btuuid::services::BATTERY])
            .await?
            .next()
            .await
            .ok_or("Failed to discover device")??;
        info!(
            "found device: {} ({:?})",
            device.name().as_deref().unwrap_or("(unknown)"),
            device.id()
        );

        device.id()
    };

    info!("Time passes...");
    tokio::time::sleep(Duration::from_secs(5)).await;

    {
        let adapter = Adapter::default().await.unwrap();
        adapter.wait_available().await?;

        info!("re-opening previously found device");
        let device = adapter.open_device(&device_id).await?;
        info!(
            "re-opened device: {} ({:?})",
            device.name().as_deref().unwrap_or("(unknown)"),
            device.id()
        );
    }

    Ok(())
}