1use std::collections::BTreeMap;
2use serde::{Serialize, Deserialize};
3
4#[derive(Debug, Deserialize, Serialize, PartialEq)]
5pub struct Spec {
6 pub openapi: String,
7 pub paths: BTreeMap<String, PathItem>,
8 pub components: Option<Components>,
9}
10
11#[derive(Debug, Deserialize, Serialize, PartialEq)]
12pub struct PathItem {
13 pub summary: Option<String>,
14 pub description: Option<String>,
15
16 pub get: Option<Operation>,
17 pub put: Option<Operation>,
18 pub post: Option<Operation>,
19 pub delete: Option<Operation>,
20 pub options: Option<Operation>,
21 pub head: Option<Operation>,
22 pub patch: Option<Operation>,
23 pub trace: Option<Operation>,
24
25 pub parameters: Option<BTreeMap<String, Parameter>>,
26}
27
28#[derive(Debug, Deserialize, Serialize, PartialEq)]
29pub struct Components {
30 pub schemas: Option<BTreeMap<String, Schema>>,
31 pub responses: Option<BTreeMap<String, Response>>,
32 pub parameters: Option<BTreeMap<String, Parameter>>,
33 pub request_bodies: Option<BTreeMap<String, RequestBody>>,
34 pub headers: Option<BTreeMap<String, Header>>,
35}
36
37#[derive(Debug, Deserialize, Serialize, PartialEq)]
38pub struct Schema {
39 #[serde(rename = "$ref")]
40 pub ref_: Option<String>,
41 #[serde(rename = "type")]
42 pub type_: Option<String>,
43 pub items: Option<Box<Schema>>,
44 pub format: Option<String>,
45 pub properties: Option<BTreeMap<String, Schema>>,
46}
47
48#[derive(Debug, Deserialize, Serialize, PartialEq)]
49pub struct Response {
50 pub description: Option<String>,
51 pub headers: Option<BTreeMap<String, Header>>,
52 pub content: Option<BTreeMap<String, MediaType>>,
53}
54
55#[derive(Debug, Deserialize, Serialize, PartialEq)]
56pub struct Parameter {
57 pub name: String,
58 #[serde(rename = "in")]
59 pub in_: String,
60 pub required: Option<bool>,
61 pub schema: Schema,
62 pub style: Option<String>,
63}
64
65#[derive(Debug, Deserialize, Serialize, PartialEq)]
66pub struct RequestBody {
67 pub content: BTreeMap<String, MediaType>,
68}
69
70#[derive(Debug, Deserialize, Serialize, PartialEq)]
71pub struct Header {
72 pub description: Option<String>,
73 pub schema: Schema,
74}
75
76#[derive(Debug, Deserialize, Serialize, PartialEq)]
77pub struct Operation {
78 pub summary: Option<String>,
79 pub description: Option<String>,
80 #[serde(rename = "operationId")]
81 pub operation_id: String,
82 pub parameters: Option<Vec<Parameter>>,
83 pub request_body: Option<RequestBody>,
84 pub responses: Option<BTreeMap<String, Response>>,
85}
86
87#[derive(Debug, Deserialize, Serialize, PartialEq)]
88pub struct MediaType {
89 pub schema: Schema
90}
91