From f949d8566259eae3a9b85e40f82a65288e7d273f Mon Sep 17 00:00:00 2001 From: Alice Ryhl Date: Tue, 14 Dec 2021 14:14:20 +0000 Subject: Add types for async Rust binder servers Test: tested by AIDL integration test Change-Id: Ic80e172d56329b7dbba64ff5972943e55caeeee7 --- libs/binder/rust/binder_tokio/lib.rs | 23 ++++++++++++++++++++++- libs/binder/rust/src/binder_async.rs | 6 ++++++ libs/binder/rust/src/lib.rs | 2 +- 3 files changed, 29 insertions(+), 2 deletions(-) (limited to 'libs') 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(pub R); + +impl BinderAsyncRuntime for TokioRuntime { + fn block_on(&self, future: F) -> F::Output { + self.0.block_on(future) + } +} + +impl BinderAsyncRuntime for TokioRuntime> { + fn block_on(&self, future: F) -> F::Output { + self.0.block_on(future) + } +} + +impl BinderAsyncRuntime for TokioRuntime { + fn block_on(&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; } + +/// 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(&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}; -- cgit v1.2.3-59-g8ed1b