use crate::group::ChildInfo;
use std::error::Error;
use std::process::Output;
pub type DynErr = Box<dyn Error>;
pub type DynErrResult<T> = Result<T, DynErr>;
pub type ProcessOutput = Output;
pub type ChildOutput<M> = (Option<Output>, ChildInfo, M);
pub type ChildOutputOption<M> = Option<ChildOutput<M>>;
pub type DynErrOption = Option<DynErr>;
pub type OutputAndOrError<M> = (ChildOutputOption<M>, DynErrOption);
pub fn has_error<M>(output_option: &ChildOutputOption<M>, error_option: &DynErrOption) -> bool {
error_option.is_some()
|| {
matches!(output_option, Some((Some(out), _, _)) if !out.status.success() || !out.stderr.is_empty())
}
}
pub type OptOutput<M> = Option<OutputAndOrError<M>>;