skema/
lib.rs

1use serde::{Deserialize, Serialize};
2
3use std::collections::BTreeMap;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase")]
7#[serde(tag = "type")]
8pub enum Schema {
9    Object {
10        #[serde(default, skip_serializing_if = "Option::is_none")]
11        description: Option<String>,
12        properties: BTreeMap<String, Schema>,
13        #[serde(default, skip_serializing_if = "Vec::is_empty")]
14        required: Vec<String>,
15    },
16    String {
17        #[serde(default, skip_serializing_if = "Option::is_none")]
18        description: Option<String>,
19    },
20    Integer {
21        #[serde(default, skip_serializing_if = "Option::is_none")]
22        description: Option<String>,
23    },
24    Number {
25        #[serde(default, skip_serializing_if = "Option::is_none")]
26        description: Option<String>,
27    },
28    Boolean {
29        #[serde(default, skip_serializing_if = "Option::is_none")]
30        description: Option<String>,
31    },
32    Array {
33        #[serde(default, skip_serializing_if = "Option::is_none")]
34        description: Option<String>,
35        #[serde(default, skip_serializing_if = "Option::is_none")]
36        items: Option<Box<Schema>>,
37    },
38    Null,
39}