@@ -223,17 +223,31 @@ pub fn command<S: AsRef<OsStr>>(program: S) -> BootstrapCommand {
223
223
}
224
224
225
225
/// Represents the output of an executed process.
226
- #[ allow( unused) ]
227
226
pub struct CommandOutput {
228
227
status : CommandStatus ,
229
- stdout : Vec < u8 > ,
230
- stderr : Vec < u8 > ,
228
+ stdout : Option < Vec < u8 > > ,
229
+ stderr : Option < Vec < u8 > > ,
231
230
}
232
231
233
232
impl CommandOutput {
234
233
#[ must_use]
235
234
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
+ }
237
251
}
238
252
239
253
#[ must_use]
@@ -259,7 +273,10 @@ impl CommandOutput {
259
273
260
274
#[ must_use]
261
275
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" )
263
280
}
264
281
265
282
#[ must_use]
@@ -269,26 +286,19 @@ impl CommandOutput {
269
286
270
287
#[ must_use]
271
288
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" )
273
293
}
274
294
}
275
295
276
296
impl Default for CommandOutput {
277
297
fn default ( ) -> Self {
278
298
Self {
279
299
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 ! [ ] ) ,
292
302
}
293
303
}
294
304
}
0 commit comments