use std::fmt;
use std::process::ExitStatus;
#[derive(Debug, Clone)]
pub struct Output {
stdout: Vec<u8>,
stderr: Vec<u8>,
status: ExitStatus,
}
impl Output {
pub fn new(stdout: Vec<u8>, stderr: Vec<u8>, status: ExitStatus) -> Self {
Self {
stdout,
stderr,
status,
}
}
#[inline]
pub fn stdout(&self) -> &[u8] {
&self.stdout
}
#[inline]
pub fn stderr(&self) -> &[u8] {
&self.stderr
}
#[inline]
pub fn status(&self) -> ExitStatus {
self.status
}
#[inline]
pub fn stdout_str(&self) -> String {
String::from_utf8_lossy(&self.stdout).into_owned()
}
#[inline]
pub fn stderr_str(&self) -> String {
String::from_utf8_lossy(&self.stderr).into_owned()
}
#[inline]
pub fn success(&self) -> bool {
self.status.success()
}
#[inline]
pub fn code(&self) -> Option<i32> {
self.status.code()
}
}
impl fmt::Display for Output {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.stdout_str())
}
}