stylus_tools/core/
message.rs

1// Copyright 2025, Offchain Labs, Inc.
2// For licensing, see https://github.com/OffchainLabs/stylus-sdk-rs/blob/main/licenses/COPYRIGHT.md
3
4use 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}