use serde::Deserialize; use crate::models::{ApiResponse, SuplError}; pub fn fetch_api(provider_url: &str) -> Result { let trimmed = provider_url.trim_end_matches('/'); let url = format!("{}/versioned/v3", trimmed); minreq::get(&url) .send() .map_err(|e| SuplError::NetworkError { reason: e.to_string(), })? .json() .map_err(|e| SuplError::ParseError { reason: e.to_string(), }) } #[derive(Deserialize)] struct StatusResponse { working: bool, message: Option, } pub fn test_api(provider_url: &str) -> Result<(), SuplError> { let trimmed = provider_url.trim_end_matches('/'); let url = format!("{}/status", trimmed); let status: StatusResponse = minreq::get(&url) .send() .map_err(|e| SuplError::NetworkError { reason: e.to_string(), })? .json() .map_err(|e| SuplError::ParseError { reason: e.to_string(), })?; if status.working { Ok(()) } else { Err(SuplError::ParseError { reason: status .message .unwrap_or_else(|| "Provider reported not working".to_string()), }) } }