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 press(&self, element: &ElementData) -> Result<()>;
fn focus(&self, element: &ElementData) -> Result<()>;
fn blur(&self, element: &ElementData) -> Result<()>;
fn toggle(&self, element: &ElementData) -> Result<()>;
fn select(&self, element: &ElementData) -> Result<()>;
fn expand(&self, element: &ElementData) -> Result<()>;
fn collapse(&self, element: &ElementData) -> Result<()>;
fn show_menu(&self, element: &ElementData) -> Result<()>;
fn increment(&self, element: &ElementData) -> Result<()>;
fn decrement(&self, element: &ElementData) -> Result<()>;
fn scroll_into_view(&self, element: &ElementData) -> Result<()>;
fn set_value(&self, element: &ElementData, value: &str) -> Result<()>;
fn set_numeric_value(&self, element: &ElementData, value: f64) -> Result<()>;
fn type_text(&self, element: &ElementData, text: &str) -> Result<()>;
fn set_text_selection(&self, element: &ElementData, start: u32, end: u32) -> Result<()>;
fn scroll_down(&self, element: &ElementData, amount: f64) -> Result<()>;
fn scroll_up(&self, element: &ElementData, amount: f64) -> Result<()>;
fn scroll_right(&self, element: &ElementData, amount: f64) -> Result<()>;
fn scroll_left(&self, element: &ElementData, amount: f64) -> Result<()>;
fn perform_action(&self, element: &ElementData, action: &str) -> Result<()>;
fn subscribe(&self, element: &ElementData) -> Result<Subscription>;
}