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