use std::error::Error;
use std::collections::HashMap;
use crate::{Language, Compiler};
pub type CompilerCache = HashMap<String, Language>;
pub async fn load() -> Result<CompilerCache, Box<dyn Error>> {
let res = reqwest::get("https://wandbox.org/api/list.json").await?;
let result : Vec<Compiler> = res.json().await?;
let mut comp_cache : CompilerCache = HashMap::new();
for c in result {
let language_name = c.language.to_ascii_lowercase();
let entry = comp_cache.get_mut(&language_name);
match entry {
Some(p) => {
p.compilers.push(c);
}
None => {
let mut lang = Language {
name : language_name.clone(),
compilers : Vec::new()
};
lang.compilers.push(c);
comp_cache.insert(language_name, lang);
}
}
}
Ok(comp_cache)
}