1use crate::block::block_object::TextBlockObject;
2use crate::block::blocks::{Block, BlockAction};
3use serde::{Deserialize, Serialize};
4use serde_with::skip_serializing_none;
5use std::collections::HashMap;
6
7#[skip_serializing_none]
8#[derive(Deserialize, Serialize, Debug, Default, PartialEq)]
9pub struct ViewState {
10 pub values: HashMap<String, HashMap<String, BlockAction>>,
11}
12
13#[skip_serializing_none]
14#[derive(Deserialize, Serialize, Debug, Default, PartialEq)]
15pub struct View {
16 pub id: Option<String>,
17 pub team_id: Option<String>,
18 #[serde(rename = "type")]
19 pub type_filed: Option<ViewType>,
20 pub blocks: Option<Vec<Block>>,
21 pub private_metadata: Option<String>,
22 pub callback_id: Option<String>,
23 pub state: Option<ViewState>,
24 pub title: Option<TextBlockObject>,
25 pub close: Option<TextBlockObject>,
26 pub submit: Option<TextBlockObject>,
27 pub hash: Option<String>,
28 pub clear_on_close: Option<bool>,
29 pub notify_on_close: Option<bool>,
30 pub root_view_id: Option<String>,
31 pub previous_view_id: Option<String>,
32 pub app_id: Option<String>,
33 pub external_id: Option<String>,
34 pub bot_id: Option<String>,
35}
36
37#[derive(Deserialize, Serialize, Debug, PartialEq)]
38#[serde(rename_all = "snake_case")]
39pub enum ViewType {
40 Modal,
41 Home,
42}