1use serde::{Serialize};
2
3const SWAGGER_STANDALONE_LAYOUT: &str = "StandaloneLayout";
4
5#[non_exhaustive]
6#[derive(Serialize, Clone, Debug)]
7#[serde(rename_all = "camelCase")]
8pub struct Config {
9 #[serde(skip_serializing_if = "Option::is_none")]
11 pub config_url: Option<String>,
12
13 #[serde(skip_serializing_if = "Option::is_none")]
15 #[serde(rename = "dom_id")]
16 pub dom_id: Option<String>,
17
18 #[serde(skip_serializing_if = "Option::is_none")]
20 pub url: Option<String>,
21
22 #[serde(skip_serializing_if = "Option::is_none", rename = "urls.primaryName")]
24 pub urls_primary_name: Option<String>,
25
26 #[serde(skip_serializing_if = "Vec::is_empty")]
28 pub urls: Vec<Url>,
29
30 #[serde(skip_serializing_if = "Option::is_none")]
32 pub query_config_enabled: Option<bool>,
33
34 #[serde(skip_serializing_if = "Option::is_none")]
39 pub deep_linking: Option<bool>,
40
41 #[serde(skip_serializing_if = "Option::is_none")]
43 pub display_operation_id: Option<bool>,
44
45 #[serde(skip_serializing_if = "Option::is_none")]
47 pub default_models_expand_depth: Option<isize>,
48
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub default_model_expand_depth: Option<isize>,
52
53 #[serde(skip_serializing_if = "Option::is_none")]
55 pub default_model_rendering: Option<String>,
56
57 #[serde(skip_serializing_if = "Option::is_none")]
59 pub display_request_duration: Option<bool>,
60
61 #[serde(skip_serializing_if = "Option::is_none")]
63 pub doc_expansion: Option<String>,
64
65 #[serde(skip_serializing_if = "Option::is_none")]
67 pub filter: Option<bool>,
68
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub max_displayed_tags: Option<usize>,
72
73 #[serde(skip_serializing_if = "Option::is_none")]
75 pub show_extensions: Option<bool>,
76
77 #[serde(skip_serializing_if = "Option::is_none")]
79 pub show_common_extensions: Option<bool>,
80
81 #[serde(skip_serializing_if = "Option::is_none")]
83 pub try_it_out_enabled: Option<bool>,
84
85 #[serde(skip_serializing_if = "Option::is_none")]
88 pub request_snippets_enabled: Option<bool>,
89
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub oauth2_redirect_url: Option<String>,
93
94 #[serde(skip_serializing_if = "Option::is_none")]
97 pub show_mutated_request: Option<bool>,
98
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub supported_submit_methods: Option<Vec<String>>,
102
103 #[serde(skip_serializing_if = "Option::is_none")]
106 pub validator_url: Option<String>,
107
108 #[serde(skip_serializing_if = "Option::is_none")]
111 pub with_credentials: Option<bool>,
112
113 #[serde(skip_serializing_if = "Option::is_none")]
115 pub persist_authorization: Option<bool>,
116
117 pub layout: String,
119}
120
121impl Config {
122 pub fn url<U: Into<Url>>(&mut self, u: U) -> &mut Self {
123 self.urls.push(u.into());
124 self
125 }
126}
127
128
129impl Default for Config {
130 fn default() -> Self {
131 Self {
132 config_url: Default::default(),
133 dom_id: Some("#swagger-ui".to_string()),
134 url: Default::default(),
135 urls_primary_name: Default::default(),
136 urls: Default::default(),
137 query_config_enabled: Default::default(),
138 deep_linking: Some(true),
139 display_operation_id: Default::default(),
140 default_models_expand_depth: Default::default(),
141 default_model_expand_depth: Default::default(),
142 default_model_rendering: Default::default(),
143 display_request_duration: Default::default(),
144 doc_expansion: Default::default(),
145 filter: Default::default(),
146 max_displayed_tags: Default::default(),
147 show_extensions: Default::default(),
148 show_common_extensions: Default::default(),
149 try_it_out_enabled: Default::default(),
150 request_snippets_enabled: Default::default(),
151 oauth2_redirect_url: Default::default(),
152 show_mutated_request: Default::default(),
153 supported_submit_methods: Default::default(),
154 validator_url: Default::default(),
155 with_credentials: Default::default(),
156 persist_authorization: Default::default(),
157 layout: SWAGGER_STANDALONE_LAYOUT.to_string(),
158 }
159 }
160}
161
162
163
164#[non_exhaustive]
165#[derive(Default, Serialize, Clone, Debug)]
166pub struct Url {
167 name: String,
168 url: String,
169 #[serde(skip)]
170 #[allow(dead_code)]
171 primary: bool,
172}
173
174impl From<&str> for Url {
175 fn from(url: &str) -> Self {
176 Self {
177 url: url.to_string(),
178 ..Default::default()
179 }
180 }
181}
182
183impl From<String> for Url {
184 fn from(url: String) -> Self {
185 Self {
186 url,
187 ..Default::default()
188 }
189 }
190}
191
192impl From<&String> for Url {
193 fn from(url: &String) -> Self {
194 Self {
195 url: url.clone(),
196 ..Default::default()
197 }
198 }
199}