qi_openapi/v3/
schema.rs

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