seedelf_display/
version_control.rs

1use reqwest::Client;
2use semver::Version;
3use serde_json::Value;
4
5pub async fn get_latest_version() -> Result<String, Box<dyn std::error::Error>> {
6    let url = "https://api.github.com/repos/logical-mechanism/Seedelf-Wallet/releases/latest";
7
8    let client = Client::new();
9    let response = client
10        .get(url)
11        .header("User-Agent", "seedelf") // GitHub requires this
12        .send()
13        .await?
14        .error_for_status()?; // fails early if status isn't 200 OK
15
16    let json: Value = response.json().await?;
17
18    let tag = json
19        .get("tag_name")
20        .and_then(|v| v.as_str())
21        .ok_or("tag_name not found")?;
22
23    Ok(tag.to_string())
24}
25
26// Helper function to compare versions
27pub fn compare_versions(local: &str, latest: &str) -> bool {
28    match (Version::parse(local), Version::parse(latest)) {
29        (Ok(local_version), Ok(latest_version)) => local_version >= latest_version,
30        _ => false, // If either version can't be parsed, assume it's not up to date
31    }
32}