| // Copyright 2023 The Sapphire Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| pub mod types; |
| pub use types::{Characteristic, Descriptor, Result}; |
| |
| pub mod server; |
| pub use server::Server; |
| |
| pub mod client; |
| pub use client::Client; |
| |
| pub mod central; |
| pub use central::Central; |
| |
| pub mod pii; |
| |
| #[cfg(any(test, feature = "test-utils"))] |
| pub mod test_utils; |
| |
| #[cfg(test)] |
| mod tests; |
| |
| use futures::{Future, Stream}; |
| |
| /// Implementors implement traits with respect to GattTypes. |
| /// Implementation crates provide an object which relates a constellation of |
| /// types to each other, used to provide concrete types for library crates to |
| /// paramaterize on. |
| pub trait GattTypes: Sized { |
| // Types related to finding and connecting to peers |
| type Central: Central<Self>; |
| type ScanResultStream: Stream<Item = Result<central::ScanResult>> + 'static; |
| type Client: Client<Self>; |
| type ConnectFuture: Future<Output = Result<Self::Client>>; |
| |
| // Types related to finding and connecting to services |
| type PeerServiceHandle: client::PeerServiceHandle<Self>; |
| type FindServicesFut: Future<Output = Result<Vec<Self::PeerServiceHandle>>> + 'static; |
| type PeerService: client::PeerService<Self>; |
| type ServiceConnectFut: Future<Output = Result<Self::PeerService>>; |
| |
| // Types related to interacting with services |
| /// Future returned by PeerService::discover_characteristics, |
| /// delivering the set of characteristics discovered within a service |
| type CharacteristicDiscoveryFut: Future<Output = Result<Vec<Characteristic>>>; |
| /// A stream of notifications, delivering updates to a characteristic value |
| /// that has been subscribed to. See [`client::PeerService::subscribe`] |
| type NotificationStream: Stream<Item = Result<client::CharacteristicNotification>> + 'static; |
| /// Future resolving when a characteristic or descriptor has been read. |
| /// Resolves to a number of bytes read along with a boolean indicating if |
| /// the value was possibly truncated, or an Error if the value could not |
| /// be read. |
| type ReadFut<'a>: Future<Output = Result<(usize, bool)>> + 'a; |
| /// Future resolving when a characteristic or descriptor has been written. |
| /// Returns an error if the value could not be written. |
| type WriteFut<'a>: Future<Output = Result<()>> + 'a; |
| } |
| |
| /// Servers and services are defined with respect to ServerTypes. |
| /// Implementation crates provide an object which relates this constellation of |
| /// types to each other, used to provide concrete types for library crates to |
| /// paramaterize on. |
| pub trait ServerTypes: Sized { |
| type Server: Server<Self>; |
| type LocalService: server::LocalService<Self>; |
| type LocalServiceFut: Future<Output = Result<Self::LocalService>>; |
| type ServiceEventStream: Stream<Item = Result<server::ServiceEvent<Self>>>; |
| type ServiceWriteType: ToOwned<Owned = Vec<u8>>; |
| type ReadResponder: server::ReadResponder; |
| type WriteResponder: server::WriteResponder; |
| |
| type IndicateConfirmationStream: Stream<Item = Result<server::ConfirmationEvent>>; |
| } |