use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::{CommandResult, Commands};
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default)]
pub struct ScrapeOptions {
pub url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub use_js: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wait_for: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extract_links: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub selector: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extract_images: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extract_metadata: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extract_tables: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extract_forms: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extract_structured_data: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub readable_content: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remove_base64_images: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct CrawlResponse {
pub success: bool,
pub command: String,
pub data: Option<CrawlData>,
pub error: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct CrawlData {
pub url: String,
pub title: String,
pub content: Option<String>,
pub readable_content: Option<serde_json::Value>,
pub links: Option<Vec<serde_json::Value>>,
pub links_count: usize,
pub images: Option<Vec<serde_json::Value>>,
pub images_count: usize,
pub metadata: Option<serde_json::Value>,
pub tables: Option<Vec<serde_json::Value>>,
pub forms: Option<Vec<serde_json::Value>>,
pub structured_data: Option<Vec<serde_json::Value>>,
pub content_error: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct AutomateResponse {
pub success: bool,
pub steps_completed: usize,
pub total_steps: usize,
pub results: Vec<CommandResult>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default)]
pub struct BrowserToolOptions {
pub commands: Vec<Commands>,
pub context: Option<BrowserContext>,
}
impl From<Commands> for BrowserToolOptions {
fn from(command: Commands) -> Self {
BrowserToolOptions {
commands: vec![command],
context: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default)]
pub struct BrowserContext {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub thread_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub task_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub run_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub model_settings: Option<serde_json::Value>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub distri_client_config: Option<serde_json::Value>,
}