- { stdin }.write_all(source.as_bytes()).unwrap();
- let (output, mut command) = reader_thread.join().unwrap().unwrap();
- let exit_status = command.wait().unwrap();
- assert!(exit_status.success());
- output
+ let write_result = { stdin }.write_all(source.as_bytes());
+ let join_result = reader_thread.join().unwrap();
+ write_result?;
+ let (output, mut command) = join_result?;
+ let exit_status = command.wait()?;
+ if exit_status.success() {
+ Ok(output)
+ } else {
+ Err(io::Error::new(
+ io::ErrorKind::Other,
+ format!("exited with status {}", exit_status),
+ ))
+ }