use std::path::Path;
use crate::error::PluginResult;
use crate::model::{AvailableVersion, EnvKey, InstallPlan, InstalledRuntime, PluginManifest};
pub trait Plugin {
fn manifest(&self) -> &PluginManifest;
fn available_versions(&self, args: &[String]) -> PluginResult<Vec<AvailableVersion>>;
fn install_plan(&self, version: &str) -> PluginResult<InstallPlan>;
fn post_install(&self, _runtime: &InstalledRuntime) -> PluginResult<()> {
Ok(())
}
fn env_keys(&self, runtime: &InstalledRuntime) -> PluginResult<Vec<EnvKey>>;
fn pre_use(
&self,
_requested_version: &str,
_scope: &str,
_cwd: &Path,
_previous_version: Option<&str>,
_installed: &[InstalledRuntime],
) -> PluginResult<Option<String>> {
Ok(None)
}
fn parse_legacy_file(
&self,
file_name: &str,
file_path: &Path,
content: &str,
installed_versions: &[String],
strategy: &str,
) -> PluginResult<Option<String>>;
fn pre_uninstall(&self, _runtime: &InstalledRuntime) -> PluginResult<()> {
Ok(())
}
}