1use serde_json::Value;
2
3use crate::methods::{browser, page};
4use crate::protocol::ServerError;
5use crate::state::AppState;
6
7pub async fn dispatch(
8 state: &mut AppState,
9 method: &str,
10 params: Value,
11) -> Result<Value, ServerError> {
12 if let Some(result) = crate::operations::sidecar::dispatch(state, method, ¶ms).await {
13 return result;
14 }
15 if matches!(method, "browser.close" | "browser.close_tab" | "page.close") {
16 state.operations.stop().await;
17 }
18 match method {
19 "browser.launch" => browser::launch(state, params).await,
20 "browser.new_page" => browser::new_page(state, params).await,
21 "browser.tabs" => browser::tabs(state, params).await,
22 "browser.close_tab" => browser::close_tab(state, params).await,
23 "browser.close" => browser::close(state, params).await,
24
25 "page.goto" => page::goto(state, params).await,
26 "page.click" => page::click(state, params).await,
27 "page.click_text" => page::click_text(state, params).await,
28 "page.human_click" => page::human_click(state, params).await,
29 "page.human_click_text" => page::human_click_text(state, params).await,
30 "page.fill" => page::fill(state, params).await,
31 "page.human_fill" => page::human_fill(state, params).await,
32 "page.type_into" => page::type_into(state, params).await,
33 "page.text" => page::text(state, params).await,
34 "page.content" => page::content(state, params).await,
35 "page.title" => page::title(state, params).await,
36 "page.url" => page::url(state, params).await,
37 "page.get_text" => page::get_text(state, params).await,
38 "page.get_attribute" => page::get_attribute(state, params).await,
39 "page.exists" => page::exists(state, params).await,
40 "page.wait_for" => page::wait_for(state, params).await,
41 "page.wait_for_visible" => page::wait_for_visible(state, params).await,
42 "page.wait_for_text" => page::wait_for_text(state, params).await,
43 "page.evaluate" => page::evaluate(state, params).await,
44 "page.execute" => page::execute(state, params).await,
45 "page.fetch" => page::fetch(state, params).await,
46 "page.capture_state" => page::capture_state(state, params).await,
47 "page.restore_state" => page::restore_state(state, params).await,
48 "page.screenshot" => page::screenshot(state, params).await,
49 "page.select" => page::select(state, params).await,
50 "page.hover" => page::hover(state, params).await,
51 "page.press_key" => page::press_key(state, params).await,
52 "page.mouse_down" => page::mouse_down(state, params).await,
53 "page.mouse_move" => page::mouse_move(state, params).await,
54 "page.mouse_up" => page::mouse_up(state, params).await,
55 "page.key_down" => page::key_down(state, params).await,
56 "page.key_up" => page::key_up(state, params).await,
57 "page.release_all_inputs" => page::release_all_inputs(state, params).await,
58 "page.solve_captcha" => page::solve_captcha(state, params).await,
59 "page.close" => page::close(state, params).await,
60
61 _ => Err(ServerError::unknown_method(method)),
62 }
63}