use crate::node::Node;
use serde_json::Value;
impl Node {
pub fn by_type(&self, node_type: &str) -> Vec<&Node> {
self.find_all(|n| n.node_type.as_deref() == Some(node_type))
}
pub fn first_by_type(&self, node_type: &str) -> Option<&Node> {
self.find(|n| n.node_type.as_deref() == Some(node_type))
}
pub fn by_type_mut(&mut self, node_type: &str) -> Vec<&mut Node> {
let mut pred = |n: &Node| n.node_type.as_deref() == Some(node_type);
self.find_all_mut(&mut pred)
}
pub fn by_mark(&self, mark_type: &str) -> Vec<&Node> {
self.find_all(|n| n.has_mark(mark_type))
}
pub fn by_attr(&self, key: &str, value: impl Into<Value>) -> Vec<&Node> {
let value = value.into();
self.find_all(|n| n.attr(key) == Some(&value))
}
}