1use reqwest::blocking::Client;
4use serde::Deserialize;
5
6const GITHUB_TAG_REF_API_URL: &str =
7 "https://api.github.com/repos/citizenfx/fivem/git/ref/tags/v1.0.0.{version}";
8
9#[derive(Deserialize)]
10struct Ref {
11 object: RefObject,
12}
13
14#[derive(Deserialize)]
15struct RefObject {
16 url: String,
17}
18
19#[derive(Deserialize)]
20struct Tag {
21 object: TagObject,
22}
23
24#[derive(Deserialize)]
25struct TagObject {
26 sha: String,
27}
28
29pub fn get_version_commit_sha<S>(client: &Client, version: S) -> Result<String, reqwest::Error>
31where
32 S: AsRef<str>,
33{
34 let version = version.as_ref();
35
36 log::trace!("getting github tag ref");
37 let ref_url = GITHUB_TAG_REF_API_URL.replace("{version}", version);
38 let github_ref = client.get(ref_url).send()?.json::<Ref>()?;
39
40 log::trace!("getting github tag");
41 let tag_url = github_ref.object.url;
42 let github_tag = client.get(tag_url).send()?.json::<Tag>()?;
43
44 Ok(github_tag.object.sha)
45}