1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use crate::formschema::types::FumeFieldSchema;
use crate::formschema::{FumeBaseSchema, FumeFieldTypes};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;

fn value_default() -> FumeFieldTypes {
    FumeFieldTypes::Object
}

// Represents a struct type. A struct type contains a fix set of defined properties
#[derive(PartialEq, Eq, Serialize, Deserialize, Clone, Debug, Default)]
pub struct FumeObjectSchema {
    #[serde(flatten)]
    pub base: FumeBaseSchema<HashMap<String, serde_json::Value>>,
    #[serde(alias = "type", rename(serialize = "type"), default = "value_default")]
    pub _type: FumeFieldTypes,
    #[serde(rename = "flat")]
    pub flat: Option<bool>,
    #[serde(rename = "fields")]
    pub fields: Vec<FumeFieldSchema>,
}

impl std::ops::Deref for FumeObjectSchema {
    type Target = FumeBaseSchema<HashMap<String, serde_json::Value>>;
    fn deref(&self) -> &Self::Target {
        &self.base
    }
}

pub type FormSchema = FumeObjectSchema;