pub trait ToolTrait {
// Required methods
fn install(&self) -> Result<(), SolarError>;
fn remove(&self) -> Result<(), SolarError>;
// Provided methods
fn act(&self, action: &Action) -> Result<(), SolarError> { ... }
fn upgrade(&self) -> Result<(), SolarError> { ... }
}