pub trait Tool<'tool>: Send + Sync + Describable<'tool> + Detector<'tool> + Resolvable<'tool> + Downloadable<'tool> + Verifiable<'tool> + Installable<'tool> + Executable<'tool> + Shimable<'tool> {
Show 14 methods
    // Required methods
    fn as_any(&self) -> &(dyn Any + 'static);
    fn get_manifest(&self) -> Result<&Manifest, ProtoError>;
    fn get_manifest_mut(&mut self) -> Result<&mut Manifest, ProtoError>;
    fn get_tool_dir(&self) -> &Path;
    // Provided methods
    fn get_manifest_path(&self) -> PathBuf { ... }
    fn before_setup<'life0, 'async_trait>(
        &'life0 mut self
    ) -> Pin<Box<dyn Future<Output = Result<(), ProtoError>> + Send + 'async_trait, Global>>
       where 'life0: 'async_trait,
             Self: 'async_trait { ... }
    fn setup<'life0, 'life1, 'async_trait>(
        &'life0 mut self,
        initial_version: &'life1 str
    ) -> Pin<Box<dyn Future<Output = Result<bool, ProtoError>> + Send + 'async_trait, Global>>
       where 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: 'async_trait { ... }
    fn setup_shims<'life0, 'async_trait>(
        &'life0 mut self,
        force: bool
    ) -> Pin<Box<dyn Future<Output = Result<(), ProtoError>> + Send + 'async_trait, Global>>
       where 'life0: 'async_trait,
             Self: 'async_trait { ... }
    fn is_setup<'life0, 'life1, 'async_trait>(
        &'life0 mut self,
        initial_version: &'life1 str
    ) -> Pin<Box<dyn Future<Output = Result<bool, ProtoError>> + Send + 'async_trait, Global>>
       where 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: 'async_trait { ... }
    fn after_setup<'life0, 'async_trait>(
        &'life0 mut self
    ) -> Pin<Box<dyn Future<Output = Result<(), ProtoError>> + Send + 'async_trait, Global>>
       where 'life0: 'async_trait,
             Self: 'async_trait { ... }
    fn cleanup<'life0, 'async_trait>(
        &'life0 mut self
    ) -> Pin<Box<dyn Future<Output = Result<(), ProtoError>> + Send + 'async_trait, Global>>
       where 'life0: 'async_trait,
             Self: 'async_trait { ... }
    fn before_teardown<'life0, 'async_trait>(
        &'life0 mut self
    ) -> Pin<Box<dyn Future<Output = Result<(), ProtoError>> + Send + 'async_trait, Global>>
       where 'life0: 'async_trait,
             Self: 'async_trait { ... }
    fn teardown<'life0, 'async_trait>(
        &'life0 mut self
    ) -> Pin<Box<dyn Future<Output = Result<bool, ProtoError>> + Send + 'async_trait, Global>>
       where 'life0: 'async_trait,
             Self: 'async_trait { ... }
    fn after_teardown<'life0, 'async_trait>(
        &'life0 mut self
    ) -> Pin<Box<dyn Future<Output = Result<(), ProtoError>> + Send + 'async_trait, Global>>
       where 'life0: 'async_trait,
             Self: 'async_trait { ... }
 }