1use std::collections::HashMap;
4
5use serde::{Deserialize, Serialize};
6
7use crate::component::{BrowserDispatch, ComponentEmit};
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct UpdateResponse {
11 pub components: Vec<ComponentResult>,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct ComponentResult {
16 pub snapshot: String,
17 pub html: String,
18 pub effects: Effects,
19}
20
21#[derive(Debug, Clone, Default, Serialize, Deserialize)]
22pub struct Effects {
23 #[serde(default)]
24 pub dispatched: Vec<BrowserDispatch>,
25 #[serde(default)]
26 pub emitted: Vec<ComponentEmit>,
27 #[serde(default, skip_serializing_if = "Option::is_none")]
28 pub redirect: Option<String>,
29 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
30 pub errors: HashMap<String, Vec<String>>,
31 #[serde(default, skip_serializing_if = "Vec::is_empty")]
32 pub islands: Vec<IslandHtml>,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct IslandHtml {
37 pub name: String,
38 pub html: String,
39}