use std::process::Command; use anyhow::{bail, Context as _, Result}; pub const AYA_BUILD_INTEGRATION_BPF: &str = "AYA_BUILD_INTEGRATION_BPF"; pub const LIBBPF_DIR: &str = "xtask/libbpf"; pub fn exec(cmd: &mut Command) -> Result<()> { let status = cmd .status() .with_context(|| format!("failed to run {cmd:?}"))?; if status.code() != Some(0) { bail!("{cmd:?} failed: {status:?}") } Ok(()) } #[derive(Debug)] pub struct Errors(Vec); impl Errors { pub fn new(errors: Vec) -> Self { Self(errors) } } impl std::fmt::Display for Errors where E: std::fmt::Debug, { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let Self(errors) = self; for (i, error) in errors.iter().enumerate() { if i != 0 { writeln!(f)?; } write!(f, "{:?}", error)?; } Ok(()) } } impl std::error::Error for Errors where E: std::fmt::Debug {}