Assorted refactoring
Mostly removing duplication. Also added a comment as suggested by
Andrew.
Bug: 161471326
Test: composd_cmd async-odrefresh
Change-Id: I7da83cb825de7b4fd2267b1e496808a423544c16
diff --git a/compos/common/binder.rs b/compos/common/binder.rs
new file mode 100644
index 0000000..6bd3957
--- /dev/null
+++ b/compos/common/binder.rs
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//! Helper for converting Error types to what Binder expects
+
+use anyhow::Result;
+use binder::public_api::{ExceptionCode, Result as BinderResult};
+use binder_common::new_binder_exception;
+use log::warn;
+use std::fmt::Debug;
+
+/// Convert a Result<T, E> to BinderResult<T> to allow it to be returned from a binder RPC,
+/// preserving the content as far as possible.
+/// Also log the error if there is one.
+pub fn to_binder_result<T, E: Debug>(result: Result<T, E>) -> BinderResult<T> {
+ result.map_err(|e| {
+ let message = format!("{:?}", e);
+ warn!("Returning binder error: {}", &message);
+ new_binder_exception(ExceptionCode::SERVICE_SPECIFIC, message)
+ })
+}