#[macro_export] macro_rules! task { ($verse:expr, $out:expr) => { if $verse.couplet { let mut child = Command::new($verse.verb()) .args($verse.clause()) .stdin(Stdio::piped()) .spawn() .map_err(|e| match e.kind() { io::ErrorKind::PermissionDenied => Mishap::PermissionDenied($verse.verb()), _ => Mishap::Else($verse.verb()), })?; let stdin = child .stdin .as_mut() .ok_or(Mishap::BrokenPipe($verse.verb()))?; stdin .write_all(&$out.as_bytes()) .map_err(|_| Mishap::BrokenPipe($verse.verb()))?; $out.clear(); child } else { Command::new($verse.verb()) .args($verse.clause()) .spawn() .map_err(|e| match e.kind() { io::ErrorKind::PermissionDenied => Mishap::PermissionDenied($verse.verb()), _ => Mishap::Else($verse.verb()), })? } }; } #[macro_export()] macro_rules! ctask { ($verse:expr, $out:expr) => { if $verse.couplet { let mut child = Command::new($verse.verb()) .args($verse.clause()) .stdin(Stdio::piped()) .stdout(Stdio::piped()) .spawn() .map_err(|e| match e.kind() { io::ErrorKind::PermissionDenied => Mishap::PermissionDenied($verse.verb()), _ => Mishap::Else($verse.verb()), })?; let stdin = child .stdin .as_mut() .ok_or(Mishap::BrokenPipe($verse.verb()))?; stdin .write_all(&$out.as_bytes()) .map_err(|_| Mishap::BrokenPipe($verse.verb()))?; $out.clear(); child } else { Command::new($verse.verb()) .args($verse.clause()) .stdout(Stdio::piped()) .spawn() .map_err(|e| match e.kind() { io::ErrorKind::PermissionDenied => Mishap::PermissionDenied($verse.verb()), _ => Mishap::Else($verse.verb()), })? } }; }