use bytes::Bytes;
use hyper::header;
use serde::Deserialize;
#[derive(Deserialize)]
pub struct GitHubRelease {
pub html_url: String,
pub tag_name: String,
pub name: String,
pub published_at: String,
pub assets: Vec<GitHubReleaseAsset>,
}
#[derive(Deserialize)]
pub struct GitHubReleaseAsset {
pub name: String,
pub browser_download_url: String,
}
pub async fn get_latest_release(
http_client: &reqwest::Client,
repository: &str,
) -> Result<GitHubRelease, reqwest::Error> {
let url = format!(
"https://api.github.com/repos/{}/releases/latest",
repository
);
http_client
.get(url)
.header(header::ACCEPT, "application/json")
.send()
.await?
.json()
.await
}
pub async fn download_latest_release(
http_client: &reqwest::Client,
asset: &GitHubReleaseAsset,
) -> Result<Bytes, reqwest::Error> {
http_client
.get(&asset.browser_download_url)
.send()
.await?
.bytes()
.await
}