1use std::collections::BTreeMap;
2
3#[derive(Debug, Deserialize, Serialize, PartialEq)]
5pub struct Spec {
6 pub swagger: String,
8 pub info: Info,
9 pub paths: BTreeMap<String, Operations>, pub definitions: BTreeMap<String, Schema>,
11 #[serde(skip_serializing_if="Option::is_none")]
12 pub schemes: Option<Vec<String>>,
13 #[serde(skip_serializing_if="Option::is_none")]
14 pub host: Option<String>,
15 #[serde(skip_serializing_if="Option::is_none")]
16 #[serde(rename="basePath")]
17 pub base_path: Option<String>,
18 #[serde(skip_serializing_if="Option::is_none")]
19 pub consumes: Option<Vec<String>>,
20 #[serde(skip_serializing_if="Option::is_none")]
21 pub produces: Option<Vec<String>>,
22 #[serde(skip_serializing_if="Option::is_none")]
23 pub parameters: Option<BTreeMap<String, Parameter>>,
24 #[serde(skip_serializing_if="Option::is_none")]
25 pub responses: Option<BTreeMap<String, Response>>,
26 #[serde(skip_serializing_if="Option::is_none")]
27 #[serde(rename="securityDefinitions")]
28 pub security_definitions: Option<BTreeMap<String, Security>>,
29 #[serde(skip_serializing_if="Option::is_none")]
30 pub tags: Option<Vec<Tag>>,
31}
32
33
34#[derive(Debug, Deserialize, Serialize, PartialEq)]
35pub struct Tag {
36 pub name: String,
37 #[serde(skip_serializing_if="Option::is_none")]
38 pub description: Option<String>,
39 #[serde(skip_serializing_if="Option::is_none")]
40 #[serde(rename="externalDocs")]
41 pub external_docs: Option<Vec<ExternalDoc>>,
42}
43
44#[derive(Debug, Deserialize, Serialize, PartialEq)]
45pub struct ExternalDoc {
46 pub url: String,
47 #[serde(skip_serializing_if="Option::is_none")]
48 pub description: Option<String>,
49}
50
51#[derive(Debug, Deserialize, Serialize, PartialEq)]
52pub struct Info {
53 pub title: String,
54 pub version: String,
55 #[serde(skip_serializing_if="Option::is_none")]
56 #[serde(rename="termsOfService")]
57 pub terms_of_service: Option<String>,
58}
59
60#[derive(Debug, Deserialize, Serialize, PartialEq)]
61pub struct Operations {
62 #[serde(skip_serializing_if="Option::is_none")]
63 pub get: Option<Operation>,
64 #[serde(skip_serializing_if="Option::is_none")]
65 pub post: Option<Operation>,
66 #[serde(skip_serializing_if="Option::is_none")]
67 pub put: Option<Operation>,
68 #[serde(skip_serializing_if="Option::is_none")]
69 pub patch: Option<Operation>,
70 #[serde(skip_serializing_if="Option::is_none")]
71 pub delete: Option<Operation>,
72 #[serde(skip_serializing_if="Option::is_none")]
73 pub parameters: Option<Vec<Parameter>>,
74}
75
76#[derive(Debug, Deserialize, Serialize, PartialEq)]
77pub struct Operation {
78 #[serde(skip_serializing_if="Option::is_none")]
79 pub summary: Option<String>,
80 #[serde(skip_serializing_if="Option::is_none")]
81 pub description: Option<String>,
82 #[serde(skip_serializing_if="Option::is_none")]
83 pub consumes: Option<Vec<String>>,
84 #[serde(skip_serializing_if="Option::is_none")]
85 pub produces: Option<Vec<String>>,
86 #[serde(skip_serializing_if="Option::is_none")]
87 pub schemes: Option<Vec<String>>,
88 #[serde(skip_serializing_if="Option::is_none")]
89 pub tags: Option<Vec<String>>,
90 #[serde(skip_serializing_if="Option::is_none")]
91 #[serde(rename="operationId")]
92 pub operation_id: Option<String>,
93 pub responses: BTreeMap<String, Response>,
94 #[serde(skip_serializing_if="Option::is_none")]
95 pub parameters: Option<Vec<Parameter>>,
96}
97
98#[derive(Debug, Deserialize, Serialize, PartialEq)]
99pub struct Parameter {
100 pub name: String,
101 #[serde(rename="in")]
102 pub location: String,
103 #[serde(skip_serializing_if="Option::is_none")]
104 pub required: Option<bool>,
105 #[serde(skip_serializing_if="Option::is_none")]
106 pub schema: Option<Schema>,
107 #[serde(skip_serializing_if="Option::is_none")]
108 #[serde(rename="uniqueItems")]
109 pub unique_items: Option<bool>,
110 #[serde(skip_serializing_if="Option::is_none")]
111 #[serde(rename="type")]
112 pub param_type: Option<String>,
113 #[serde(skip_serializing_if="Option::is_none")]
114 pub format: Option<String>,
115}
116
117#[derive(Debug, Deserialize, Serialize, PartialEq)]
118pub struct Response {
119 pub description: String,
120 #[serde(skip_serializing_if="Option::is_none")]
121 pub schema: Option<Schema>,
122}
123
124#[derive(Debug, Deserialize, Serialize, PartialEq)]
125pub struct Security {
126 #[serde(rename="type")]
127 pub security_type: String, }
129
130#[derive(Debug, Deserialize, Serialize, PartialEq)]
135pub struct Schema {
136 #[serde(skip_serializing_if="Option::is_none")]
137 #[serde(rename="$ref")]
140 pub ref_path: Option<String>,
141 #[serde(skip_serializing_if="Option::is_none")]
142 pub description: Option<String>,
143 #[serde(skip_serializing_if="Option::is_none")]
144 #[serde(rename="type")]
145 pub schema_type: Option<String>,
146 #[serde(skip_serializing_if="Option::is_none")]
147 pub format: Option<String>,
148 #[serde(skip_serializing_if="Option::is_none")]
149 #[serde(rename="enum")]
150 pub enum_values: Option<Vec<String>>,
151 #[serde(skip_serializing_if="Option::is_none")]
152 pub required: Option<Vec<String>>,
153 #[serde(skip_serializing_if="Option::is_none")]
154 pub items: Option<Box<Schema>>, #[serde(skip_serializing_if="Option::is_none")]
156 pub properties: Option<BTreeMap<String, Schema>>, }