Files
jecna-supl-client/src/api.rs
2026-02-09 17:11:49 +01:00

50 lines
1.2 KiB
Rust

use serde::Deserialize;
use crate::models::{ApiResponse, SuplError};
pub fn fetch_api(provider_url: &str) -> Result<ApiResponse, SuplError> {
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<String>,
}
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()),
})
}
}