@@ -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