proto_bun/
resolve.rs

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}