use tablo_core::dom::ignored;
use super::dom::{attr_value, tags_where};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct IgnoredFilter {
pub filter: String,
pub reason: IgnoredReason,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum IgnoredReason {
Unknown,
Invalid,
Dropped,
}
pub fn ignored_filters(html: &str) -> Vec<IgnoredFilter> {
tags_where(html, |_, attrs| {
attr_value(attrs, "data-ignored-filter").is_some()
})
.into_iter()
.filter_map(|(_, attrs, _)| {
let filter = attr_value(&attrs, "data-ignored-filter")?;
let reason = match attr_value(&attrs, "data-ignored").as_deref() {
Some(ignored::UNKNOWN) => IgnoredReason::Unknown,
Some(ignored::INVALID) => IgnoredReason::Invalid,
Some(ignored::DROPPED) => IgnoredReason::Dropped,
other => panic!("the ignored filter names no known reason: {other:?}"),
};
Some(IgnoredFilter { filter, reason })
})
.collect()
}