1use crate::BunLanguage;
2use core::str;
3use proto_core::{
4 async_trait, create_version_manifest_from_tags, load_git_tags, ProtoError, Resolvable, Tool,
5 VersionManifest,
6};
7
8#[async_trait]
9impl Resolvable<'_> for BunLanguage {
10 fn get_resolved_version(&self) -> &str {
11 match self.version.as_ref() {
12 Some(version) => version,
13 None => "latest",
14 }
15 }
16
17 async fn load_version_manifest(&self) -> Result<VersionManifest, ProtoError> {
18 let tags = load_git_tags("https://github.com/oven-sh/bun")
19 .await?
20 .iter()
21 .filter(|t| t.starts_with("bun-v"))
22 .map(|t| t.strip_prefix("bun-v").unwrap().to_owned())
23 .collect::<Vec<_>>();
24
25 let mut manifest = create_version_manifest_from_tags(tags);
26
27 manifest.inherit_aliases(&self.get_manifest()?.aliases);
28
29 Ok(manifest)
30 }
31
32 fn set_version(&mut self, version: &str) {
33 self.version = Some(version.to_owned());
34 }
35}