diff options
| author | 2022-01-12 16:55:08 +0000 | |
|---|---|---|
| committer | 2022-01-12 16:55:08 +0000 | |
| commit | 3cf307284a620c67b9eb024439583fc1c42574ee (patch) | |
| tree | da11bd3eeb9d8404c3a20ee2b1fb8e38e8dff0aa /libs | |
| parent | aad4dcfb3886954dd941f32dae0134fdf2adade2 (diff) | |
| parent | f949d8566259eae3a9b85e40f82a65288e7d273f (diff) | |
Merge "Add types for async Rust binder servers"
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/binder/rust/binder_tokio/lib.rs | 23 | ||||
| -rw-r--r-- | libs/binder/rust/src/binder_async.rs | 6 | ||||
| -rw-r--r-- | libs/binder/rust/src/lib.rs | 2 |
3 files changed, 29 insertions, 2 deletions
diff --git a/libs/binder/rust/binder_tokio/lib.rs b/libs/binder/rust/binder_tokio/lib.rs index 91047bea48..47dcdc2bc3 100644 --- a/libs/binder/rust/binder_tokio/lib.rs +++ b/libs/binder/rust/binder_tokio/lib.rs @@ -29,7 +29,7 @@ //! [`Tokio`]: crate::Tokio use binder::public_api::{BinderAsyncPool, BoxFuture, Strong}; -use binder::{FromIBinder, StatusCode}; +use binder::{FromIBinder, StatusCode, BinderAsyncRuntime}; use std::future::Future; /// Retrieve an existing service for a particular interface, sleeping for a few @@ -120,3 +120,24 @@ impl BinderAsyncPool for Tokio { } } } + +/// Wrapper around Tokio runtime types for providing a runtime to a binder server. +pub struct TokioRuntime<R>(pub R); + +impl BinderAsyncRuntime for TokioRuntime<tokio::runtime::Runtime> { + fn block_on<F: Future>(&self, future: F) -> F::Output { + self.0.block_on(future) + } +} + +impl BinderAsyncRuntime for TokioRuntime<std::sync::Arc<tokio::runtime::Runtime>> { + fn block_on<F: Future>(&self, future: F) -> F::Output { + self.0.block_on(future) + } +} + +impl BinderAsyncRuntime for TokioRuntime<tokio::runtime::Handle> { + fn block_on<F: Future>(&self, future: F) -> F::Output { + self.0.block_on(future) + } +} diff --git a/libs/binder/rust/src/binder_async.rs b/libs/binder/rust/src/binder_async.rs index 214c0b5f26..579f9f90b8 100644 --- a/libs/binder/rust/src/binder_async.rs +++ b/libs/binder/rust/src/binder_async.rs @@ -53,3 +53,9 @@ pub trait BinderAsyncPool { B: Send + 'a, E: From<crate::StatusCode>; } + +/// A runtime for executing an async binder server. +pub trait BinderAsyncRuntime { + /// Block on the provided future, running it to completion and returning its output. + fn block_on<F: Future>(&self, future: F) -> F::Output; +} diff --git a/libs/binder/rust/src/lib.rs b/libs/binder/rust/src/lib.rs index 7c04a7207b..20d90f7b3c 100644 --- a/libs/binder/rust/src/lib.rs +++ b/libs/binder/rust/src/lib.rs @@ -112,7 +112,7 @@ pub use crate::binder::{ Stability, Strong, ToAsyncInterface, ToSyncInterface, TransactionCode, TransactionFlags, Weak, FIRST_CALL_TRANSACTION, FLAG_CLEAR_BUF, FLAG_ONEWAY, FLAG_PRIVATE_LOCAL, LAST_CALL_TRANSACTION, }; -pub use crate::binder_async::{BoxFuture, BinderAsyncPool}; +pub use crate::binder_async::{BoxFuture, BinderAsyncPool, BinderAsyncRuntime}; pub use error::{status_t, ExceptionCode, Result, Status, StatusCode}; pub use native::{add_service, force_lazy_services_persist, is_handling_transaction, register_lazy_service, Binder}; pub use parcel::{BorrowedParcel, Parcel}; |