lib.rs 1015 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. use std::process::Command;
  2. use anyhow::{bail, Context as _, Result};
  3. pub const AYA_BUILD_INTEGRATION_BPF: &str = "AYA_BUILD_INTEGRATION_BPF";
  4. pub const LIBBPF_DIR: &str = "xtask/libbpf";
  5. pub fn exec(cmd: &mut Command) -> Result<()> {
  6. let status = cmd
  7. .status()
  8. .with_context(|| format!("failed to run {cmd:?}"))?;
  9. if status.code() != Some(0) {
  10. bail!("{cmd:?} failed: {status:?}")
  11. }
  12. Ok(())
  13. }
  14. #[derive(Debug)]
  15. pub struct Errors<E>(Vec<E>);
  16. impl<E> Errors<E> {
  17. pub fn new(errors: Vec<E>) -> Self {
  18. Self(errors)
  19. }
  20. }
  21. impl<E> std::fmt::Display for Errors<E>
  22. where
  23. E: std::fmt::Debug,
  24. {
  25. fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  26. let Self(errors) = self;
  27. for (i, error) in errors.iter().enumerate() {
  28. if i != 0 {
  29. writeln!(f)?;
  30. }
  31. write!(f, "{:?}", error)?;
  32. }
  33. Ok(())
  34. }
  35. }
  36. impl<E> std::error::Error for Errors<E> where E: std::fmt::Debug {}