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, content: &str) -> PluginResult<Option<String>>;
}