1pub mod types;
6pub use types::{Characteristic, Descriptor, Result};
7
8pub mod server;
9pub use server::Server;
10
11pub mod client;
12pub use client::Client;
13
14pub mod central;
15pub use central::Central;
16
17pub mod periodic_advertising;
18pub mod pii;
19
20#[cfg(any(test, feature = "test-utils"))]
21pub mod test_utils;
22
23#[cfg(test)]
24mod tests;
25
26use futures::{Future, Stream};
27
28use crate::periodic_advertising::PeriodicAdvertising;
29
30pub trait GattTypes: Sized {
35 type Central: Central<Self>;
37 type ScanResultStream: Stream<Item = Result<central::ScanResult>> + 'static;
38 type Client: Client<Self>;
39 type ConnectFuture: Future<Output = Result<Self::Client>>;
40
41 type PeerServiceHandle: client::PeerServiceHandle<Self>;
43 type FindServicesFut: Future<Output = Result<Vec<Self::PeerServiceHandle>>> + 'static;
44 type PeerService: client::PeerService<Self>;
45 type ServiceConnectFut: Future<Output = Result<Self::PeerService>>;
46
47 type CharacteristicDiscoveryFut: Future<Output = Result<Vec<Characteristic>>>;
51 type NotificationStream: Stream<Item = Result<client::CharacteristicNotification>> + 'static;
54 type ReadFut<'a>: Future<Output = Result<(usize, bool)>> + 'a;
59 type WriteFut<'a>: Future<Output = Result<()>> + 'a;
62 type PeriodicAdvertising: PeriodicAdvertising;
64}
65
66pub trait ServerTypes: Sized {
71 type Server: Server<Self>;
72 type LocalService: server::LocalService<Self>;
73 type LocalServiceFut: Future<Output = Result<Self::LocalService>>;
74 type ServiceEventStream: Stream<Item = Result<server::ServiceEvent<Self>>>;
75 type ServiceWriteType: ToOwned<Owned = Vec<u8>>;
76 type ReadResponder: server::ReadResponder;
77 type WriteResponder: server::WriteResponder;
78
79 type IndicateConfirmationStream: Stream<Item = Result<server::ConfirmationEvent>>;
80}