use serde::Serialize;
#[derive(Debug, Serialize, PartialEq, Eq)]
pub struct SafariTab {
pub window_id: i64,
pub window_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub profile: Option<String>,
pub index: usize,
pub title: String,
pub url: String,
pub active: bool,
}
#[derive(Debug, Serialize, PartialEq, Eq)]
pub struct SafariEvalResult {
pub result: serde_json::Value,
pub value_type: String,
}
#[cfg(test)]
mod eval_result_tests {
use super::SafariEvalResult;
#[test]
fn exec_result_preserves_array_type() {
let result = SafariEvalResult {
result: serde_json::json!([1, 2]),
value_type: "array".to_string(),
};
let output = serde_json::to_value(result).expect("serialize result");
assert_eq!(output["result"], serde_json::json!([1, 2]));
assert_eq!(output["value_type"], "array");
}
#[test]
fn exec_result_distinguishes_null_from_undefined() {
let null = SafariEvalResult {
result: serde_json::Value::Null,
value_type: "null".to_string(),
};
let undefined = SafariEvalResult {
result: serde_json::Value::Null,
value_type: "undefined".to_string(),
};
assert_ne!(
serde_json::to_value(null).expect("null result"),
serde_json::to_value(undefined).expect("undefined result")
);
}
}
#[derive(Debug, Serialize, PartialEq, Eq)]
pub struct SafariReadResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub selector: Option<String>,
pub content: String,
}
#[derive(Clone, Debug, Serialize, PartialEq, Eq)]
pub struct SafariScrollReadChunk {
pub iteration: u64,
pub content: String,
}
#[derive(Debug, Serialize, PartialEq, Eq)]
pub struct SafariScrollReadResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub selector: Option<String>,
pub times: u64,
pub chunks: Vec<SafariScrollReadChunk>,
}
#[derive(Debug, Serialize, PartialEq, Eq)]
pub struct SafariSourceResult {
pub html: String,
}
#[derive(Debug, Serialize, PartialEq, Eq)]
pub struct SafariCloseResult {
pub closed: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub index: Option<usize>,
}
#[derive(Debug, Serialize, PartialEq, Eq)]
pub struct SafariClickResult {
pub clicked: bool,
pub selector: String,
}
#[derive(Debug, Serialize, PartialEq, Eq)]
pub struct SafariFillResult {
pub filled: bool,
pub selector: String,
pub text: String,
}
#[derive(Debug, Serialize, PartialEq, Eq)]
pub struct SafariWaitResult {
pub found: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub selector: Option<String>,
pub condition: String,
pub timeout_seconds: u64,
}
#[derive(Debug, Serialize, PartialEq, Eq)]
pub struct SafariScrollResult {
pub scroll_x: i64,
pub scroll_y: i64,
}
#[derive(Debug, serde::Deserialize, PartialEq, Eq)]
pub(super) struct SafariScrollReadSnapshot {
pub(super) item_count: usize,
pub(super) content: String,
#[serde(default)]
pub(super) blocks: Vec<String>,
}