stylus_tools/core/
message.rs1use std::process::Output;
5
6use serde::{Deserialize, Serialize};
7
8use crate::{Error, Result};
9
10#[derive(Debug, Deserialize, Serialize)]
11pub struct ProcessOutput {
12 pub process_name: String,
13 #[serde(skip_serializing_if = "String::is_empty")]
14 pub stdout: String,
15 #[serde(skip_serializing_if = "String::is_empty")]
16 pub stderr: String,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub exit_code: Option<i32>,
19}
20
21impl ProcessOutput {
22 pub fn check(process_name: impl Into<String>, output: Output) -> Result<String> {
23 let process_output = ProcessOutput {
24 process_name: process_name.into(),
25 stdout: String::from_utf8(output.stdout)?,
26 stderr: String::from_utf8(output.stderr)?,
27 exit_code: output.status.code(),
28 };
29 if output.status.success() {
30 Ok(process_output.stdout)
31 } else {
32 Err(Error::CommandFailure(process_output))
33 }
34 }
35}