Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f949d856 authored by Alice Ryhl's avatar Alice Ryhl
Browse files

Add types for async Rust binder servers

Test: tested by AIDL integration test
Change-Id: Ic80e172d56329b7dbba64ff5972943e55caeeee7
parent eb2e914f
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -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)
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -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;
}
+1 −1
Original line number Diff line number Diff line
@@ -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};