use crate::config::ApiConfig;
use reqwest;
pub async fn fetch_version(project_name: &str) -> Result<String, String> {
let api_config = ApiConfig::load();
let url = api_config.version_endpoint(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 api_config = ApiConfig::load();
let url = api_config.increment_endpoint();
let client: reqwest::Client = reqwest::Client::new();
let payload: serde_json::Value = 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(())
}