android_tools_rs/
error.rs1use displaydoc::Display;
4use std::process::Command;
5use thiserror::Error;
6
7pub type Result<T> = std::result::Result<T, Error>;
9
10#[derive(Display, Debug, Error)]
12#[ignore_extra_doc_attributes]
13pub enum Error {
14 CmdFailed(Command, String, String),
16 BundletoolNotFound,
18 Io(#[from] std::io::Error),
20 OtherError(#[from] Box<dyn std::error::Error>),
22}
23
24pub trait CommandExt {
29 fn output_err(self, print_logs: bool) -> Result<std::process::Output>;
32}
33
34impl CommandExt for Command {
35 fn output_err(mut self, print_logs: bool) -> Result<std::process::Output> {
36 let output = match print_logs {
38 true => self.spawn().and_then(|p| p.wait_with_output())?,
39 false => self.output()?,
40 };
41 if !output.status.success() {
42 return Err(Error::CmdFailed(
43 self,
44 String::from_utf8_lossy(&output.stdout).to_string(),
45 String::from_utf8_lossy(&output.stderr).to_string(),
46 ));
47 }
48 Ok(output)
49 }
50}