use serde::{Deserialize, Serialize};
use crate::common::ComponentId;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct DataBinding {
#[serde(rename = "@path")]
pub path: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct FunctionCall {
#[serde(rename = "@call")]
pub call: String,
#[serde(rename = "catalogId", skip_serializing_if = "Option::is_none")]
pub catalog_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<serde_json::Value>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum DynamicString {
Literal(String),
Binding(DataBinding),
Function(FunctionCall),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum DynamicNumber {
Literal(f64),
Binding(DataBinding),
Function(FunctionCall),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum DynamicBoolean {
Literal(bool),
Binding(DataBinding),
Function(FunctionCall),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum DynamicStringList {
Literal(Vec<String>),
Binding(DataBinding),
Function(FunctionCall),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum DynamicValue {
String(String),
Number(f64),
Bool(bool),
Array(Vec<serde_json::Value>),
Binding(DataBinding),
Function(FunctionCall),
Object(serde_json::Value),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ChildListTemplate {
#[serde(rename = "componentId")]
pub component_id: ComponentId,
pub path: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ChildList {
Static(Vec<ComponentId>),
Template(ChildListTemplate),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ActionEvent {
pub name: String,
#[serde(rename = "userMessage", skip_serializing_if = "Option::is_none")]
pub user_message: Option<DynamicString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<serde_json::Value>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum Action {
Event {
#[serde(rename = "event")]
event: ActionEvent,
},
FunctionCall {
#[serde(rename = "functionCall")]
function_call: FunctionCall,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum CheckCondition {
Binding(DataBinding),
Function(FunctionCall),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct CheckRule {
pub condition: CheckCondition,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ValidationResult {
pub valid: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub severity: Option<ValidationSeverity>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum ValidationSeverity {
Error,
Warning,
Info,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct AccessibilityAttributes {
#[serde(skip_serializing_if = "Option::is_none")]
pub label: Option<DynamicString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<DynamicString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub live: Option<AccessibilityLive>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hidden: Option<DynamicBoolean>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum AccessibilityLive {
Off,
Polite,
Assertive,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct FunctionError {
pub code: String,
pub message: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct FunctionResponse {
#[serde(rename = "functionCallId")]
pub function_call_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub value: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<FunctionError>,
}