swagger_ui/
config.rs

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    /// Url to fetch external configuration from.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub config_url: Option<String>,
12
13    /// Id of the DOM element where `Swagger UI` will put it's user interface.
14    #[serde(skip_serializing_if = "Option::is_none")]
15    #[serde(rename = "dom_id")]
16    pub dom_id: Option<String>,
17
18    /// [`Url`] the Swagger UI is serving.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub url: Option<String>,
21
22    /// Name of the primary url if any.
23    #[serde(skip_serializing_if = "Option::is_none", rename = "urls.primaryName")]
24    pub urls_primary_name: Option<String>,
25
26    /// [`Url`]s the Swagger UI is serving.
27    #[serde(skip_serializing_if = "Vec::is_empty")]
28    pub urls: Vec<Url>,
29
30    /// Enables overriding configuration parameters with url query parameters.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub query_config_enabled: Option<bool>,
33
34    /// Controls whether [deep linking](https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/deep-linking.md)
35    /// is enabled in OpenAPI spec.
36    ///
37    /// Deep linking automatically scrolls and expands UI to given url fragment.
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub deep_linking: Option<bool>,
40
41    /// Controls whether operation id is shown in the operation list.
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub display_operation_id: Option<bool>,
44
45    /// Default models expansion depth; -1 will completely hide the models.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub default_models_expand_depth: Option<isize>,
48
49    /// Default model expansion depth from model example section.
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub default_model_expand_depth: Option<isize>,
52
53    /// Defines how models is show when API is first rendered.
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub default_model_rendering: Option<String>,
56
57    /// Define whether request duration in milliseconds is displayed for "Try it out" requests.
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub display_request_duration: Option<bool>,
60
61    /// Controls default expansion for operations and tags.
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub doc_expansion: Option<String>,
64
65    /// Defines is filtering of tagged operations allowed with edit box in top bar.
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub filter: Option<bool>,
68
69    /// Controls how many tagged operations are shown. By default all operations are shown.
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub max_displayed_tags: Option<usize>,
72
73    /// Defines whether extensions are shown.
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub show_extensions: Option<bool>,
76
77    /// Defines whether common extensions are shown.
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub show_common_extensions: Option<bool>,
80
81    /// Defines whether "Try it out" section should be enabled by default.
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub try_it_out_enabled: Option<bool>,
84
85    /// Defines whether request snippets section is enabled. If disabled legacy curl snipped
86    /// will be used.
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub request_snippets_enabled: Option<bool>,
89
90    /// Oauth redirect url.
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub oauth2_redirect_url: Option<String>,
93
94    /// Defines whether request mutated with `requestInterceptor` will be used to produce curl command
95    /// in the UI.
96    #[serde(skip_serializing_if = "Option::is_none")]
97    pub show_mutated_request: Option<bool>,
98
99    /// Define supported http request submit methods.
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub supported_submit_methods: Option<Vec<String>>,
102
103    /// Define validator url which is used to validate the Swagger spec. By default the validator swagger.io's
104    /// online validator is used. Setting this to none will disable spec validation.
105    #[serde(skip_serializing_if = "Option::is_none")]
106    pub validator_url: Option<String>,
107
108    /// Enables passing credentials to CORS requests as defined
109    /// [fetch standards](https://fetch.spec.whatwg.org/#credentials).
110    #[serde(skip_serializing_if = "Option::is_none")]
111    pub with_credentials: Option<bool>,
112
113    /// Defines whether authorizations is persisted throughout browser refresh and close.
114    #[serde(skip_serializing_if = "Option::is_none")]
115    pub persist_authorization: Option<bool>,
116
117    /// The layout of Swagger UI uses, default is `"StandaloneLayout"`
118    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}