@@ -223,17 +223,31 @@ pub fn command<S: AsRef<OsStr>>(program: S) -> BootstrapCommand {
223223}
224224
225225/// Represents the output of an executed process.
226- #[ allow( unused) ]
227226pub struct CommandOutput {
228227 status : CommandStatus ,
229- stdout : Vec < u8 > ,
230- stderr : Vec < u8 > ,
228+ stdout : Option < Vec < u8 > > ,
229+ stderr : Option < Vec < u8 > > ,
231230}
232231
233232impl CommandOutput {
234233 #[ must_use]
235234 pub fn did_not_start ( ) -> Self {
236- Self { status : CommandStatus :: DidNotStart , stdout : vec ! [ ] , stderr : vec ! [ ] }
235+ Self { status : CommandStatus :: DidNotStart , stdout : None , stderr : None }
236+ }
237+
238+ #[ must_use]
239+ pub fn from_output ( output : Output , stdout : OutputMode , stderr : OutputMode ) -> Self {
240+ Self {
241+ status : CommandStatus :: Finished ( output. status ) ,
242+ stdout : match stdout {
243+ OutputMode :: Print => None ,
244+ OutputMode :: Capture => Some ( output. stdout ) ,
245+ } ,
246+ stderr : match stderr {
247+ OutputMode :: Print => None ,
248+ OutputMode :: Capture => Some ( output. stderr ) ,
249+ } ,
250+ }
237251 }
238252
239253 #[ must_use]
@@ -259,7 +273,10 @@ impl CommandOutput {
259273
260274 #[ must_use]
261275 pub fn stdout ( & self ) -> String {
262- String :: from_utf8 ( self . stdout . clone ( ) ) . expect ( "Cannot parse process stdout as UTF-8" )
276+ String :: from_utf8 (
277+ self . stdout . clone ( ) . expect ( "Accessing stdout of a command that did not capture stdout" ) ,
278+ )
279+ . expect ( "Cannot parse process stdout as UTF-8" )
263280 }
264281
265282 #[ must_use]
@@ -269,26 +286,19 @@ impl CommandOutput {
269286
270287 #[ must_use]
271288 pub fn stderr ( & self ) -> String {
272- String :: from_utf8 ( self . stderr . clone ( ) ) . expect ( "Cannot parse process stderr as UTF-8" )
289+ String :: from_utf8 (
290+ self . stderr . clone ( ) . expect ( "Accessing stderr of a command that did not capture stderr" ) ,
291+ )
292+ . expect ( "Cannot parse process stderr as UTF-8" )
273293 }
274294}
275295
276296impl Default for CommandOutput {
277297 fn default ( ) -> Self {
278298 Self {
279299 status : CommandStatus :: Finished ( ExitStatus :: default ( ) ) ,
280- stdout : vec ! [ ] ,
281- stderr : vec ! [ ] ,
282- }
283- }
284- }
285-
286- impl From < Output > for CommandOutput {
287- fn from ( output : Output ) -> Self {
288- Self {
289- status : CommandStatus :: Finished ( output. status ) ,
290- stdout : output. stdout ,
291- stderr : output. stderr ,
300+ stdout : Some ( vec ! [ ] ) ,
301+ stderr : Some ( vec ! [ ] ) ,
292302 }
293303 }
294304}
0 commit comments