use serde::{Deserialize, Serialize};
use crate::element::{ElementDecl, ElementId, Value};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum ServerMsg {
#[serde(rename = "snapshot")]
Snapshot { elements: Vec<ElementDecl> },
#[serde(rename = "update")]
Update {
id: ElementId,
value: Value,
#[serde(skip_serializing_if = "Option::is_none")]
meta: Option<crate::element::ElementMeta>,
},
#[serde(rename = "add")]
Add { element: ElementDecl },
#[serde(rename = "remove")]
Remove { id: ElementId },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum ClientMsg {
#[serde(rename = "set")]
Set { id: ElementId, value: Value },
}