pub trait VxTool: Send + Sync {
Show 18 methods
// Required methods
fn name(&self) -> &str;
fn fetch_versions<'life0, 'async_trait>(
&'life0 self,
include_prerelease: bool,
) -> Pin<Box<dyn Future<Output = Result<Vec<VersionInfo>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
// Provided methods
fn description(&self) -> &str { ... }
fn aliases(&self) -> Vec<&str> { ... }
fn install_version<'life0, 'life1, 'async_trait>(
&'life0 self,
version: &'life1 str,
force: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn is_version_installed<'life0, 'life1, 'async_trait>(
&'life0 self,
version: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn execute<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
args: &'life1 [String],
context: &'life2 ToolContext,
) -> Pin<Box<dyn Future<Output = Result<ToolExecutionResult>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait { ... }
fn get_executable_path<'life0, 'life1, 'async_trait>(
&'life0 self,
install_dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<PathBuf>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn get_download_url<'life0, 'life1, 'async_trait>(
&'life0 self,
version: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn get_version_install_dir(&self, version: &str) -> PathBuf { ... }
fn get_base_install_dir(&self) -> PathBuf { ... }
fn default_install_workflow<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
version: &'life1 str,
_install_dir: &'life2 Path,
) -> Pin<Box<dyn Future<Output = Result<PathBuf>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait { ... }
fn default_execute_workflow<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
args: &'life1 [String],
context: &'life2 ToolContext,
) -> Pin<Box<dyn Future<Output = Result<ToolExecutionResult>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait { ... }
fn get_active_version<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn get_installed_versions<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn remove_version<'life0, 'life1, 'async_trait>(
&'life0 self,
version: &'life1 str,
force: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn get_status<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<ToolStatus>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn metadata(&self) -> HashMap<String, String> { ... }
}Expand description
Simplified trait for implementing tool support
This trait provides sensible defaults for most methods, so developers only need to implement the essential functionality for their specific tool.
Required Methods§
Sourcefn fetch_versions<'life0, 'async_trait>(
&'life0 self,
include_prerelease: bool,
) -> Pin<Box<dyn Future<Output = Result<Vec<VersionInfo>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn fetch_versions<'life0, 'async_trait>(
&'life0 self,
include_prerelease: bool,
) -> Pin<Box<dyn Future<Output = Result<Vec<VersionInfo>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Fetch available versions from the tool’s official source This is the main method developers need to implement
Provided Methods§
Sourcefn description(&self) -> &str
fn description(&self) -> &str
Tool description (optional, has default)
Sourcefn install_version<'life0, 'life1, 'async_trait>(
&'life0 self,
version: &'life1 str,
force: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn install_version<'life0, 'life1, 'async_trait>(
&'life0 self,
version: &'life1 str,
force: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Install a specific version of the tool Default implementation provides a basic download-and-extract workflow
Sourcefn is_version_installed<'life0, 'life1, 'async_trait>(
&'life0 self,
version: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn is_version_installed<'life0, 'life1, 'async_trait>(
&'life0 self,
version: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Check if a version is installed (has sensible default)
Sourcefn execute<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
args: &'life1 [String],
context: &'life2 ToolContext,
) -> Pin<Box<dyn Future<Output = Result<ToolExecutionResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn execute<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
args: &'life1 [String],
context: &'life2 ToolContext,
) -> Pin<Box<dyn Future<Output = Result<ToolExecutionResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Execute the tool with given arguments (has default implementation)
Sourcefn get_executable_path<'life0, 'life1, 'async_trait>(
&'life0 self,
install_dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<PathBuf>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_executable_path<'life0, 'life1, 'async_trait>(
&'life0 self,
install_dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<PathBuf>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Get the executable path within an installation directory Override this if your tool has a non-standard layout
Sourcefn get_download_url<'life0, 'life1, 'async_trait>(
&'life0 self,
version: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_download_url<'life0, 'life1, 'async_trait>(
&'life0 self,
version: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Get download URL for a specific version and current platform Override this to provide platform-specific URLs
Sourcefn get_version_install_dir(&self, version: &str) -> PathBuf
fn get_version_install_dir(&self, version: &str) -> PathBuf
Get installation directory for a specific version
Sourcefn get_base_install_dir(&self) -> PathBuf
fn get_base_install_dir(&self) -> PathBuf
Get base installation directory for this tool
Sourcefn default_install_workflow<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
version: &'life1 str,
_install_dir: &'life2 Path,
) -> Pin<Box<dyn Future<Output = Result<PathBuf>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn default_install_workflow<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
version: &'life1 str,
_install_dir: &'life2 Path,
) -> Pin<Box<dyn Future<Output = Result<PathBuf>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Default installation workflow (download + extract) Most tools can use this as-is
Sourcefn default_execute_workflow<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
args: &'life1 [String],
context: &'life2 ToolContext,
) -> Pin<Box<dyn Future<Output = Result<ToolExecutionResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn default_execute_workflow<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
args: &'life1 [String],
context: &'life2 ToolContext,
) -> Pin<Box<dyn Future<Output = Result<ToolExecutionResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Default execution workflow
Sourcefn get_active_version<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_active_version<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get the currently active version (has default implementation)
Sourcefn get_installed_versions<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_installed_versions<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get all installed versions
Sourcefn remove_version<'life0, 'life1, 'async_trait>(
&'life0 self,
version: &'life1 str,
force: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn remove_version<'life0, 'life1, 'async_trait>(
&'life0 self,
version: &'life1 str,
force: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Remove a specific version of the tool
Sourcefn get_status<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<ToolStatus>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_status<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<ToolStatus>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get tool status (installed versions, active version, etc.)