use serde::{Deserialize, Serialize};
use crate::common::ComponentId;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct DataBinding {
pub path: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct FunctionCall {
pub call: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<serde_json::Value>,
#[serde(rename = "returnType", skip_serializing_if = "Option::is_none")]
pub return_type: Option<FunctionReturnType>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum FunctionReturnType {
String,
Number,
Boolean,
Array,
Object,
Any,
Void,
}
#[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),
}
#[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)]
pub struct ActionEvent {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<serde_json::Value>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Action {
#[serde(skip_serializing_if = "Option::is_none")]
pub event: Option<ActionEvent>,
#[serde(rename = "functionCall", skip_serializing_if = "Option::is_none")]
pub function_call: Option<FunctionCall>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct CheckRule {
pub condition: DynamicBoolean,
pub message: String,
}
#[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>,
}