use super::BenchmarkEntry;
const CDN_URL: &str = "https://cdn.jsdelivr.net/gh/arimxyer/models@main/data/benchmarks.json";
#[derive(Debug)]
pub enum BenchmarkFetchResult {
Fresh(Vec<BenchmarkEntry>),
Error,
}
pub struct BenchmarkFetcher {
client: reqwest::Client,
}
impl BenchmarkFetcher {
pub fn new() -> Self {
let client = reqwest::Client::builder()
.user_agent("models-tui")
.build()
.expect("Failed to build HTTP client");
Self { client }
}
pub async fn fetch(&self) -> BenchmarkFetchResult {
let response = match self.client.get(CDN_URL).send().await {
Ok(resp) => resp,
Err(_) => return BenchmarkFetchResult::Error,
};
if !response.status().is_success() {
return BenchmarkFetchResult::Error;
}
let entries: Vec<BenchmarkEntry> = match response.json().await {
Ok(e) => e,
Err(_) => return BenchmarkFetchResult::Error,
};
BenchmarkFetchResult::Fresh(entries)
}
}