From c0c9204848bc763a958973264a2b0d8e88cb6e06 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Fri, 5 May 2023 23:57:34 -0700 Subject: [PATCH] Add ResultExt --- native/src/base/logging.rs | 33 ++++++++++++++++++++++++++++++++- native/src/boot/payload.rs | 14 +++++--------- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/native/src/base/logging.rs b/native/src/base/logging.rs index ed4961d67..eb04880b7 100644 --- a/native/src/base/logging.rs +++ b/native/src/base/logging.rs @@ -1,4 +1,4 @@ -use std::fmt::Arguments; +use std::fmt::{Arguments, Display}; use std::io::{stderr, stdout, Write}; use std::process::exit; @@ -155,3 +155,34 @@ macro_rules! debug { macro_rules! debug { ($($args:tt)+) => {}; } + +pub trait ResultExt { + fn ok_or_log(&self); + fn ok_or_msg(&self, args: Arguments); + fn log_on_error(&self) -> &Self; + fn msg_on_error(&self, args: Arguments) -> &Self; +} + +impl ResultExt for Result { + fn ok_or_log(&self) { + if let Err(e) = self { + error!("{}", e); + } + } + + fn ok_or_msg(&self, args: Arguments) { + if let Err(e) = self { + error!("{}: {}", args, e); + } + } + + fn log_on_error(&self) -> &Self { + self.ok_or_log(); + self + } + + fn msg_on_error(&self, args: Arguments) -> &Self { + self.ok_or_msg(args); + self + } +} diff --git a/native/src/boot/payload.rs b/native/src/boot/payload.rs index db42f2da5..4b214f04a 100644 --- a/native/src/boot/payload.rs +++ b/native/src/boot/payload.rs @@ -7,8 +7,8 @@ use byteorder::{BigEndian, ReadBytesExt}; use protobuf::{EnumFull, Message}; use base::libc::c_char; -use base::WriteExt; -use base::{error, ptr_to_str}; +use base::ptr_to_str; +use base::{ResultExt, WriteExt}; use crate::ffi; use crate::update_metadata::install_operation::Type; @@ -148,11 +148,7 @@ fn do_extract_boot_from_payload(in_path: &str, out_path: &str) -> io::Result<()> pub fn extract_boot_from_payload(in_path: *const c_char, out_path: *const c_char) -> bool { let in_path = ptr_to_str(in_path); let out_path = ptr_to_str(out_path); - match do_extract_boot_from_payload(in_path, out_path) { - Ok(_) => true, - Err(err) => { - error!("Failed to extract boot from payload: {}", err); - false - } - } + do_extract_boot_from_payload(in_path, out_path) + .msg_on_error(format_args!("Failed to extract boot from payload")) + .is_ok() }