oca_presentation/page/
mod.rs

1use serde::{Deserialize, Serialize};
2pub mod recursion_setup;
3
4#[derive(Serialize, Deserialize, Debug, Clone)]
5pub struct Page {
6    #[serde(rename = "n")]
7    pub name: String,
8    #[serde(rename = "ao")]
9    pub attribute_order: Vec<PageElement>,
10}
11
12#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
13#[serde(untagged)]
14pub enum PageElement {
15    Value(String),
16    Page {
17        #[serde(rename = "n")]
18        name: String,
19        #[serde(rename = "ao")]
20        attribute_order: Vec<PageElement>,
21    },
22}
23
24#[test]
25fn page_example() {
26    let page = r#"{
27              "n": "page1",
28              "ao": [
29                "passed",
30                "d",
31                "sign",
32                {
33                  "n": "customer",
34                  "ao": [
35                    "name",
36                    "surname",
37                    {
38                      "n": "building",
39                      "ao": ["floors", "area", { "n": "address", "ao": ["city", "zip", "street"] }]
40                    }
41                  ]
42                }
43              ]
44            }"#;
45
46    let page_deser: Page = serde_json::from_str(page).unwrap();
47    let mut page_no_whitespace = page.to_string();
48    page_no_whitespace.retain(|c| !c.is_whitespace());
49    assert_eq!(
50        page_no_whitespace,
51        serde_json::to_string(&page_deser).unwrap()
52    );
53}