use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Session {
pub id: String,
pub status: String,
#[serde(default)]
pub cdp_endpoint: String,
#[serde(default)]
pub token: String,
#[serde(default)]
pub stealth: String,
#[serde(default)]
pub created_at: String,
#[serde(default)]
pub expires_at: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct CreateSessionParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub stealth: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub proxy: Option<ProxyParams>,
#[serde(skip_serializing_if = "Option::is_none")]
pub profile_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub viewport: Option<Viewport>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProxyParams {
#[serde(rename = "type")]
pub proxy_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Viewport {
pub width: u32,
pub height: u32,
}
#[derive(Debug, Clone, Deserialize)]
pub struct SessionListResponse {
pub sessions: Vec<Session>,
pub metrics: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Screenshot {
pub data: String,
pub format: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct NavigateResponse {
#[serde(default)]
pub url: String,
#[serde(default)]
pub title: String,
#[serde(default)]
pub status: u16,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ExtractResponse {
pub text: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ExecuteResponse {
pub result: serde_json::Value,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Fleet {
pub id: String,
pub status: String,
pub sessions: Vec<Session>,
#[serde(default)]
pub count: u32,
}
#[derive(Debug, Clone, Serialize)]
pub struct CreateFleetParams {
pub count: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub stealth: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub proxy: Option<ProxyParams>,
}