1use schemars::JsonSchema;
10use serde::{Deserialize, Serialize};
11
12use crate::vocab::{TextMatchMode, UiContextKind};
13
14#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize, JsonSchema)]
20#[serde(rename_all = "camelCase", deny_unknown_fields)]
21#[schemars(extend("minProperties" = 1))]
22pub struct ElementSelectorIR {
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub context: Option<SelectorContext>,
26 #[serde(skip_serializing_if = "Option::is_none")]
28 #[schemars(length(min = 1, max = 256))]
29 pub role: Option<String>,
30 #[serde(skip_serializing_if = "Option::is_none")]
32 #[schemars(length(min = 1, max = 65536))]
33 pub name: Option<String>,
34 #[serde(skip_serializing_if = "Option::is_none")]
36 #[schemars(length(min = 1, max = 4096))]
37 pub identifier: Option<String>,
38 #[serde(skip_serializing_if = "Option::is_none")]
40 pub text: Option<TextMatchIR>,
41 #[serde(skip_serializing_if = "Option::is_none")]
43 #[schemars(length(max = 65536))]
44 pub value: Option<String>,
45 #[serde(skip_serializing_if = "Option::is_none")]
47 #[schemars(length(min = 1, max = 65536))]
48 pub css: Option<String>,
49}
50
51#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
54#[serde(rename_all = "camelCase", deny_unknown_fields)]
55#[schemars(inline)]
56pub struct SelectorContext {
57 pub context_kind: UiContextKind,
59 #[serde(skip_serializing_if = "Option::is_none")]
61 #[schemars(length(min = 1, max = 4096))]
62 pub context_id: Option<String>,
63}
64
65#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
70#[serde(rename_all = "camelCase", deny_unknown_fields)]
71pub struct TextMatchIR {
72 #[schemars(length(min = 1, max = 65536))]
74 pub value: String,
75 pub mode: TextMatchMode,
77 pub case_sensitive: bool,
79}
80
81#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
87#[serde(deny_unknown_fields)]
88pub struct RectIR {
89 pub x: serde_json::Number,
91 pub y: serde_json::Number,
93 #[schemars(range(min = 0))]
95 pub width: serde_json::Number,
96 #[schemars(range(min = 0))]
98 pub height: serde_json::Number,
99}