pub trait Shell {
// Required methods
fn name(&self) -> &'static str;
fn init(&self, binary: &str, autoload: bool, autoload_args: &str) -> String;
fn set_var(&self, var: &str, value: &str) -> String;
fn unset_var(&self, var: &str) -> String;
fn set_alias(&self, var: &str, value: &str) -> String;
fn unset_alias(&self, var: &str) -> String;
fn set_function(&self, var: &str, value: &str) -> String;
fn unset_function(&self, var: &str) -> String;
// Provided methods
fn edit(&self, editor: Option<OsString>, path: &str) -> Option<String> { ... }
fn set_file(&self, var: &str, value: &str) -> String { ... }
fn unset_file(&self, var: &str) -> String { ... }
}