about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-12-19 06:21:10 +0000
committerbors <bors@rust-lang.org>2015-12-19 06:21:10 +0000
commit67a2d1f34f917b6e583440b0a86767b2ff8e4d4f (patch)
tree1a0eadd1fa29d7c8c01da9fcff3883d2d3d1986e /src/libstd
parent440ef8b1548edf9d03a5b880d77a8b476cfb7fa2 (diff)
parent21030f1fc9510d9808c0f8352ea8a5eeacfa4ca5 (diff)
downloadrust-67a2d1f34f917b6e583440b0a86767b2ff8e4d4f.tar.gz
rust-67a2d1f34f917b6e583440b0a86767b2ff8e4d4f.zip
Auto merge of #30403 - webmobster:master, r=alexcrichton
I didn't see any reason that debug couldn't be added to this object, since every field derives debug.
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/process.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libstd/process.rs b/src/libstd/process.rs
index 91c3819307f..be1fe9b2a9b 100644
--- a/src/libstd/process.rs
+++ b/src/libstd/process.rs
@@ -20,6 +20,7 @@ use ffi::OsStr;
 use fmt;
 use io::{self, Error, ErrorKind};
 use path;
+use str;
 use sys::pipe::{self, AnonPipe};
 use sys::process as imp;
 use sys_common::{AsInner, AsInnerMut, FromInner, IntoInner};
@@ -400,6 +401,32 @@ pub struct Output {
     pub stderr: Vec<u8>,
 }
 
+// If either stderr or stdout are valid utf8 strings it prints the valid
+// strings, otherwise it prints the byte sequence instead
+#[stable(feature = "process_output_debug", since = "1.7.0")]
+impl fmt::Debug for Output {
+    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
+
+        let stdout_utf8 = str::from_utf8(&self.stdout);
+        let stdout_debug: &fmt::Debug = match stdout_utf8 {
+            Ok(ref str) => str,
+            Err(_) => &self.stdout
+        };
+
+        let stderr_utf8 = str::from_utf8(&self.stderr);
+        let stderr_debug: &fmt::Debug = match stderr_utf8 {
+            Ok(ref str) => str,
+            Err(_) => &self.stderr
+        };
+
+        fmt.debug_struct("Output")
+            .field("status", &self.status)
+            .field("stdout", stdout_debug)
+            .field("stderr", stderr_debug)
+            .finish()
+    }
+}
+
 /// Describes what to do with a standard I/O stream for a child process.
 #[stable(feature = "process", since = "1.0.0")]
 pub struct Stdio(StdioImp);