html_bindgen/scrape/
webidls.rs1use crate::{utils::extract_webidl_name, Result};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct ScrapedInterface {
7 pub name: String,
8 pub idl: String,
9}
10
11pub fn scrape_webidls(spec: String) -> Result<Vec<ScrapedInterface>> {
22 let document = scraper::Html::parse_document(&spec);
23 let selector = scraper::Selector::parse(".idl").unwrap();
24
25 let mut specs = vec![];
26 for element in document.select(&selector).into_iter() {
27 let idl = element.text().map(|t| t.to_owned()).collect::<String>();
28 let name = match extract_webidl_name(&idl) {
29 Some(name) => name,
30 None => continue,
31 };
32 specs.push(ScrapedInterface { name, idl });
33 }
34 Ok(specs)
35}