use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::vocab::{TextMatchMode, UiContextKind};
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
#[schemars(extend("minProperties" = 1))]
pub struct ElementSelectorIR {
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<SelectorContext>,
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(length(min = 1, max = 256))]
pub role: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(length(min = 1, max = 65536))]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(length(min = 1, max = 4096))]
pub identifier: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<TextMatchIR>,
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(length(max = 65536))]
pub value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(length(min = 1, max = 65536))]
pub css: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
#[schemars(inline)]
pub struct SelectorContext {
pub context_kind: UiContextKind,
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(length(min = 1, max = 4096))]
pub context_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct TextMatchIR {
#[schemars(length(min = 1, max = 65536))]
pub value: String,
pub mode: TextMatchMode,
pub case_sensitive: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct RectIR {
pub x: serde_json::Number,
pub y: serde_json::Number,
#[schemars(range(min = 0))]
pub width: serde_json::Number,
#[schemars(range(min = 0))]
pub height: serde_json::Number,
}