1use std::path::Path;
2
3use crate::error::PluginResult;
4use crate::model::{AvailableVersion, EnvKey, InstallPlan, InstalledRuntime, PluginManifest};
5
6pub trait Plugin {
8 fn manifest(&self) -> &PluginManifest;
10
11 fn available_versions(&self, args: &[String]) -> PluginResult<Vec<AvailableVersion>>;
13
14 fn install_plan(&self, version: &str) -> PluginResult<InstallPlan>;
16
17 fn post_install(&self, _runtime: &InstalledRuntime) -> PluginResult<()> {
19 Ok(())
20 }
21
22 fn env_keys(&self, runtime: &InstalledRuntime) -> PluginResult<Vec<EnvKey>>;
24
25 fn pre_use(
27 &self,
28 _requested_version: &str,
29 _scope: &str,
30 _cwd: &Path,
31 _previous_version: Option<&str>,
32 _installed: &[InstalledRuntime],
33 ) -> PluginResult<Option<String>> {
34 Ok(None)
35 }
36
37 fn parse_legacy_file(&self, file_name: &str, content: &str) -> PluginResult<Option<String>>;
39}