use super::dom::{attr_value, elements, strip_text};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ImpersonationBanner {
pub user_id: String,
pub text: String,
pub stop: String,
}
pub fn impersonation_banner(html: &str) -> Option<ImpersonationBanner> {
let (_, attrs, inner) = elements(html, "div")
.into_iter()
.find(|(_, attrs, _)| attr_value(attrs, "data-impersonating").is_some())?;
let stop = elements(&inner, "form")
.into_iter()
.find_map(|(_, attrs, _)| attr_value(&attrs, "action"))?;
Some(ImpersonationBanner {
user_id: attr_value(&attrs, "data-impersonating")?,
text: strip_text(&inner),
stop,
})
}
pub fn impersonate_buttons(html: &str) -> Vec<String> {
elements(html, "form")
.into_iter()
.filter_map(|(_, attrs, _)| attr_value(&attrs, "data-impersonate"))
.collect()
}