//! A module for working with processes. use crate::wit::zed::extension::process; pub use crate::wit::zed::extension::process::{Command, Output}; impl Command { pub fn new(program: impl Into) -> Self { Self { command: program.into(), args: Vec::new(), env: Vec::new(), } } pub fn arg(mut self, arg: impl Into) -> Self { self.args.push(arg.into()); self } pub fn args(mut self, args: impl IntoIterator>) -> Self { self.args.extend(args.into_iter().map(Into::into)); self } pub fn env(mut self, key: impl Into, value: impl Into) -> Self { self.env.push((key.into(), value.into())); self } pub fn envs( mut self, envs: impl IntoIterator, impl Into)>, ) -> Self { self.env.extend( envs.into_iter() .map(|(key, value)| (key.into(), value.into())), ); self } pub fn output(&mut self) -> Result { process::run_command(self) } }