Skip to main content

limit_cli/tools/browser/handlers/
state.rs

1use 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}