limit_cli/tools/browser/handlers/
state.rs1use super::super::args::ArgsExt;
2use super::super::client::BrowserClient;
3use super::super::client_ext::{InteractionExt, QueryExt};
4use super::super::response::ok_msg;
5use limit_agent::error::AgentError;
6use serde_json::Value;
7
8pub async fn find(client: &BrowserClient, args: &Value) -> Result<Value, AgentError> {
9 let locator = args.get_str("locator", "find")?;
10 let value = args.get_str("value", "find")?;
11 let action = args.get_str("action", "find")?;
12 let action_value = args.get_opt_str("action_value");
13 let result = client.find(locator, value, action, action_value).await?;
14 Ok(serde_json::json!({
15 "success": true,
16 "result": result,
17 "message": format!("Find {}='{}' with action '{}'", locator, value, action)
18 }))
19}
20
21pub async fn scroll(client: &BrowserClient, args: &Value) -> Result<Value, AgentError> {
22 let direction = args.get_str("direction", "scroll")?;
23 let pixels = args.get_opt_u64("pixels").map(|p| p as u32);
24 client.scroll(direction, pixels).await?;
25 Ok(ok_msg(format!("Scrolled {}", direction)))
26}
27
28pub async fn is(client: &BrowserClient, args: &Value) -> Result<Value, AgentError> {
29 let what = args.get_str("what", "is")?;
30 let selector = args.get_str("selector", "is")?;
31 let result = client.is_(what, selector).await?;
32 Ok(serde_json::json!({
33 "success": true,
34 "result": result,
35 "message": format!("Element {} is {}: {}", selector, what, result)
36 }))
37}
38
39pub async fn download(client: &BrowserClient, args: &Value) -> Result<Value, AgentError> {
40 let selector = args.get_str("selector", "download")?;
41 let path = args.get_str("path", "download")?;
42 let download_path = client.download(selector, path).await?;
43 Ok(serde_json::json!({
44 "success": true,
45 "path": download_path,
46 "message": format!("Downloaded to: {}", download_path)
47 }))
48}