btleplug/bluez/
manager.rs

1use super::adapter::Adapter;
2use crate::{api, Result};
3use async_trait::async_trait;
4use bluez_async::BluetoothSession;
5
6/// Implementation of [api::Manager](crate::api::Manager).
7#[derive(Clone, Debug)]
8pub struct Manager {
9    session: BluetoothSession,
10}
11
12impl Manager {
13    pub async fn new() -> Result<Self> {
14        let (_, session) = BluetoothSession::new().await?;
15        Ok(Self { session })
16    }
17}
18
19#[async_trait]
20impl api::Manager for Manager {
21    type Adapter = Adapter;
22
23    async fn adapters(&self) -> Result<Vec<Adapter>> {
24        let adapters = self.session.get_adapters().await?;
25        Ok(adapters
26            .into_iter()
27            .map(|adapter| Adapter::new(self.session.clone(), adapter.id))
28            .collect())
29    }
30}