openapiv3/
security_scheme.rs1use indexmap::IndexMap;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
9#[serde(tag = "type")]
10pub enum SecurityScheme {
11 #[serde(rename = "apiKey")]
12 APIKey {
13 #[serde(rename = "in")]
14 location: APIKeyLocation,
15 name: String,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 description: Option<String>,
18 },
19 #[serde(rename = "http")]
20 HTTP {
21 scheme: String,
22 #[serde(rename = "bearerFormat", skip_serializing_if = "Option::is_none")]
23 bearer_format: Option<String>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 description: Option<String>,
26 },
27 #[serde(rename = "oauth2")]
28 OAuth2 {
29 flows: OAuth2Flows,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 description: Option<String>,
32 },
33 #[serde(rename = "openIdConnect")]
34 OpenIDConnect {
35 #[serde(rename = "openIdConnectUrl")]
36 open_id_connect_url: String,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 description: Option<String>,
39 },
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
43#[serde(rename_all = "camelCase")]
44pub enum APIKeyLocation {
45 Query,
46 Header,
47 Cookie,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
51#[serde(rename_all = "camelCase")]
52pub struct OAuth2Flows {
53 #[serde(flatten)]
54 pub implicit: Option<OAuth2Flow>,
55 #[serde(flatten)]
56 pub password: Option<OAuth2Flow>,
57 #[serde(flatten)]
58 pub client_credentials: Option<OAuth2Flow>,
59 #[serde(flatten)]
60 pub authorization_code: Option<OAuth2Flow>,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
64#[serde(rename_all = "camelCase")]
65pub enum OAuth2Flow {
66 #[serde(rename_all = "camelCase")]
67 Implicit {
68 authorization_url: String,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 refresh_url: Option<String>,
71 #[serde(default)]
72 scopes: IndexMap<String, String>,
73 },
74 #[serde(rename_all = "camelCase")]
75 Password {
76 #[serde(skip_serializing_if = "Option::is_none")]
77 refresh_url: Option<String>,
78 token_url: String,
79 #[serde(default)]
80 scopes: IndexMap<String, String>,
81 },
82 #[serde(rename_all = "camelCase")]
83 ClientCredentials {
84 #[serde(skip_serializing_if = "Option::is_none")]
85 refresh_url: Option<String>,
86 token_url: String,
87 #[serde(default)]
88 scopes: IndexMap<String, String>,
89 },
90 #[serde(rename_all = "camelCase")]
91 AuthorizationCode {
92 authorization_url: String,
93 token_url: String,
94 #[serde(skip_serializing_if = "Option::is_none")]
95 refresh_url: Option<String>,
96 #[serde(default)]
97 scopes: IndexMap<String, String>,
98 },
99}