oca_presentation/page/
mod.rs1use 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}