pub trait Extension {
// Required methods
fn exec(
&mut self,
cmd: &str,
tx: Sender<String>,
out: Output,
last_cmd: bool,
work_dir: &str,
) -> Result<ExitStatus, Error>;
fn setup(&self) -> Result<(), Error>;
// Provided methods
fn post_setup(&self, tx: Sender<String>) -> Result<ExitStatus, Error> { ... }
fn format_command(&self, cmd: &str) -> String { ... }
}