use crate::action::{Action, ActionData};
use crate::element::ElementData;
use crate::error::Result;
use crate::event_provider::Subscription;
use crate::selector::Selector;
pub trait Provider: Send + Sync {
fn get_children(&self, element: Option<&ElementData>) -> Result<Vec<ElementData>>;
fn get_parent(&self, element: &ElementData) -> Result<Option<ElementData>>;
fn find_elements(
&self,
root: Option<&ElementData>,
selector: &Selector,
limit: Option<usize>,
max_depth: Option<u32>,
) -> Result<Vec<ElementData>> {
crate::selector::find_elements_in_tree(
|el| self.get_children(el),
root,
selector,
limit,
max_depth,
)
}
fn perform_action(
&self,
element: &ElementData,
action: Action,
data: Option<ActionData>,
) -> Result<()>;
fn subscribe(&self, element: &ElementData) -> Result<Subscription>;
}