use crate::{utils::extract_webidl_name, Result};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScrapedInterface {
pub name: String,
pub idl: String,
}
pub fn scrape_webidls(spec: String) -> Result<Vec<ScrapedInterface>> {
let document = scraper::Html::parse_document(&spec);
let selector = scraper::Selector::parse(".idl").unwrap();
let mut specs = vec![];
for element in document.select(&selector).into_iter() {
let idl = element.text().map(|t| t.to_owned()).collect::<String>();
let name = match extract_webidl_name(&idl) {
Some(name) => name,
None => continue,
};
specs.push(ScrapedInterface { name, idl });
}
Ok(specs)
}