use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[serde(tag = "type")]
#[non_exhaustive]
pub enum TouchPortalOutput {
Info(InfoMessage),
Action(ActionMessage),
Down(ActionMessage),
Up(ActionMessage),
ConnectorChange(ConnectorChangeMessage),
ShortConnectorIdNotification(ShortConnectorIdMessage),
ListChange(ListChangeMessage),
ClosePlugin(ClosePluginMessage),
Broadcast(BroadcastEvent),
NotificationOptionClicked(NotificationClickedMessage),
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[non_exhaustive]
pub enum ActionInteractionMode {
Execute,
HoldDown,
HoldUp,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct InfoMessage {
pub sdk_version: crate::ApiVersion,
pub tp_version_string: String,
pub tp_version_code: u64,
#[serde(default)]
pub plugin_version: Option<u16>,
#[serde(default)]
pub settings: Vec<HashMap<String, serde_json::Value>>,
#[serde(default)]
pub current_page_path_main_device: Option<String>,
#[serde(default)]
pub current_page_path_secondary_devices: Vec<DevicePage>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct DevicePage {
pub tp_device_id: String,
pub current_page_path: String,
pub device_name: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct ActionMessage {
pub plugin_id: String,
#[doc(hidden = "handled transparently by codegen")]
pub action_id: String,
#[doc(hidden = "handled transparently by codegen")]
pub data: Vec<IdValuePair>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct ConnectorChangeMessage {
pub plugin_id: String,
pub connector_id: String,
pub value: Option<u32>,
pub value_decimal: Option<f64>,
pub data: Vec<HashMap<String, String>>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct ShortConnectorIdMessage {
plugin_id: String,
short_id: String,
connector_id: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct ListChangeMessage {
plugin_id: String,
#[doc(hidden = "handled transparently by codegen")]
pub action_id: String,
#[doc(hidden = "handled transparently by codegen")]
pub list_id: String,
#[doc(hidden = "handled transparently by codegen")]
pub instance_id: String,
#[doc(hidden = "handled transparently by codegen")]
pub value: String,
#[serde(default)]
values: Vec<IdValuePair>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct IdValuePair {
#[doc(hidden = "handled transparently by codegen")]
pub id: String,
#[doc(hidden = "handled transparently by codegen")]
pub value: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct ClosePluginMessage {
pub plugin_id: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[serde(tag = "event")]
#[non_exhaustive]
pub enum BroadcastEvent {
PageChange(BroadcastPageChangeEvent),
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct BroadcastPageChangeEvent {
pub page_name: String,
pub previous_page_name: Option<String>,
pub device_ip: Option<String>,
pub device_name: Option<String>,
pub device_id: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct NotificationClickedMessage {
pub notification_id: String,
pub option_id: String,
}