oca-bundle 0.4.2

Rust implementation of Overlays Capture Architecture bundle
Documentation
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;

#[derive(Debug, Clone, Serialize, Deserialize)]
struct LayoutConfigCss {
    #[serde(skip_serializing_if = "Option::is_none")]
    width: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    height: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    style: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
struct LayoutConfig {
    #[serde(skip_serializing_if = "Option::is_none")]
    css: Option<LayoutConfigCss>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
struct PageConfigCss {
    #[serde(skip_serializing_if = "Option::is_none")]
    style: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    classes: Option<Vec<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    background_image: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
struct PageConfig {
    #[serde(skip_serializing_if = "Option::is_none")]
    css: Option<PageConfigCss>,
    name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
struct ElementConfigCss {
    #[serde(skip_serializing_if = "Option::is_none")]
    style: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    classes: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
struct ElementConfig {
    #[serde(skip_serializing_if = "Option::is_none")]
    css: Option<ElementConfigCss>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
struct Element {
    #[serde(rename = "type")]
    element_type: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    size: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    name: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    content: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    layout: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    config: Option<ElementConfig>,
    #[serde(skip_serializing_if = "Option::is_none")]
    elements: Option<Vec<Element>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
struct Page {
    config: PageConfig,
    elements: Vec<Element>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Layout {
    version: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    config: Option<LayoutConfig>,
    pages: Vec<Page>,
    #[serde(skip_serializing_if = "Option::is_none")]
    labels: Option<BTreeMap<String, BTreeMap<String, String>>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    reference_layouts: Option<BTreeMap<String, Layout>>,
}