use std::os::fd::OwnedFd; use tokio::process::Command; use tokio_crate as tokio; use crate::{ map_fds, preserve_fds, validate_child_fds, CommandFdExt, FdMapping, FdMappingCollision, }; impl CommandFdExt for Command { fn fd_mappings( &mut self, mut mappings: Vec, ) -> Result<&mut Self, FdMappingCollision> { let child_fds = validate_child_fds(&mappings)?; unsafe { self.pre_exec(move || map_fds(&mut mappings, &child_fds)); } Ok(self) } fn preserved_fds(&mut self, fds: Vec) -> &mut Self { unsafe { self.pre_exec(move || preserve_fds(&fds)); } self } }