Skip to main content

pagesift_api/types/
locate.rs

1//! `/v2/observe`、`/v2/similar` 的请求和响应(pagesift 扩展)。
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6/// observe 的结果:候选元素、用量警告。
7pub type Observed = (Vec<Value>, Vec<String>);
8
9#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct ObserveRequest {
12    pub url: String,
13    pub instruction: String,
14}
15
16#[derive(Debug, Clone, PartialEq, Serialize)]
17pub struct ObserveResponse {
18    pub success: bool,
19    /// 候选元素,最合适的在前:`{selector, role, name}`。
20    pub data: Vec<Value>,
21    pub warnings: Vec<String>,
22}
23
24#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
25#[serde(rename_all = "camelCase")]
26pub struct SimilarRequest {
27    pub url: String,
28    /// 例子元素的 CSS 选择器(取第一个命中的)。
29    pub selector: String,
30    #[serde(default)]
31    pub engine: Option<String>,
32}
33
34#[derive(Debug, Clone, PartialEq, Serialize)]
35pub struct SimilarItem {
36    pub text: String,
37    pub html: String,
38}
39
40/// 例子没有结构相同的兄弟时 `items` 为空,`selector`、`depth` 为 null。
41#[derive(Debug, Clone, Default, PartialEq, Serialize)]
42pub struct SimilarData {
43    pub selector: Option<String>,
44    pub depth: Option<usize>,
45    pub items: Vec<SimilarItem>,
46}
47
48#[derive(Debug, Clone, PartialEq, Serialize)]
49pub struct SimilarResponse {
50    pub success: bool,
51    pub data: SimilarData,
52    pub warnings: Vec<String>,
53}