use reqwest;
pub async fn fetch_version(project_name: &str) -> Result<String, String> {
let url = format!("https://api.xbp.app/version?project_name={}", project_name);
let response = reqwest::get(&url)
.await
.map_err(|e| format!("Failed to fetch version from API: {}", e))?;
if !response.status().is_success() {
return Err(format!("API returned error status: {}", response.status()));
}
let version: serde_json::Value = response
.json()
.await
.map_err(|e| format!("Failed to parse version response: {}", e))?;
let version_str = if let Some(v) = version.get("version") {
v.as_str()
.ok_or_else(|| "Version field is not a string".to_string())?
} else if version.is_string() {
version.as_str().ok_or_else(|| "Version is not a string".to_string())?
} else {
return Err("Invalid version format in API response".to_string());
};
Ok(version_str.to_string())
}
pub async fn increment_version(project_name: &str, increment: &str) -> Result<(), String> {
let url = "https://api.xbp.app/version/increment";
let client = reqwest::Client::new();
let payload = serde_json::json!({
"project_name": project_name,
"increment": increment
});
let response = client
.post(url)
.header("Content-Type", "application/json")
.json(&payload)
.send()
.await
.map_err(|e| format!("Failed to increment version: {}", e))?;
if !response.status().is_success() {
let status = response.status();
let text = response.text().await.unwrap_or_default();
return Err(format!("Failed to increment version: {} - {}", status, text));
}
Ok(())
}