Trait VxTool

Source
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§

Source

fn name(&self) -> &str

Tool name (required)

Source

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§

Source

fn description(&self) -> &str

Tool description (optional, has default)

Source

fn aliases(&self) -> Vec<&str>

Supported aliases for this tool (optional)

Source

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

Source

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)

Source

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)

Source

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

Source

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

Source

fn get_version_install_dir(&self, version: &str) -> PathBuf

Get installation directory for a specific version

Source

fn get_base_install_dir(&self) -> PathBuf

Get base installation directory for this tool

Source

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

Source

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

Source

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)

Source

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

Source

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

Source

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.)

Source

fn metadata(&self) -> HashMap<String, String>

Additional metadata for the tool (optional)

Implementors§