use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct BoundValue {
#[serde(rename = "literalString", skip_serializing_if = "Option::is_none")]
pub literal_string: Option<String>,
#[serde(rename = "literalNumber", skip_serializing_if = "Option::is_none")]
pub literal_number: Option<f64>,
#[serde(rename = "literalBoolean", skip_serializing_if = "Option::is_none")]
pub literal_boolean: Option<bool>,
#[serde(rename = "literalArray", skip_serializing_if = "Option::is_none")]
pub literal_array: Option<Vec<serde_json::Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
}
impl BoundValue {
pub fn from_literal_string(s: impl Into<String>) -> Self {
Self {
literal_string: Some(s.into()),
literal_number: None,
literal_boolean: None,
literal_array: None,
path: None,
}
}
pub fn from_path(path: impl Into<String>) -> Self {
Self {
literal_string: None,
literal_number: None,
literal_boolean: None,
literal_array: None,
path: Some(path.into()),
}
}
pub fn from_path_with_default(path: impl Into<String>, default: impl Into<String>) -> Self {
Self {
literal_string: Some(default.into()),
literal_number: None,
literal_boolean: None,
literal_array: None,
path: Some(path.into()),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Children {
#[serde(rename = "explicitList", skip_serializing_if = "Option::is_none")]
pub explicit_list: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub template: Option<ChildTemplate>,
}
impl Children {
pub fn from_explicit_list(ids: Vec<String>) -> Self {
Self {
explicit_list: Some(ids),
template: None,
}
}
pub fn from_template(template: ChildTemplate) -> Self {
Self {
explicit_list: None,
template: Some(template),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ChildTemplate {
#[serde(rename = "dataBinding")]
pub data_binding: String,
#[serde(rename = "componentId")]
pub component_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DataEntry {
pub key: String,
#[serde(rename = "valueString", skip_serializing_if = "Option::is_none")]
pub value_string: Option<String>,
#[serde(rename = "valueNumber", skip_serializing_if = "Option::is_none")]
pub value_number: Option<f64>,
#[serde(rename = "valueBoolean", skip_serializing_if = "Option::is_none")]
pub value_boolean: Option<bool>,
#[serde(rename = "valueMap", skip_serializing_if = "Option::is_none")]
pub value_map: Option<Vec<DataEntry>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Action {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<Vec<ActionContextEntry>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ActionContextEntry {
pub key: String,
pub value: BoundValue,
}