use crate::model::{DocsetEntry, SourceList};
const KAPELI_TOML: &str = include_str!("../../kapeli.toml");
pub fn load_source_list() -> Vec<DocsetEntry> {
let list: SourceList =
toml::from_str(KAPELI_TOML).expect("embedded kapeli.toml must be valid TOML");
list.source
}
pub fn find_entry(name: &str) -> Option<DocsetEntry> {
load_source_list()
.into_iter()
.find(|e| e.name.eq_ignore_ascii_case(name))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn source_list_is_non_empty() {
let entries = load_source_list();
assert!(
!entries.is_empty(),
"embedded kapeli.toml must contain entries"
);
}
#[test]
fn find_entry_known_docset() {
let entry = find_entry("Rust").expect("Rust must be present in kapeli.toml");
assert_eq!(entry.name, "Rust");
assert!(!entry.version.is_empty());
assert!(!entry.urls.is_empty());
assert!(entry.urls[0].ends_with(".tgz"));
}
#[test]
fn find_entry_case_insensitive() {
let lower = find_entry("rust");
let upper = find_entry("RUST");
assert!(lower.is_some());
assert!(upper.is_some());
assert_eq!(lower.unwrap().name, upper.unwrap().name);
}
#[test]
fn find_entry_unknown_returns_none() {
assert!(find_entry("__nonexistent_docset__").is_none());
}
}