tinymist_package/pack/
release.rs

1use ecow::EcoString;
2
3use super::*;
4
5/// A package in the GitHub releases.
6#[derive(Debug, Clone)]
7pub struct GitHubReleasePack {
8    /// The package specifier.
9    pub specifier: PackageSpec,
10    /// The URL of the package.
11    pub repo: EcoString,
12    /// The name of the package.
13    pub name: EcoString,
14}
15
16impl PackFs for GitHubReleasePack {
17    fn read_all(
18        &mut self,
19        f: &mut (dyn FnMut(&str, PackFile) -> PackageResult<()> + Send + Sync),
20    ) -> PackageResult<()> {
21        let url = format!(
22            "https://api.github.com/repos/{}/releases/latest/{}",
23            self.repo, self.name,
24        );
25
26        HttpPack::new(self.specifier.clone(), url).read_all(f)
27    }
28}
29
30impl Pack for GitHubReleasePack {}
31impl PackExt for GitHubReleasePack {}