aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-external-packages/src/symfony/process/exception/process_failed_exception.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe-external-packages/src/symfony/process/exception/process_failed_exception.rs')
-rw-r--r--crates/shirabe-external-packages/src/symfony/process/exception/process_failed_exception.rs34
1 files changed, 32 insertions, 2 deletions
diff --git a/crates/shirabe-external-packages/src/symfony/process/exception/process_failed_exception.rs b/crates/shirabe-external-packages/src/symfony/process/exception/process_failed_exception.rs
index 8957226..a3645d6 100644
--- a/crates/shirabe-external-packages/src/symfony/process/exception/process_failed_exception.rs
+++ b/crates/shirabe-external-packages/src/symfony/process/exception/process_failed_exception.rs
@@ -1,5 +1,6 @@
//! ref: composer/vendor/symfony/process/Exception/ProcessFailedException.php
+use crate::symfony::process::exception::invalid_argument_exception::InvalidArgumentException;
use crate::symfony::process::process::Process;
#[derive(Debug)]
@@ -9,8 +10,37 @@ pub struct ProcessFailedException {
}
impl ProcessFailedException {
- pub fn new(_process: &Process) -> Self {
- todo!()
+ pub fn new(process: &mut Process) -> anyhow::Result<Self> {
+ if process.is_successful() {
+ return Err(InvalidArgumentException::new(
+ "Expected a failed process, but the given process was successful.".to_string(),
+ )
+ .into());
+ }
+
+ let mut error = format!(
+ "The command \"{}\" failed.\n\nExit Code: {}({})\n\nWorking directory: {}",
+ process.get_command_line(),
+ process
+ .get_exit_code()
+ .map(|c| c.to_string())
+ .unwrap_or_default(),
+ process.get_exit_code_text().unwrap_or_default(),
+ process.get_working_directory().unwrap_or_default(),
+ );
+
+ if !process.is_output_disabled() {
+ error += &format!(
+ "\n\nOutput:\n================\n{}\n\nError Output:\n================\n{}",
+ process.get_output()?,
+ process.get_error_output()?,
+ );
+ }
+
+ Ok(Self {
+ message: error,
+ code: 0,
+ })
}
}