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