1use indexmap::IndexMap;
2use serde::{Deserialize, Serialize};
3
4use super::components::Components;
5use super::operation::PathItem;
6use super::security::SecurityRequirement;
7use super::server::Server;
8
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
11pub struct Info {
12 pub title: String,
13
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub description: Option<String>,
16
17 pub version: String,
18
19 #[serde(rename = "termsOfService", skip_serializing_if = "Option::is_none")]
20 pub terms_of_service: Option<String>,
21
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub contact: Option<Contact>,
24
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub license: Option<License>,
27}
28
29#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
31pub struct Contact {
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub name: Option<String>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub url: Option<String>,
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub email: Option<String>,
38}
39
40#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
42pub struct License {
43 pub name: String,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub url: Option<String>,
46}
47
48#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
50pub struct Tag {
51 pub name: String,
52 #[serde(skip_serializing_if = "Option::is_none")]
53 pub description: Option<String>,
54}
55
56#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
58pub struct OpenApiSpec {
59 pub openapi: String,
60
61 pub info: Info,
62
63 #[serde(default, skip_serializing_if = "Vec::is_empty")]
64 pub servers: Vec<Server>,
65
66 #[serde(default, skip_serializing_if = "IndexMap::is_empty")]
67 pub paths: IndexMap<String, PathItem>,
68
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub components: Option<Components>,
71
72 #[serde(default, skip_serializing_if = "Vec::is_empty")]
73 pub tags: Vec<Tag>,
74
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub security: Option<Vec<SecurityRequirement>>,
77}